Ja, hallo, liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode 27.
Wir wollen heute ein bisschen über unsere besten Wins und vielleicht auch Fails sprechen
und ein bisschen auf das nächste Jahr schauen.
Schön, dass ihr wieder eingeschaltet habt.
Ich bin natürlich wieder mit Jochen dabei.
Ja, Dominik auch.
Ich bin der Dominik, genau.
Und der Johannes ist heute wieder da.
Hey, Johannes.
Ja, hallo.
Hallo.
Ich bin ja quasi schon Dauergast hier.
Ja, kann man so sagen.
Also schon jenseits von Gast.
Ja, und ja, aber vielleicht wollen wir das einfach wie sonst auch halt immer mit so ein bisschen News, wobei wir könnten das diesmal auch so ein bisschen ausdehnen auf, was ist eigentlich 2020 so passiert oder was kommt in 2021 noch.
Moment, Strukturen.
Trends oder weiß ich nicht.
Bisschen Struktur, ja, ich fange einfach mal so ein bisschen mit News an.
Ja, ich wollte gerade sagen, dann kommen wir als erstes die News.
das passieren.
Und zwar ganz nett, freut mich natürlich
besonders. Es gibt jetzt Python
3.9.1
und 3.8.7 ist auch released worden, aber
für mich nicht so interessant, weil Apple
M1 Mac und
da ist das jetzt schon so ein Binary,
das halt nativ auf dem M1 läuft
für Python 3.9.1, also das ist
schon sehr, sehr cool.
Ja, und
es sind halt
ein Haufen Bugfixes oder so, kann man sich auf
der Changelog-Seite halt selber mal angucken.
Und zweites Ding auch zum M1, Docker tatsächlich, das war ja auch letztes Mal schon so ein bisschen die Frage, ob es das geben wird.
Ja, es gibt jetzt schon eine experimentelle Version und das wird dann wohl irgendwann kommen.
Also ich habe es nicht installiert, weil ich probiere jetzt gerade so irgendwie, wie sähe denn mein Leben aus ohne Docker-Experiment.
Mal schauen, ob das gut geht oder ich dann doch irgendwie wieder zurückgekrochen komme.
Aber ja, mal schauen.
war das mit Docker 3 eine Kombination, oder?
Äh, das weiß ich nicht.
Das war, es gibt eine experimentale
Release für M1, aber.
Die hat nämlich auch sowas wie Compose eingeführt
jetzt als extra Kommando ohne Docker Compose.
Ah, okay.
Ja, haben sie das reingezogen.
Das ist ja schön.
Ja.
Ja, ähm,
und ansonsten war noch, also
großes Thema, das war auch im Django Newsletter,
das ist ja immer irgendwie Breaking News
wenn, äh,
ist David Hanemeyer-Hanson, der von Ribbon and Rails hat etwas angekündigt.
Und zwar hat er einige Geschichten released.
Oder vielmehr die Firma dahinter, Basecamp, unter dem Oberbegriff Hotwire.
Ein Hotwire, ein heißes Kabel, was ist das?
Ja, das ist ganz interessant.
Ein heißes Draht.
Das hat mich sofort so ein bisschen an, also zuerst dachte ich, ist es jetzt irgendwie so ein Witz oder so, da hieß es halt so, naja, also bessere interaktive Geschichten, weil wir machen jetzt alles neu und anders und dieses ganze JavaScript-Zeugs braucht man nicht mehr. Wir machen nämlich jetzt HTML direkt über das Kabel. Ja gut, das hat man ja schon immer gemacht. Was ist denn da jetzt neu und toll?
Das hatten wir doch schon mal, oder?
Ja, das gab es doch schon irgendwann mal.
Und das Neue und Tolle ist, dass das halt
nur so HTML-Schnipsel sind.
Und die kommen halt auch
über Websockets.
Und ja, es gibt da halt
so ein bisschen JavaScript-Glue auf der
kleinen Seite,
wo man halt sozusagen, also
ein Teil heißt Turbo
von diesem Hotwire-Ding. Und das ist quasi
das, was halt dieses Handling
macht von, du hast halt Frames,
die halt selbstständig sich updaten können.
sodass du halt nicht einen kompletten Page Reload
machen musst, wenn sich irgendwas auf deiner Seite
ändert und
die können aber, du kannst aber auch Dinge außerhalb
von diesen Frames damit updaten und so und das
geht halt auch per Websocket und
dann hast du halt noch irgendwie
Stimulus heißt das irgendwie, so ein JavaScript-Framework,
wo du so relativ simple Kontrolle hast, die dann
irgendwas machen können,
wenn sie halt irgendwie Daten kriegen, nur
über
die Leitung und dann halt
irgendwie selber so ein bisschen
HTML rendern, aber das ist eigentlich eher so die Ausnahme,
eigentlich willst du sozusagen, dass es auf dem Server gerendert wird
und du ersetzt halt nur
Dinge im DOM, und zwar ganze
Bereiche. Und
das ganze State-Handling und das
ganze Gerendere, das passiert halt
weiterhin auf dem Server, wie man das halt gewohnt ist.
Und das ist natürlich schon eine nette Idee, dass du halt sozusagen einfach dein
stinknormales Ruby on Rails
Templating
Zeugs nimmst und du renderst halt HTML-Schnipsel
damit raus. Und die gehen dann halt nicht
quasi als kompletter Request
an den Client, sondern nur als
so ein Schnipsel über WebSocket
und werden dann halt einfach nur ersetzt
auf den Client. Und dann kannst du
quasi deine gesamte Applikation weiterhin
wie so einen normalen Ruby on Rails Moduliten
schreiben, aber trotzdem
hast du halt nicht diese
Unterbrechungen, die du normalerweise hättest, wenn du einen Petri-Load
machen musstest, nur weil du irgendwo auf ein Ding geklickt hast.
Und dann gibt es noch
ein Ding, das nennt sich irgendwie Strada und da weiß ich auch nicht so
genau, das wird erst noch released, das ist noch nicht fertig.
Ja, aber
im Wesentlichen ist es das, was
auch LiveView in Elixir
also mit Erlang und Phoenix macht,
irgendwie in Ruby on Rails
und ja
und jetzt haben natürlich auch schon
irgendwelche Leute sich überlegt, ob sie das nicht für Django
adaptieren können und so, da gibt es eine Diskussion
dazu und es gibt auch schon eine GitHub-Organisation
und aber
interessant bin ich daran, dass halt jetzt alle Leute
so, oder das ist irgendwie ein Thema jetzt gerade
so dieses Async
ja
na, dieses
Websocket-Zeugs und dann
diese Monolithen bewegen sich jetzt auch
in die Richtung, das war immer schon ein Thema, aber jetzt
gerade habe ich das Gefühl, das kriegt so richtig Moment.
Warum genau jetzt, weiß ich auch nicht so genau,
aber irgendwie jetzt gerade ist es irgendwie,
ja. Es hört sich
aber alles nicht ungeheuer neu oder
ungeheuer, ja, sagen wir mal
unbekannt
an, also so Sachen, dass da irgendwelche
Links mit JavaScript
automatisch versiehst, das gab es ja schon auch mal
in TurboGears oder in, was weiß ich,
wie das alles hieß. Ja,
finde ich auch, also insgesamt ist es nicht neu,
aber sozusagen der Ansatz zu
sagen, das machen wir jetzt statt,
irgendwie, APIs
und JavaScript-Frontend, das
ist schon so ein bisschen neu.
Weil dieses Feld hat... Ja, sicherlich wird auch
die Integration besser sein, als
wir machen einfach mal
so. Aber was muss man
erst davor setzen? Also in das Frontend macht man
dieses Turbo rein und das
lädt dann einfach aus der Template-Hin-Engine
irgendwelche
Teile raus, die dann irgendwo zwar
über Sockets kommen, nicht über einzelne Requests.
Ja,
also das kann auch über normale,
das kann aber über diese XHTTP-Requests kommen,
aber du kannst es halt auch über WebSocket machen.
Aber eigentlich der Witz ist,
dass du nichts mehr in JavaScript wirklich,
oder nichts Wesentliches mehr in JavaScript machst.
Du erzeugst nicht, also der wesentliche Unterschied ist,
du erzeugst in JavaScript kein HTML.
Also das, was halt all diese großen JavaScript-Frameworks machen,
ist ja irgendwie auch eine eigene Templating-Engine haben
oder irgendwie
zumindest irgendwas, was so ein bisschen danach aussieht
und dann baust du da dein HTML
halt zusammen und
machst im Grunde das gleiche, was du
im Backend machst, nochmal im Frontend.
Und die Idee
ist sozusagen, das machst du nicht mehr, sondern du machst das
nur noch im Backend und das Frontend ist
automatisch. Du musst eigentlich nichts mehr im Frontend machen.
Du kannst zwar noch so ein bisschen was tun,
aber normalerweise musst du nicht mehr viel machen.
Und du entwickelst einfach so ganz normal quasi
wie ein Ruby on Rails oder Django App
und
lieferst halt den JavaScript-Teil mit aus.
Ja.
Da gibt es auch ein ganz nettes Video zu
auf hotwire.dev und
da gibt es ja diesen
E-Mail-Service, den auch Basecamp gestartet hat,
hey.com und das ist halt
genau damit gebaut und ja.
Okay.
Na gut, muss man sich mal anschauen.
Ja.
Es gab vor Jahren mal eine
geniale Bibliothek, eine geniale
JavaScript-Bibliothek, die Page-Reloads schneller
gemacht hat.
Die hat einfach
Seiten vorgeladen, wenn man mit
der Maus drüber gefahren ist, weil
tatsächlich ist es so, dass Menschen sehr langsam
klicken und wenn sie mit ihrer Maus irgendwo hinfahren,
dauert das so 200 bis 500 Millisekunden,
bis du dann drauf klickst.
Ah.
Der hat einfach geguckt, wann die Maus
über einem Link stehen bleibt und hat den schon mal
geladen und
damit kriegt man 200 bis 500
Millisekunden Latenz weg, was
was ich finde,
eine sehr schöne Technik ist.
Das ist schon mal eine super Idee, ja.
Sehr psychologisch.
Also für alle Leute, die so notorisch, nervös
mit dem Mauszeiger rumwillen über alle Links,
gibt das dann Lags auf der Seite, ja,
weil die ganze Zeit irgendwelche Requests passieren, oder?
Ja, für die ist es
nicht gut geeignet, aber einen Tod
muss man sterben.
Okay, okay, verstehe.
Ja.
Ja, ich habe
keine News. Also ich habe in den letzten
vier Wochen nicht viel.
War zu sehr im Weihnachtsstress.
Ja, ja, Weihnachtsstress.
Es ist einfach nichts Neues passiert.
Ja, ja.
Das stimmt auch.
Ich habe jetzt so ein bisschen
Zeit, das habe ich dann auch gleich mal
genutzt, um irgendwie
meinem Gear Acquisition
Syndrom zu frönen.
Ja.
Da ist Weihnachten auch eine gefährliche
Zeit. Das stimmt.
ist der perfekte
Sturm sozusagen.
Ja, aber auch im Hinblick auf
ja genau, das wollten wir
vielleicht eine Überleitung zu Richtung, was
kommt eigentlich 2021 und die
ich, meine Vorhersage wäre
Pakete, ganz viele Pakete.
Es kommen viele Pakete.
Aber
ja,
nicht so viele Pakete mit
Audio und Video Hardware
zum irgendwie, weil
die sind alle schon angekommen
und da kommt nichts mehr
und zwar zum Beispiel, weil halt
in Japan ist halt eine Fabrik
von AKG ist irgendwie
abgebrannt
ja
das hat globale Auswirkungen
ja, das ist so ein bisschen schlecht
es gibt ja zum Beispiel bei den
also diese
analog
also DAC
also digital
zu Audio und umgekehrt Konverter
da gibt es halt nicht so viele
von, also die das in guter Qualität
machen und tatsächlich stellen
halt die Leute gerade so fest, eigentlich gibt es nur einen
und dummerweise dieser eine, der hat
dann zwar sein Zeugs unter ganz vielen
Labels
und so vertrieben und
es sah so aus, als könnte man das
Zeug überall kaufen, aber tatsächlich war es nur
eine Firma, nämlich AKG und tatsächlich war es
auch nur eine Fabrik, in der die hergestellt wurden, nämlich die
und die ist gerade abgebrannt und
das ist jetzt schlecht
und niemand anders kann das so richtig
und jetzt geht halt alles, was so
High-End-Audio angeht, da werden jetzt
so die Lagerer leer und die Preise steigen
und ja, wenn man da nichts
hat, das wird in 2021 ein bisschen
schwierig, das zu kaufen. Unter anderem
auch deshalb, weil halt, ja, die Nachfrage
weiterhin hoch bleiben wird, denke ich
mal, weil Homeoffice wird wohl weitergehen,
nehme ich mal an.
Bis wann? Es sieht erstmal so aus.
Ja, also
die bisherige
Prophezeiung war da so bis im Sommer
also jedenfalls jetzt hier bei uns
so
Mitteleuropa. Ja,
kommt drauf an, welche
Manöver.
Ja, Normalität, also
es kommt drauf an, was man sich da anhört. Aber jetzt
sind ja auch schon tatsächlich
die Zeit, gibt da aktuelle Zahlen an
21.566
Impfdosen in Deutschland
verabreicht worden.
Das ist doch schon mal nicht schlecht.
Dann ist ja nicht mehr weit.
Ja, wir sind schon fast da.
Wie viel brauchen wir? 40 Millionen durch 20.000?
Ja, auch das ist unklar.
Irgendwo zwischen 35 und 60 Millionen wird es wohl liegen.
Und doppelt natürlich.
Ja, und vor allen Dingen gibt es ja jetzt nochmal so eine neue, etwas abgewandelte Virusvariante,
die ein bisschen infektiöser ist und das ändert die Zahlen halt auch nochmal.
Weil das Problem ist, du brauchst einen größeren Anteil in der Bevölkerung, der immun ist, damit das noch funktioniert.
Weil das hat halt direkte Auswirkungen.
Wenn das Ding infektiöser ist, dann ist der Prozentsatz der Leute, die immun sein müssen, entweder dadurch, dass sie das schon hatten oder geimpft werden, höher.
Was bedeutet, es wird länger dauern wahrscheinlich.
Du musst mehr herstellen, dann musst du es verteilen, alles schlecht.
Also die pessimistischere Richtung geht eher zu sagen, das wird auch noch bis Winter 2021 leider dauern wohl.
also alles nicht so richtig
schön und sowieso die Zahlen
sehen alles fies
aus. Also es kann
eigentlich nur, also egal in welche Richtung es geht,
die sind eigentlich alle doof, die Richtungen.
Es gibt keine guten mehr. Jetzt über Weihnachten sind
die Sachen alle gesunken. Ja, komisch.
Warten wir mal die Nachmeldungen ab.
Warten wir mal die Nachmeldungen.
Ja. Ja, gut. Ich meine, das
wird uns noch das nächste
Jahr beschäftigen. Habt ihr da
irgendwas, habt ihr eigentlich sowas
gemacht? Also, was ich tatsächlich, ich hatte
das, das war mehr so ein, mehr so ein,
oh, weiß ich auch gar nicht, ob ich das erzählt habe,
naja, also,
es war mehr so ein Versuch,
genau, ich dachte so, naja, Gott,
diese ganzen E-Commerce-Geschichten,
da will ich auch mit dabei sein, jetzt so
im Jahr 2021, weil ich habe so mal in der Partikel
gefragt, ob man nicht irgendwie diese Schnelltests, das klingt ja
alles ganz toll und so, und hier ist es dann so,
ne, ne, ne, und da dachte ich, na gut,
dann gucke ich doch mal, gibt es nicht Webseiten,
auf denen man das kaufen kann, und tatsächlich gab es,
Und ich habe dann halt auch bestellt.
Wie viel WT ihr hatten?
Ja, man muss sie in großen Packungen kaufen.
Ich habe irgendwie so 25 Stück bestellt.
Das hat so irgendwas um die 200 Euro gekostet oder so.
Ja, das geht ja tatsächlich noch preislich.
Ja, also pro Test waren das so um die 10 Euro.
Und dann hieß es aber direkt irgendwie so ein paar Tage später,
äh, momentan ein bisschen schlecht mit dem Liefern.
Habe ich mir auch schon gedacht,
dass das eventuell auch noch andere Leute
auf die Idee gekommen sein könnten.
Und ja, aber es kam dann tatsächlich
sogar noch vor Weihnachten irgendwie an
und hat alles funktioniert.
Ja, also irgendwie DHL meinte so,
ja, super, herzlichen Glückwunsch,
kommt doch noch an.
Irgendwie, wir sind sehr froh,
dass wir das sagen können,
aber wir beliefern medizinische Einrichtungen
auch mit Priorität.
Da ist so, ja, das ist sehr gut.
Sonst wäre das ja vielleicht gar nicht angekommen.
Wunderbar.
Ja. Und hast du einen Webshop aufgemacht
und den Preis verfünffacht?
Nee, nee, nee.
Ein guter Teil davon ist jetzt auch schon
verbraucht.
Aufgegessen.
Ja, ich habe
tatsächlich Angebote gesehen, da haben sie
50 Euro pro Test verlangt. Also da können
schon durchaus Margen drin sein, Jochen.
Ja, gut.
Zehn kannst du ja verkaufen.
Geld für zwei neue Lieferungen.
Hm, lass mal überlegen, wie kann man denn da ein Pyramidensystem draus machen?
Eine kurze Lektion in exponentielles Wachstum.
Ja.
Das war ja mal ein Vorschlag, den ich hatte, dass man Leute, die gegen die Maskenpflicht verstoßen, dass man denen zuerst eine Strafe gibt, die sehr niedrig ist, 5 Euro.
Und beim zweiten Verstoß dann aber 10 Euro.
Und beim dritten Verstoß 20 Euro.
Und das wäre dann gleichzeitig abschreckend und eine kurze Einführung in exponentielles Wachstum.
Ja, ich glaube, die Wahrscheinlichkeit der Kontrolle mehrfach ist wahrscheinlich gering.
Ja gut, das ist ja auch ein lösbares Problem. Also das ist ja, also bitte, gerade in Deutschland ist das ja ein lösbares Problem.
Ob ihr das jetzt als Win oder als Fail einsortiert, das überlasse ich jetzt bei euch.
Ja, insgesamt tendiert die ganze Situation
so ein bisschen Richtung Fail, muss ich sagen.
Ach, findest du?
Ja.
Also das Schlimmste, was ich jetzt hatte,
dass ich jetzt nicht so in die Sauna gehen konnte, wie ich wollte
und das Fitnessstudio hat zu und
Babyschwimmen ist ausgefallen. Also das sind alles
First-Welt-Problems.
Es ist schon sehr schlimm,
Dominik, dass du deinen Job verloren hast
und kurz vor dem Finanziellen ausstehst
und auch deine Wohnung bald verlierst
und
Ja, nee, also das
tatsächlich
Da muss man wirklich sagen, wir leben alle
in so einer Blase.
Ja, also ich meine, in unserer Branche ist es
halt wirklich sehr einfach, Homeoffice zu machen.
Das ist für andere
Betriebe, alle, die in der Gastronomie
arbeiten, für die ist es schwieriger.
Ja, ganze Veranstaltungsbehandlung,
Arschkrate, Einzelhandel
und so weiter.
Mein Cousin
hat ein Konzertbüro,
eine Konzertagentur. Die hatten
zwischendurch überlegt, ob sie Konzerte in
Flugzeugen machen sollen, weil das war nämlich
erlaubt. Hätten sie immerhin für 300
Leute Flugzeugkonzerte
machen können, haben es aber nicht gemacht.
Geld oder Leben heißt das. Aber klar, dem ist das
ganze Jahr einfach ausgefallen.
Geld oder Leben.
Kennt ihr dieses
Ticketsystem,
Pretix, auch Django-System?
Natürlich. Die unterstützen
noch jedes Jahr die DjangoCon.
bitte, Jochen. Genau.
Die hatten jetzt auch so ein
Problem damit, dass halt irgendwie,
naja, gute ganzen Veranstaltungen, die normalerweise dann
Pre-Tix benutzt haben,
um die Tickets zu verkaufen,
dieses Jahr so ein bisschen sparsamer
irgendwie unterwegs waren.
Und dann dachten sie schon so,
oje, oje, was machen wir denn jetzt? Und dann
sind da aber andere
in die Bresche gesprungen,
sozusagen, und sie hatten dann halt dieses Jahr mehr zu tun,
als sie normalerweise zu tun hatten.
Und zwar mit
mit zum Beispiel Schwimmbädern.
Weil normalerweise
verkaufen die Schwimmbäder... Jeder braucht jetzt ein Ticketsystem.
Genau, die verkaufen ja ihren Kram
normalerweise direkt an der Kasse, aber das geht ja jetzt nicht mehr.
Das heißt, die müssen die Sachen online
verkaufen und dann brauchst du ein Ticketsystem dafür.
Und tja, tada!
Ja, Reservierungssysteme,
auch das ist ein guter Markt in diesem Jahr.
Ja, ja. Absolut.
Also...
Ja, auch alle
Lieferdienste und so, das ist sicherlich
dieses Jahr
gut gelaufen, aber
ja gut, es gibt immer Gewinner und Verlierer
und
ich überlege auch, ob ich
jetzt so ein bisschen Richtung Video mal ein bisschen
mehr machen soll, ich weiß nicht, ich habe jetzt schon mal so ein bisschen
Hardware geordert, ich hoffe mal,
dass ich nicht noch mehr Hardware ordern muss, weil
sonst habe ich ein Problem, aber
das ist ja
auch sowas, also genau, da habe ich
auch noch mal ein anderes Mikrofon, so ein
dynamisches, weil das nimmt so ein bisschen
die Umgebungsgeräusche weg, aber das kann man dann
dafür dann halt weiter weghalten und dann
sieht man, so mit dem Headset und Video ist halt doof,
das geht auch nicht so gut. Ja, mal gucken,
muss da mal so ein bisschen experimentieren.
Ja, ich kann dir da, ich als Betreiber
des
rasend erfolgreichen Spielmanns
Kekskanals, kann dir da natürlich gerne
viele Hinweise geben.
Wir haben
auch noch ein Video in der Pipeline, wir hatten nur
bisher keinen Bock, das zu machen, weil
einfach zu viel anderes Zeugs los war.
Jetzt wieder Kekse, mehr Kekse, noch
mehr Kekse? Ja, wir
überlegen uns, wie man den Impfstoff
wohl als Keks umsetzen kann. Wir hatten ja schon
das Virus als Corona-Ausstecher.
Dann hatten wir Antikörper
in Keksform
und jetzt überlegen wir uns, ob wir vielleicht noch eine Impfung
machen. Wie sieht der denn überhaupt aus? Wird der
per Schluckimpfung verabreicht oder
wird der gespritzt? Nee, die werden gespritzt.
Also wir hätten dann natürlich eine Schluckimpfung,
selbstverständlich,
in Keksform, aber der Impfstoff
selber ist, die sind alle, also
es gibt verschiedene Impfstoffe. Die meisten sind
in Spritzen. Es gibt tatsächlich
eine, die in die Nase eingespritzt
wird. Das ist die angenehmste.
Die ist allerdings noch nicht durch Phase 3
durch.
Habt ihr das gelesen?
Ich finde, das fand ich super cool.
Da gab es jetzt einen Artikel
auch von einem, der normalerweise
sich eher mit Computerkram beschäftigt, VDNS oder so.
Oh ja, den habe ich gelesen.
Den hast du gelesen? Ich weiß, was du meinst, Jochen.
Ja, der war sau cool. Der hatte
den Impfstoff von BioNTech
Pfizer, den hat
er halt sozusagen aus so einem
Computer,
so einer Computerperspektive irgendwie mal
darüber gesprochen, was das Ding so alles macht
und das fand ich sau interessant, weil da waren
echt einige tolle Tricks dabei, von denen
ich gar nicht wusste. Man muss dazu sagen,
man muss dazu sagen, dass der ja veröffentlicht ist.
Der ist ja als Patent eingereicht und da
muss er ja veröffentlicht sein. Das heißt,
der gesamte Quellcode, um es mal so
zu sagen, also das, was dann tatsächlich als
mRNA hergestellt
wird, steht da einfach drin. Das ist eine
Buchstabenfolge. Es sind irgendwie,
Jochen, korrigiere mich, 2270
Zeichen oder sowas. Also vergleichsweise klein.
Ja, ich weiß nicht mehr genau.
Es ist irgendwie so halb so groß wie das Virus selber.
Oder die, ja.
Genau. Und
ja, da sind einige schöne Hacks
drin. Auch einige schöne Sachen, die man so
ja, als
Computermensch durchaus versteht, warum manche Sachen
so sind und warum manche Sachen nicht so sind. Sehr, sehr,
sehr schön gemacht. Ja. Und es
ist auch erstaunlich wenig. Also es ist auch einfach
ja, der größte Teil
von diesen, ja ja
der größte Teil von den Daten
ist halt 1 zu 1 aus dem Virus kopiert
quasi
ja nicht 1 zu 1, das hast du nicht genau genug gelesen
man hat ein paar Änderungen gemacht
ja, aber also
tatsächlich was das Ding tut, ist
also einmal RNA ist halt
also ist halt sozusagen
in Computer-Analogie übertragen
halt sowas wie Hauptspeicher oder so, es ist halt relativ
flüchtig, also es überlebt
so an der Luft nicht lange und
auch wenn man das irgendwo in Organismen
muss es ja auch gekühlt werden. Deswegen diese
Kühlkette und so, das ist alles ein bisschen doof.
Wenn man es in Organismen reinspritzt, dann
normalerweise das Immunsystem wird
da so leicht misstrauisch, wenn da irgendwie so
RNA-Energie gibt. Ja, auch Zellen
nehmen den ja eigentlich normalerweise gar nicht an.
Die nehmen ja gar keine RNA-Affenhausen.
Ja, und
aber da gibt es dann halt schon mal so ein, genau,
aber es ist halt quasi der rohe Code,
der halt dann irgendwie von den Ribosomen
der Zelle halt irgendwie sozusagen in Anführungszeichen
ausgeführt wird.
Und der dann halt
Proteine,
der wird dann abgelesen und dann werden Proteine
halt synthetisiert.
Ja, und das, was dieses Ding
macht, ist, das Spike-Protein
von dem
Virus zu erzeugen.
Und zwar so ziemlich genau
das Ding. Bis auf auch wieder
ein paar kleine Details.
Damit es stabil wird. Genau, weil normalerweise
rollt sich das Ding zusammen, faltet sich zusammen und
dann ist es halt egal. Also das Virus
blüht dieses Spike-Protein auch erst
so kurz vor der Infektion. Normalerweise
kriegt das Immunsystem den Kram halt nie zu sehen.
Und wenn man das Virus platt macht,
also wie man das normalerweise mit Impfstoffen, also die
simpelste Art, man schüttet irgendwie formal
die Hüte drüber oder man macht das irgendwie heiß,
dann ist das halt kein Virus mehr, sondern nur noch so
Teile von einem Virus.
Virus-Krümel.
Und
ja, das reicht ja manchmal auch schon, damit das
Immunsystem dann so merkt, okay,
das erkenne ich hier
wieder, aber bei dem Virus
ist das blöderweise nicht so richtig toll, weil
das entscheidende Protein halt dann nicht
mehr so in der Form da ist, wie es
kaputt geht. Genau. Und dieses
dieser Impfstoff
erzeugt halt dieses Protein und zwar
halt so, dass es sich nicht zusammenfaltet,
sondern in der gleichen Form bleibt.
Und dass das
Immunsystem das Ding dann halt auch wieder erkennen kann. Das ist natürlich
total super, weil
naja, also das sieht halt aus wie eine
echte Infektion für das Immunsystem. Da kommt
irgendwie so Zeug, so eine Spritze, also kommt halt
irgendwie so Zeugs rein, dann fangen Zellen plötzlich an
etwas zu produzieren, was sie normalerweise nicht produzieren
und das ist alles höchst alarmierend
und ja,
das sieht alles sehr gefährlich aus, ist aber halt ungefährlich
eigentlich, weil sobald die RNA verbraucht ist,
die in so der Impflosis drin steckt, dann ist es halt weg.
Das kann sich nicht fortpflanzen,
das ist ein einmaliges Event, das ist eine
der wichtigen Sachen, das heißt, man wird nicht krank davon, sondern
es wird halt
einmal umgesetzt.
Für mich das Beeindruckende
an der ganzen Geschichte ist eigentlich,
dass das eine Technik ist,
die nicht nur für dieses Virus funktioniert,
sondern die funktioniert prinzipiell
für eine ganz große Menge an Viren.
Das heißt, sobald man so ein Virus einmal sequenziert hat,
kann man prinzipiell sehr schnell damit anfangen.
Und das war ja auch bei diesem Virus hier so,
dass die nach zwei Tagen diese Sequenzen,
die sie da jetzt alle getestet hatten, hatten.
Die haben diese Virussequenz gekriegt aus China.
Und war ein kleines Labor.
Das war auch eine sehr beeindruckende Geschichte.
War eine Handvoll Männchen nur, oder?
Das waren unter zehn, die da in dem Labor saßen
und das gemacht haben, oder?
Ja genau, das waren also im Wesentlichen halt die Leute von Biontech und die haben das übers Wochenende gemacht und dann hatten sie diese Sequenzen und der Rest der Zeit ist jetzt mit Testen und Herstellen verbraucht worden.
Und das ist schon beeindruckend, weil wenn diese Technik so funktioniert, dann hat man so eine ganze Klasse von Impfstoffen, die man quasi on demand herstellen kann und das ist schon eine große Sache, wenn ein neueres Virus auftritt und du kannst einfach direkt anfangen, den Impfstoff herzustellen.
Ja, das ist schon...
Da wird sich die Sache ganz schön ändern.
Was ich auch toll fand, das wusste ich auch nicht,
das war auch für mich völlig neu,
das hast du mir erstmal in diesem Artikel gelesen, dass du halt
tatsächlich so eine Art, wie so 3D-Drucker
oder Drucker für
RNA kannst du halt einfach kaufen,
dann nimmst du diese Folge, die du halt
irgendwie aus dem Internet, aus einer
aus so einer zwielichtigen Quelle
irgendwie kopiert, tust das da rein
und dann drucktest du das Ding halt in RNA einfach
aus, so in so einer
30-Mikrogramm-Dosis und
gut, ist jetzt auch nicht so einfach
zu handeln, aber dann kann man
damit halt lustige Sachen machen und das in Muskel
spritzen und dann programmiert
das halt irgendwie Zellen. Das ist irgendwie schon
faszinierend. Da kann man coole Sachen machen.
Bestimmt können wir irgendwann alle ewig leben.
Das gibt's
übrigens auch als As-a-Service.
Man kann auch solche Sequenzen einfach
machen und die dann irgendwo hinschicken.
Live longer as a Service.
Wir haben auch nicht mehr in Atmung.
Da müsst ihr vielleicht mal eine Episode
mit Simon machen, der kann euch
da Geschichten erzählen,
die euch sehr beeindrucken
werden. Es gibt so Gen-Bibliotheken, da kann man
einfach Samples bestellen.
Die sind dann, die meisten dieser Samples
sind auch stabil, das heißt, man kriegt ein Blatt Papier,
wo einfach ein Kreis drauf ist,
wo die diese Flüssigkeit drauf getropft haben, die trocknet
dann, aber die Gen-Materialien,
die du da bestellt hast, sind ja stabil.
Kriegst du per Post.
Versandkosten sind 90 Cent.
Ja, war so cool.
Ein weiterer Trick,
den ich gerade noch erinnert habe,
normalerweise ist ja immer alles aufgebaut,
auch in der RNA aus diesem
A, G, T, U oder so.
Und das U
haben sie ausgetauscht gegen was anderes.
Ich weiß jetzt gar nicht, wie man das ausspricht.
Irgend so ein griechischer Buchstabe.
Durch ein Tau.
Und normalerweise
eben, das Immunsystem wird halt,
weil normalerweise funktioniert das mit der RNA nicht so gut,
wenn man die einfach so nehmen würde
und irgendwo reinspritzt, weil das Immunsystem
das verdächtig findet und die sofort
kaputt macht und so. Aber wenn man
das U durch ein Tau ersetzt,
ist diese RNA
dem Immunsystem einfach vollkommen
egal. Das reagiert da gar nicht mehr drauf.
Und das
ist ja offenbar keine RNA.
Ja, ist ja offenbar irgendwas anderes.
Ist ja nicht wichtig.
Lustigerweise
in der Zelle und in den Reversum
macht es halt genau das gleiche wie das U.
Das heißt, es funktioniert
halt genauso. Also eigentlich sollte es dem
Immunsystem vielleicht nicht egal sein.
Es sind sehr viele
sehr schöne Hacks drin.
Und auf der anderen Seite muss man sich auch keine
Sorgen machen, dass jetzt irgendwie ein Virus
diesen Trick kopiert und dann damit
irgendwie unter Umständen sehr, sehr böse werden kann,
weil man dieses
Ding kriegt man halt nicht
in einem biologischen Prozess synthetisiert, sondern
das geht nur mit Technik
und so. Das heißt,
diesen Trick
kann das Virus sich dem Impfstoff
nicht abgucken. Also es ist schon
toll, ja. Also hat viel Spaß
gemacht, das zu lesen. Ja, also würdest du
das jetzt als Win zählen oder als Fail?
Stimmt, das Ding ist eigentlich tatsächlich ein großer Win, ja.
Das würde ich auch sagen.
Wie gesagt, das wird in Zukunft eine ganze Klasse
von Impfstoffen ermöglichen,
die sehr schnell durch sind.
Wenn diese Technik einmal etabliert ist, wenn man
fünf oder zehn solche Impfstoffe gemacht hat, dann einfach
gar keine Nebenwirkungen passieren, weil die halt nicht
passieren können.
Dann gibt es da eine generelle Freigabe, dann musst
und dann mit einer Sequenz kommen und sagen, ich möchte gerne
gegen dieses Virus geimpft werden,
muss zwei Stunden
warten und bis dann geimpft.
Ja, das ist auch, also ich meine,
da gibt es ja jetzt auch Studien, also
man hat schon Erfahrungswerte, also es gab auch
große Studien, aber
in den USA eben 600.000 Leute schon
geimpft, mindestens jetzt, wahrscheinlich schon mehr
und tatsächlich gab es irgendwie
praktisch nichts an
Nebenwirkungen. Dann gab es,
was war das
irgendwie vor ein paar Tagen über Twitter, oh mein Gott,
Ich frage mich immer, das hört man dann auch
so von Leuten, so impfen, ja oder
nein, oder gibt es irgendwie Allergien?
Ich frage mich immer, wo dann solche
Informationen herkommen. Wenn die dann Autisten
Ja
und jetzt
auf Twitter habe ich dann tatsächlich mal
eine von den Quellen für so einen Quatsch
irgendwie gesehen, das war halt die
diese Hahnemann-Gesellschaft, also die
Homöopathie-Leute, hatten auf ihrer Webseite
eine ganze Reihe von irgendwie
echt hahnemüchenen
Behauptungen, unter anderem eben auch,
dass der Impfstoff Allergien auslösen würde,
was totaler Quatsch ist.
Und dann hatte irgendjemand die wohl
dann auch zur Rede gestellt
und meinte so, ey, das ist ja schon ganz schön gefährlich,
was ihr hier schreibt, das ist zur Hölle, was macht
ihr eigentlich? Und ich so, nein, das haben wir doch
aus der Studie selber. Da,
guck doch, da hat es eine Allergie
ausgelöst. Ja,
haben dann nochmal Leute reingeguckt, ja,
das war aber die Kontrollgruppe, die hatten
das, die haben gar nicht den Impfstoff
gekriegt. Also das ist echt. Ja, aber,
also ich meine, das ist ja noch schlimmer, wenn dieser Impfstoff
bei den Leuten Allergien auslöst, die
den gar nicht kriegen. Also Jochen, das ist ja jetzt mal ganz ehrlich.
Ja, Magie.
Ja, es ist
schwer dagegen zu argumentieren, das stimmt schon.
Ja, das ist so ein bisschen
wie diese Leute,
denen man dann sagen muss, ja,
dass jetzt überall die Überwachungskameras sind,
mit denen Bill Gates die Welt übernehmen möchte und der
einzige, die einzige Art,
wie man da drumherum kommt, ist, indem man seinen Mund
und seine Nase bedeckt und
die Sorte
ist es halt. Ja, aber
Wenn die Kontrollgruppe die Allergien kriegt, dann müsste man eigentlich möglichst schnell den Impfstoff nehmen, damit man diese Allergien nicht bekommt.
Ja, aber ich verstehe den Ansatz, aber mich ärgert so ein bisschen das Problem, ich habe das Gefühl, dass es langfristig, dass man das nur verlieren kann.
Weil das Problem ist, wenn man etwas tut, was funktioniert und also sagen wir mal so, wenn man das halt quasi nur so verpacken muss, dass es halt dann akzeptiert wird und es nicht darauf ankommt,
ob die Begründung dafür richtig oder falsch ist
oder überhaupt irgendwas richtig oder falsch ist oder alles
irgendwie nur in einer, keine Ahnung,
in ihrer Scheinwelt leben, dann hat man das Problem,
dass die Leute, die halt sich nur
um die Verpackung Sorgen machen müssen, weil sie halt
einfach gar keinen Inhalt haben, haben halt einen Vorteil
und zwar einen strukturellen
Vorteil. Und man selber
muss ja auch noch dafür sorgen, dass es funktioniert. Das heißt,
man kann eigentlich nur verlieren. Das ist nicht gut.
Ja, auch nicht. Ich sehe da
eine große Desillusionierung
auf dich zukommen. Ich möchte dir jetzt nicht sofort
um die Ohren hauen, aber
ich befürchte,
wir müssen da mal eine
schlimmere Episode drüber machen.
Ja.
Ja, okay, aber
das ist ja alles schon eine sehr schöne Überleitung.
Lass uns doch mal über Sachen, Themen sprechen, die
wir so
wiederfahren sind.
Ich möchte endlich über mich sprechen.
Naja, während du dich in der Jugend
konzentriert hast.
Ja, dann genau. Was haben wir denn
so an Dingen, die gut oder
schlecht gelaufen sind.
Ich habe eine schöne Anekdote von ganz, ganz,
ganz früher. Ich habe früher
ganz viel mit Oracle-Datenbanken gearbeitet.
Habt ihr schon mal die Freude
gehabt, mit Oracle-Datenbanken arbeiten zu
dürfen? Ja. Nö.
Ja. Ich schätze mal,
Jochen, der Grund war bei dir
der gleiche wie bei mir.
Wir haben das halt.
Naja, das war, also tatsächlich
web.de lief
zum großen Teil, also
also der Team-Mail lief halt
auf Oracle quasi. Weiß nicht, ob das
immer noch so ist, aber vor langer Zeit war das so.
Das war in den 90ern noch, da gab es mal so
Oracle-Krams. Ja, in den Nullern auch noch.
Ja, bei mir war das auch
in den Nullern.
Ja.
Ja, bei uns war im Wesentlichen
die Begründung, dass der Hersteller das Produkt
ist, das wir vertrieben haben, halt das vorgegeben
hat, weil andere Datenbanken sind nicht schnell
genug.
Was damals schon eine sehr interessante
Auffassung, Behauptung war.
Ja.
Wir haben es auch nicht näher untersucht.
Vielleicht war da Magie im Spiel.
Ich schätze, dass da so grüne
Papierscheinchen-Magie
im Spiel gewesen sein mag.
Diese Magie schon wieder.
Ja. Kennt ihr den Softwarehersteller
CA?
Die hießen früher mal
Computer Associates.
in der Enterprise-Welt
ungeheuer groß, sind inzwischen
auch gekauft von
irgendjemandem. Ich weiß gar nicht von wem.
Als wir damals,
wir waren da eben Partner von denen,
da haben die 15 Milliarden Dollar Umsatz im Jahr
gemacht, aber außerhalb der
Enterprise-Industrie kannte die
und kennt die auch quasi niemand.
So der freundliche, unbekannte
Riese. Jedenfalls mussten wir da Oracle
Datenbank verwenden und
es gibt ja dieses schöne Statement
DeleteFrom für SQL-Datenbanken.
Habt ihr sicherlich auch schon mal verwendet.
DeleteStaffFrom, du sagst.
Nee, DeleteFrom
heißt der Befehl einfach nur, weil du
da erst dann angibst mit einer
Where-Klausel, was alles gelöscht werden soll.
Also DeleteFrom, dann
gibst du an die Tabelle, aus der gelöscht werden soll und dann
mit einer Where-Bedingung, welche Zeilen gelöscht werden sollen.
Und
das hat das Potenzial, sehr
viele Zeilen zu löschen,
weil wenn du dieses Where vergisst oder wenn du dazwischen
einen Kommentar machst, dann
hast du ein Delete-From-Tabelle
und dann wird diese gesamte Tabelle gelöscht.
Und das haben
manche von uns Entwicklern auf die
harte Tour rausgefunden, dass das so ist.
Manche von uns. Weil wir halt tatsächlich
einfach mal, ich will jetzt
keinen Namen nennen, ich will jetzt auch niemanden
hier persönlich an den Pranger stellen.
Delete-From.
Wenn man nur Delete-From-Tabellenname
ergibt,
dann löscht das einfach alle Zeilen
aus einer Tabelle raus.
Und das ist ja sehr
ungünstig, wenn das mal passiert.
Je nachdem. Manchmal möchte man das aber auch.
Ja. Genau, manchmal möchte man das auch.
Manchmal möchte man alle Zeilen einer Tabelle löschen.
Insbesondere dann, wenn man gerade mit der Testdatenbank
verbunden ist
und die mal resetten möchte
und einfach mal alles löschen möchte.
Da ist jetzt schon der erste
Fail. Das passiert nämlich manchmal, dass man
versinnlich nicht mit der Testdatenbank
verbunden ist, sondern mit der
Produktivdatenbank.
Aber zum Glück, und das ist was sehr
Interessantes,
Und wir haben dann gemerkt, dass dieser Befehl sehr, sehr langsam ist. So ein DeleteFrom macht ja eigentlich nicht viel, das löscht halt die Tabelle und das müsste ja eigentlich so im Handumdrehen gehen. Aber dieser Befehl ist sehr langsam, weil der löscht die Tabellenzeilen nicht einfach nur, sondern der verschiebt die ins UndoLog.
Tatsächlich hat Oracle, anders als andere Datenbanksysteme, einen Papierkorb und dieser Papierkorb ist das Undo-Log. Das heißt, wenn du ein Delete-From gemacht hast, kannst du die Zeilen wieder retten, wenn du rechtzeitig zu deinem Systemadministrator gehst und sagst, ich hoffe, ihr habt das Undo-Log noch nicht gelöscht oder geleert oder überschrieben und dann kriegst du die Zeilen wieder.
Jetzt ist es so, wenn das passiert, dann ist das sehr langsam.
Gerade wenn man eine Tabelle löscht, wo eine Milliarde Zeilen drin sind,
dann ist das halt sehr langsam.
Und weil das zu langsam ist, gibt es bei Oracle einen speziellen Befehl,
der heißt Truncate Table.
Der macht das, was normalerweise ein Delete From ohne Bedingung macht.
Der löscht alle Zeilen aus einer Tabelle und zwar schnell,
ohne die ins Undo Log zu tun.
Und ihr könnt euch denken,
wohin das geführt,
wozu das geführt hat.
Und zwar DeleteFrom.
Jeder Entwickler in der Abteilung
war dieses DeleteFrom zu langsam.
Wir sind einfach alle auf TruncateTable
übergegangen.
Was dann so diesen ganzen Sinn,
dieses Undulog so ein kleines bisschen kaputt gemacht hat,
als der Erste halt tatsächlich
in der Produktionsdatenbank
ein TruncateTable gemacht hat.
Nicht nur ein DeleteFrom,
sondern ein TruncateTable.
Und einfach mal eine von den
Projektdatentabellen gelöscht hat.
Schwupps, schwupps. Das war
ein nicht so cooler Tag.
Ja, ich würde sagen,
ich bin den Stecker gezogen.
Ja, das war auch die Firma,
wo sie, damals hatten wir noch Subversion,
wo das
Subversion auf einem Raid lag und eine von den
Festplatten kaputt gegangen ist und dann der
Hersteller gekommen ist und die falsche Festplatte
ausgetauscht hat.
Die eine hat
er hoffentlich direkt fachgerecht entsorgt.
Also wir hatten
auf jeden Fall ungefähr eine Woche an Sachen
verloren, die einfach dann nicht mehr da waren.
Und Subversion ist ja auch nicht einfach so, dass du wieder pushen kannst.
Ist ja nicht wie heutzutage, wo
jeder eine Kopie hat, sondern Subversion ist dann halt
einfach erstmal komplett kaputt.
Ja, ich erinnere mich
da auch. Schöne, professionelle
Zeiten damals.
Da hat wohl einer keine Backups gehabt.
Ja,
wir hatten ja einen Raid.
Ja, ja.
Brauchst du ja nicht. Habe ich gar nicht vor so langer
Zeit gemacht. Ich glaube, das ist ein paar Wochen her.
Reset Schema
in einem Projekt, in einer Deploy-Chain
und dann vergessen,
das Backup dann wieder aufzuspielen.
Du hast es gleich direkt automatisiert gemacht.
Das ist doch, würde ich sagen, sehr modern.
Du hast nicht nur die Daten mal gelöscht, sondern du hast sie gleich
automatisiert und mit Tests gelöscht.
Ja.
Die hätte man wahrscheinlich noch wieder herstellen können.
Wiederholbar gelöscht.
War nicht so schlimm eigentlich, weil
das Projekt liegt noch nicht so lange.
Ja, so einen ähnlichen Fall
habe ich mal, ich meine, man kann halt,
Habe ich auch mal produziert.
Allerdings, was war ja so ein...
Ich meine, Datenbanken kann man natürlich löschen.
Das ist eine Möglichkeit, irgendwie sie unverfügbar zu machen.
Eine andere elegante Möglichkeit,
Datenbanken
von der Verfügbarkeit zu entfernen,
ist halt, sie einfach auszuschalten.
Und normalerweise merkt man das halt auch immer sofort,
wenn eine Datenbank weg ist.
Manchen Datenbanken,
da ist das Caching so advanced, dass man das nicht
sofort merkt. Zum Beispiel bei DNS.
Oh, den ist es auch generell. Ein sehr schönes Thema.
Und genau, wenn man
so den Primary DNS-Server ausschaltet,
einfach, weil man das irgendwie sich verguckt hat
und im Reck des Falschen
kann auch schon mal sein, dass
man das halt nicht sofort merkt,
weil, naja, das meiste ist ja gecached,
das funktioniert einfach alles weiter.
Manche kriegen halt so seltsame Failermeldungen, aber manchmal
das ist halt so, Computer, manchmal funktionieren
Dinge nicht so richtig.
Überprüfe deine Netzwerkverbindung.
Und dann wird es halt nur irgendwann
dann komisch, wenn dann halt der Traffic immer
weiter runter geht und man weiß nicht so recht, warum.
Und dann denkt man sich so,
was ist denn heute für ein Datum?
Ist da irgendwie Weihnachten gerade?
Oder Fußball-Weltmeisterschaft?
Oder wenn es das nicht ist,
okay, das sieht jetzt aber schon
komisch aus. Aber das
Problem ist, wenn man es dann bemerkt, ist es halt schon zu spät.
Weil dann haben nämlich auch alle...
Ja, und dann hast du auch die Cash-Zeiten
beim Hochfahren auch wieder.
Aber da hast du auch keine halben Sachen gemacht, wenn du direkt in
Primary-DN ist.
Ja, das war so bitter, dass dann auch tatsächlich jemand hingegangen ist, also da musste irgendwie tatsächlich jemand irgendwie von Hand im DE so ein Pfeil was fixen, so mit einem VI auf einem, weiß ich nicht, mehrere hundert Megabyte großen Ding.
Du bist schon länger im Business als wir.
Ja, ich weiß nicht, wie oft sowas nötig ist, aber …
Wie lange hat das gedauert, bis das wieder verfügbar war?
Ja, so ein paar Stunden hat das schon irgendwie Probleme gemacht.
Bis es aufgefallen ist?
Es hat ein paar Stunden gedauert.
Ich weiß nicht, ob es ein paar Stunden waren.
Ich weiß nicht genau, wie lange es gedauert hat.
Es war eine Zeit lang, bis es aufgefallen ist.
Und dann hat es nochmal ein paar Stunden gedauert,
bis es wieder gefixt war.
Deswegen konnte ich damals keine E-Mails mehr empfangen.
Deswegen ist damals meine Oma gestorben,
die dringend auf die E-Mail-Bestätigung
von ihrem Arzt gewartet hat.
Ja, ich glaube, damals war das alles noch so.
War es noch nicht so kritisch?
War noch nicht so, ja.
Weiß nicht.
Ja, das ist, meine Frau ist ja
Ärztin und bei der
geht es um Menschenleben, aber das ist ja nicht so schlimm,
weil bei uns geht es ja um Geld.
Geld oder Leben, Geld oder Leben.
Ja.
Ja, das ist doch schön, aber es ist schön, dass jeder von uns
auch so eine Geschichte hat, wo er einfach mal
Produktivdaten
entfernt oder gelöscht oder
verfügbar. Ja, ich glaube, das passiert auch allen irgendwann
früher oder später mal. Das ist halt,
ja. Das ist die
Feuertaufe. Oder auch,
Backups machen auf dem gleichen Server
wie die Datenbank und dann ist der
Server weg oder die Platte
davon im Arsch und dann ja, Backups leider
dann auch weg.
Ja, Backups muss man immer
Off-Site machen.
Hätte man auch eigentlich vorher drauf kommen können.
Da gibt es auch das Zwiebelmodell.
Du musst Schichten von Backups haben. Die erste Schicht
ist die ganz nahe und die
zweite Schicht ist im gleichen
Gebäude und die dritte Schicht ist im gleichen Land
und die vierte Schicht ist auf dem gleichen Planeten.
Und dann Schicht 5 Backups
haben wir leider noch nicht so viele.
Ja, könnte man aber eigentlich so ein bisschen rausschießen.
Wir haben ja genug Planeten, die verfügbar wären.
Also das ist jetzt ein kleiner Exkurs,
aber wir hatten ja gerade so.
Die Datenrate ist gut, aber die Latenz
ist sehr langsam.
Wie hieß das Ding? Habt ihr das verfolgt?
Spaceship One oder so? Keine Ahnung.
Haben sie jetzt diesen High-Altitude-Test gemacht?
Also wir sind diesem
anderen Planeten-Ding schon
hochgeschickt. Bitte?
Haben die sogar schon Leute damit ...
Ja, ja, nee, aber das ist diese ...
Ich verfolge das immer nur so am Rande.
Ist das von Jeff Bezos oder von Elon Musk?
Welche reiche Raketenfirma ...
Ja, ja, Elon Musk war das.
Und Virgin Galactic, der dritte reiche Mann,
der dritte verrückte Milliardär, hat doch auch eine Raketenfirma.
Hat der auch Raketenfirma inzwischen?
Ich dachte, der macht noch was mit dem Flugzeug.
Und er ist noch irgendwer, der ...
Wer ist der? Branson?
Ja, Richard Branson.
Ist ja hochgeflogen, ne? Man wollte unbedingt...
Ach nein, das Ding heißt irgendwie nicht
Spaceship One, sondern Starship... Ach Gott.
Naja, wie auch immer...
Genau, aber...
Der Namespace in dem Bereich wird jetzt auch schon knapp.
Ja, nee, aber das Ding ist wirklich riesig.
Also das ist halt nicht das...
Also das ist halt irgendwie auch eine neue Technik.
Das ist einmal ein neues Material, das ist irgendwie Edelstahl
statt Aluminium oder so.
Und eine neue Technik, das soll wiederverwendbar sein
und das segelt sozusagen irgendwie wieder runter.
Und es ist größer als die Saturn V, also es ist wirklich riesig.
Also das ist halt sozusagen der...
Ja, sowas habe ich bei Kerbel Space Program auch schon mal gebaut.
Da gibt es noch diesen tollen Talk.
Hat auch einwandfrei funktioniert.
Da gibt es noch ein paar tolle Talks, wie man Raumschiffe baut
und wie man Raumschiffe fliegt.
Die gab es auch mal zwischendurch.
In Kerbel oder in echt?
Ja, in echt, in echt, in echt.
In echt, okay.
Ja, es gibt ja auch ganz viele so Amateurfirmen,
die das versuchen und da machen.
Copenhagen Aerospace ist eine Amateurfirma, die, das ist nicht mal eine Firma, das ist ein Verein, der halt Raketen baut und ins Weltall schicken möchte.
Der US hat das, wie man das macht, das ist sehr interessant, also wenn der euch das interessiert.
Und weil wir gerade bei Planeten waren, das gibt ja irgendwie, wo man dann hinfliegen kann.
Es gibt ja so viele wie, oder mehr als Sandkörner wahrscheinlich auf der Erde und das ist natürlich schon gut, wenn die nicht so weit weg wären.
Und da muss man sich halt irgendwie überlegen, wie man da die Zeit überbrücken kann.
wir haben ja Computer dabei, vielleicht kann man da so ein bisschen
seine Langeweile vertreiben und Tetris spielen
oder so.
Ja, finde ich gut.
Ja, ja.
Das ist ja vielleicht so die Frage, wie man seine Zeit
kann er endlich mal seine Steam-Bibliothek
abarbeiten.
Noch so ein Wenn übrigens
oder ein Fail. Ich weiß nicht, Cyberpunk oder Johannes.
Ja, ach.
Das ist ja, die Nachrichten sind unterhaltsamer
als das Spiel, oder?
Ja, so schlimm.
Ist doch großartig.
Nein, also das Spiel ist sicherlich
sehr gut, wenn es läuft, aber man hört ja
nur von Leuten, bei denen es nicht funktioniert.
Tja, kann man nichts machen,
wenn man das auf einer alten Hand nicht spürt.
Ein Gentleman genießt und schweigt.
Na gut.
Wisst ihr, wo wir gerade dabei sind?
Das ist eine volle gute Überleitung, die mir gerade so einfällt.
Wisst ihr, was ein galaktischer Algorithmus ist?
Aha.
Das,
was total witzig ist,
es gibt ja für alle möglichen Sachen Algorithmen,
die in ihrer Laufzeit gemessen werden.
Und Laufzeitmessung ist ja immer mit Groß-O-Notation.
Und Groß-O-Notation heißt,
dass es asymptotisch sich so verhält,
wie die da gezeigte Funktion.
Also zum Beispiel O von n Quadrat
kann ganz große konstante Faktoren haben.
Aber wenn man das n genügend groß wählt,
dann ist es auf jeden Fall so wie n Quadrat.
Und es gibt eine Klasse von Algorithmen,
die heißt galaktische Algorithmen,
die haben sehr gute O-Notationen.
Also sie sind dann O von n log n
oder O von n hoch 1, noch was.
Also besser als alles andere.
Aber wenn man die konstanten Faktoren ausrechnet,
dann ist dieses n halt 10 hoch 40 oder sowas.
Das ist ein bisschen schlecht.
Die Problemgröße ist, ja genau, die Problemgröße ist halt, die konstanten Faktoren sind halt so dominant, dass es erst dann Sinn macht, diesen Algorithmus einzusetzen, wenn man einen Computer hat, der so groß ist wie eine Galaxis. Deshalb heißen die galaktische Algorithmen, sind prinzipiell die besten Lösungen für verschiedene Probleme, aber in der Praxis nicht ungeheuer gut.
Es gibt auch manche von denen, die haben dann so Konstanten drin, wo du halt quasi eine Look-Up-Table vorher ausrechnen musst und der ist halt auch schon 10 hoch 40 Byte groß oder irgendwie sowas ganz albernes.
Das erinnert mich sehr an Series auf Interstellar Trade, wo es halt um die säkulare Verbesserung der Terms of Trade geht und zwischen zwei verschiedenen Zivilisationen, die relativ lange brauchen, ein bisschen miteinander Handel treiben können. Das kommt so in gewisser Weise, das ist halt faktischer Unsinn, aber theoretisch ein super tolles Modell.
ja, theoretisch optimal, aber
in der Praxis leider nicht. Ja, auch ein galaktischer
Algorithmus. Nicht anzuwenden.
Das war übrigens ein Paper von Krugman,
falls ihr das, müssen wir auch mal verlinken in die Shownotes.
Ja, tust du auch mal in die Shownotes, ich lese das dann und
das finde ich gut.
Ich mag das gerne, so Paper lesen.
Auch dieses Virus-Paper habe ich auch mit
sehr viel Freude gelesen, das war auch sehr schön.
Ja, warum war das
eine Überleitung? Weil ich habe jetzt hier, ihr
könnt es jetzt hier sehen im Video, die
Hörer zu Hause können es nicht
sehen, weil es ist ja ein Podcast.
Dieses Buch hier, das ist ein schwarzes Buch mit Ringeinband.
Das ist mein Algorithmenbuch.
Und ich habe dieses Algorithmenbuch vor Jahren mal angefangen.
Und die Idee dahinter ist, dass immer wenn ich einen guten Algorithmus finde,
der nicht so bekannt ist, dass ich mir den aufschreibe.
Und wenn ich vor irgendeinem Problem stehe, was schwer zu lösen ist,
dann muss ich nur in mein Algorithmenbuch reinschauen
und finde da bestimmt irgendwas drin, was da hilft.
Jetzt mach mal auf und zeig mal, wie viele Seiten da schon
beschrieben sind. Ich mach jetzt erst mal
den Staub weg.
Das lag nämlich schon
eine ganze Weile
drin und ich mach's jetzt mal auf und es sind tatsächlich
eins, zwei, drei, vier,
fünf, sechs, sieben,
ja, siebeneinhalb Seiten beschrieben. Das hier ist
die achte Seite, die beschrieben ist.
Da steht nur eine Überschrift drauf.
Ja, ich würde das auf jeden Fall
als Win zählen. Aber nicht
die Zeit mit den Rezepten, mit den Kochrezeptern
dazu zählen. Klar, gewonnen.
Ja, Kochrezepte habe ich ein eigenes Buch für,
selbstverständlich. Könnte ich ja auch als
Sondereignung. Aber tatsächlich, in der Praxis
hat man oft irgendwie dickere
Kochrezeptbücher als Algorithmenbücher.
Ja, das ist mir auch schon aufgefallen.
Ja, leider.
Ich weiß auch nicht, es hilft auch nicht,
wenn man sich jetzt, man kann sich natürlich auch irgendwie so ein
Algorithmenbuch nehmen und dann einfach versuchen, mal
die ganzen Dinger durchzulesen,
zu lernen und dann halt anzuwenden,
wenn man irgendwie so Probleme hat. Aber irgendwie funktioniert
das nicht richtig. Also
was mir tatsächlich oft
passiert, oder was heißt so oft,
so oft hat man ja zum Glück nicht wirklich schwere Probleme,
aber, oder auf dem
Level nicht so schwer, aber was mir ganz
oft passiert ist, dass ich habe irgendein Problem,
das ich nicht in den Griff kriege. Und
naja, da mir die Algorithmenbücher
zu langweilig sind, die habe ich alle nicht gelesen, weiß ich halt
auch nicht, welchen Algorithmen man eigentlich nehmen sollte.
Sondern ich fange dann an,
selber nachzudenken.
Das ist halt auch nicht so optimal.
sehr langsame Algorithmen.
Oder findest dann diese ganzen Algorithmen wieder.
Ja, oder sag mal so,
es ist irgendwie, also ich,
teilweise
denke ich sie dann halt wieder,
irgendwie nach langem drüber nachdenken,
oder
mir fällt halt irgendwo
ein Algorithmus auf, der genau das Problem
löst, aber halt so in dem Kontext
des drüber nachdenkens irgendwie,
weil ich mir denke so, okay, das, was da Leute
machen, das klingt so ähnlich und dann irgendwann taucht
dann der Name von dem Algorithmus auf und dann,
Also es ist irgendwie ganz eigenartig.
Ich verstehe es nicht so genau.
Und das ist schon ein paar Mal passiert.
Ja, dafür hatte ich eigentlich dieses Buch hier.
Du musst mir einen davon vorstellen, Johannes,
der vielleicht sogar einen Namen hat.
Oder hast du einen selber, den du selber taufst?
Ja, nee, selber getauft nicht.
Also ich versuche Sachen hier zu merken,
die ich interessant finde, die Spannfilter.
Eine Sache, die man mal sagen kann, sind zum Beispiel Blumenfilters.
Wisst ihr, was ein Blumenfilter ist?
Nein.
Ja, voll geil.
Das ist eine sehr spezifische, probabilistische Datenstruktur,
die, wenn man sie braucht, absolut genial ist
und absolut undenkbar, dass das überhaupt funktionieren kann.
Aber wenn man sie nicht braucht, ist sie total nutzlos.
Das ist im Wesentlichen eine Set-Implementation, also eine Menge.
Und ich kann in diese Menge Dinge eintragen, also Elemente eintragen
und ich kann fragen, ist dieses Element in der Menge vorhanden?
Und wenn die Antwort Nein ist, dann ist die sicher.
Das heißt, wenn mein Bloom-Filter sagt,
das Element 7 ist nicht vorhanden,
dann bin ich mir sicher, dass das Element nicht vorhanden ist.
Wenn der Bloom-Filter aber sagt, ja, das Element ist vorhanden,
dann ist der nur mit einer gewissen Wahrscheinlichkeit vorhanden.
Und der Gag daran ist, dass man sehr wenige Bits braucht,
um diese Einträge zu speichern.
Also je nachdem, wie man das eingestellt hat,
kann die Speichermenge weniger als ein Bit pro Eintrag sein.
Deutlich weniger als ein Bit pro gespeichertem Element.
Und das ist was total Verrücktes,
weil das kann ja gar nicht gehen.
Warum ist das nützlich?
Das ist zum Beispiel dann nützlich,
wenn man so eine verteilte Situation hat,
dass du sagst, okay,
ich suche in meinen zehn Datenbank-Servern
nach dem Eintrag für diesen Schlüssel,
den ich jetzt gerade brauche
und ich frage einfach mal
meinen Bloom-Filter,
auf welchem Datenbank-Server dieser Eintrag
vorhanden ist. Und der sagt dann mit Wahrscheinlichkeit
in welcher Range?
Das kommt darauf an,
das liegt an der Menge
der Einträge, die du speicherst und wie groß dieser
Bloom-Filter ist, den du gemacht hast.
Musst du vorher wählen, musst du relativ schnell überlegen.
1 durch N.
Aber alle, nee, es ist eine
kompliziertere Formel.
Das wäre dann ein Detail, das steht gar nicht in meinem Buch drin. Das Wichtige ist, wenn dir ein Filter sagt, nein, der ist nicht drin, dann brauchst du diesen Datenbank-Server gar nicht fragen, weil da bist du sicher. Wenn der Bloom-Filter aber sagt, ja, der ist drin, dann ist er vielleicht da drin.
Ein anderes Beispiel, wofür ich es kürzlich überlegt habe anzuwenden, ist ein Passwort-Hersch. Es gibt ja eine Liste von unsicheren Passwörtern, also von Passwörtern, die bekannt sind. Im Wesentlichen Passwort-Wortlisten.
Das ist eine Regenbogentabelle.
Genau, dass du so eine Art Regenbogentabelle machst,
dass du einen Regenbogen-Bloomfilter machst,
dass du sagst, du nimmst dir die 250.000 Passwörter,
die am weitesten verbreitet sind
und speicherst davon die SHA-1-Hashes
und einen Bloomfilter dafür
mit einer Wahrscheinlichkeit von, ich glaube, 99%.
Ich hatte es mal ausgerechnet, es sind etwa 100 Kilobyte.
Das ist also durchaus was,
was du per JavaScript übertragen könntest,
wo du direkt auf den Client überprüfen
könntest, ob das Passwort, was er gerade
eingegeben hat, zu den 250.000
schlechtesten Passwörtern, die es
gibt, gehören könnte.
Du kannst ja sagen, dein Passwort ist aber doof.
Genau. Und wenn du
das sagst, dann weißt du, dass es vielleicht
so ist, vielleicht aber auch nicht.
Wenn der aber Nein sagt, dann weißt du, dass es auf jeden Fall
keins dieser Passwörter ist, die du gespeichert hast.
Also so eine
Abfrage, wo du ein sicheres Nein
brauchst, dafür sind die sehr gut
und dafür sind
die eine super Sache, weil sie halt
ungeheuer wenig Speicherplatz brauchen.
Viel, viel, viel weniger, als man sich das
als man sich das je vorstellen
könnte.
Jetzt ist es halt leider so, so eine Art Problem
braucht man halt nicht so häufig. Deshalb habe ich nur sieben
solcher Einträge drin. Einer davon
Blumenfilter, den schreibt ihr jetzt
euch alle in euer Algorithmenbuch direkt rein.
Wie schreibt man den denn? Den Blumenfilter mit
UH, mit OO? So wie Orlando.
Okay.
B-L-O-O-M
Filter, weil der nämlich
blüht, also der blüht auf, wenn du
die Abfragen machst.
Wenig Daten, die dir viele
Antworten geben.
Ja, super spannende Technik
habe ich noch nie irgendwo verwendet, auch da
hat es sich dann zerschlagen, weil wir doch
einfach eine ganz andere Sache gemacht haben
mit unseren Passwörtern. Aber gut.
War fast, also ein Algorithmus,
wenn man fast gebraucht hätte, ist ja schon mal etwas.
Ja, insofern, Win oder Fail, auch hier, ich werde mal, vielleicht werde ich es mir öfter wieder zu, vielleicht fallen mir mehr spannende Sachen auf, die man da reinschreiben könnte, exotische Sachen. Vielleicht mache ich auch einfach nächstes Mal dieses Buch nochmal auf und wir sprechen über furchtbar exotische Sachen.
Sukkulenten.
Ja, und noch exotischer.
Noch exotischer, na gut.
Viel exotischer.
Ja, wenn ich es so überlege, also ich meine, das hatte ich auch vielleicht schon mal erwähnt, also ich hatte das schon mal mit topologischer Sortierung, genau, da wusste ich auch nicht, was das ist, bis ich es dann auch nochmal entdecken musste.
Bis du es selber erfunden hast?
Ja, naja, das ist halt irgendwie nicht das Gleiche, wenn man das als erster macht oder halt irgendwie dann, wenn man es eigentlich schon mal wissen sollte. Also, aber ja, eine andere Geschichte, die mir mal…
Kryptomnese, wisst ihr, was Kryptomnese ist?
Ne?
Das ist, wenn man selber was erfindet, was es aber schon gibt.
Ja.
Weil man sich dann doch irgendwie halt doch dran erinnert, so unterbewusst.
Das kann auch gut sein, dass das so ist, ja.
Oder man war eigentlich einfach so genial und es hatte einfach jemand anders schon diese Idee, aber völlig unabhängig.
Das ist eine Annahme, die wäre mir sehr sympathisch.
Das Problem dabei ist, dass halt Verlagen dabei nie etwas ausfällt.
Ja, die trifft bei mir natürlich zu.
Was tatsächlich neu ist, spricht das so ein bisschen gegen die Hypothese.
tatsächlich, ich meine, der Feynman hat das ja auch irgendwie
ich weiß nicht,
in welchem Buch er das geschrieben hat, aber
er hat halt auch so irgendwie, naja,
er hat halt einfach immer irgendwie alle
Sachen, alle Probleme, die irgendwie in den Büchern,
die er so gelesen hat, drin standen,
irgendwie versucht zu lösen
und hat das halt einfach immer weiter gemacht
und irgendwann
hat er halt dann gemerkt,
sozusagen, oh, das war ein bisschen knifflig oder so,
hat sich dann aber auch gelöst und dann
hat er irgendwie weiter gelesen und dann schließt er so, ja, das sind ungelöste
Probleme, da gab es da noch keiner irgendwas.
So, oh, jetzt nicht mehr.
Aber ja.
Ja, das ist doch die Feinmann-Problemlösungsmethode.
Kennt ihr die?
Die hat drei Schritte.
Erster Schritt Problem hinschreiben.
Zweiter Schritt nachdenken.
Dritter Schritt Lösung hinschreiben.
Ja.
Und da gibt es dann auch die angewandte Feinmannsche Problemlösungsmethode.
Die heißt auch manchmal die studentische Problemlösungsmethode.
Hat auch drei Schritte.
Erster Schritt ist Problem hinschreiben.
zweiter Schritt ist ganz, ganz
arg drüber nachdenken, dritter Schritt ist
heulen.
Das passiert auch häufiger als man sich das
wünscht. Ja, ich zähle mir da,
zähle mich da eher zu dir.
Ja, aber tatsächlich, wenn ich so überlege, was habe ich denn noch
so an Dingen mal gebraucht, was so irgendwie, wo ich
nicht von Anfang an wusste, zum Beispiel auch
nett, genau, wir haben versucht,
das klingt eigentlich total banal,
es war es aber irgendwie nicht, ich weiß gar nicht mehr genau,
warum das eigentlich nicht so banal war, aber wenn man
jetzt so den Status von so einem Online-Shop hat,
dann kann
er ja irgendwie
zwar entweder
online sein oder offline, wenn man jetzt
so einen Meta-Shop hat quasi,
nach draußen hin. Also entweder man kann da
irgendwie Dinge kaufen oder draufklicken oder so
oder halt eben nicht.
Aber der Grund
dafür kann halt
aus ganz vielen unterschiedlichen Dingen
bestehen.
Also
Also, wie zum Beispiel, naja, ein Shop kann deswegen offline sein, weil er ist halt über irgendein Budget gelaufen und möchte halt nicht mehr Geld ausgeben, deswegen kriegt er keine Klicks mehr.
Oder er ist irgendwie, keine Ahnung, man ist mit jemandem in einer Rechtsstreitigkeit verwickelt und ist vor Gericht.
Oder, weiß ich nicht, die Daten sind irgendwie kaputt.
Also sagen wir mal so, das Problem ist, im Verlauf der Zeit entdeckt man halt auch immer mehr Möglichkeiten, warum man jetzt gerade nicht will, dass er online ist. Aber im Endeffekt muss er entweder online sein oder nicht. Aber es gibt halt dann so Zustände, aus denen will man nicht wieder zurück. Und manche Zustände, da will man aber wieder zurück. Also wenn der Monat dann anfängt, dann wechselt man wieder in den Zustand, wenn das Budget der Grund war, ah, okay, ist jetzt wieder online. Aber wenn dann irgendwie, keine Ahnung, eben vor Gericht, dann will man nicht wieder in den Online-Zustand zurückwechseln, sonst hat man ein zweites Gerichtsverfahren, das ist ja auch doof.
Und das wird komplizierter, als man sich das so vorstellt. Und wir hatten das halt zuerst in Code alles und das hat nicht gut funktioniert. Diesen Code zu pflegen war blöd, weil immer wieder sind so Dinge passiert dann, nachdem dieser Code geändert wurde, die man vorher nicht abgesehen hatte.
gerade dann immer so, weil dann passieren Dinge dann
am Monatswechsel oder bei irgendeiner Rechnungsstellung
oder so, die man vielleicht
dann nicht so, also auch Dinge, die halt einfach blöd
zu testen sind. Und dann hat
man immer so, okay, vor einem halben Monat hat jemand
was geändert, okay, und dann ist es bei der Rechnungsstellung
ganz auf furchtbare Art schiefgelaufen.
Und
da habe ich gesagt, okay, wir können das
eigentlich nicht so, dieser Code, der wurde
auch immer komplizierter, dass das geht so nicht.
Das überblickt auch keiner mehr.
Lass uns das doch irgendwie formalisieren
und irgendwie da so einen endlichen Automaten
oder so draus bauen. Das ist uns aber nie gelungen
oder nicht so richtig.
Als nicht-deterministischen Automaten
konnten wir uns irgendwie hinschreiben, aber als
deterministischen nicht.
Es kann auch nicht sein, dass das so schwierig ist.
Ja, und dann tatsächlich irgendwie...
Aber du kannst auch jeden
nicht-deterministischen Automaten als einen
deterministischen Automaten mit zwei hohen Zuständen modellieren.
Ja, du weißt es einfach so direkt.
Und zwar ist das nicht so sofort klar,
aber ja, auf die Lösung sind wir dann auch gekommen.
Du brauchst dann halt einfach einen Potenzmengen-Automaten
und dann geht es. Genau. Ja, genau.
Ja, aber das ist doch der große,
der große, das ist doch das
darunterliegende Problem für
P gleich NP.
Wenn du diese
Abbildung gibst, also jeden nicht deterministischen
endlichen
Automaten kannst du als deterministischen
endlichen Automaten mit 2 hoch N
Zuständen machen.
Und ja,
dass die Konsequenz
davon ist, ist die Frage P gleich
NP oder nicht. Ja, so weit
sind wir dann, das zu lösen, soweit sind wir dann
nicht gekommen. Da waren dann halt die acht Stunden
frei und dann mussten wir dann leider nach Hause gehen.
Du musst jetzt trotzdem nochmal einen ganz, ganz kleinen
Einführungstext dazu verfassen, was denn P mal NP
ist, für unsere Hörer, die da nicht ganz so tief in der
...
Ja, wir hatten ja vorhin schon
die kurz angerissenen
Algorithmenlaufzeiten mit Groß-O-Notationen
wissen. Ja, also wie
schnell ein Algorithmus sich entwickelt,
wenn man ihn mehrmals macht, oder?
Nee, genau, wie schnell sich
ein Algorithmus, wie schnell die
die Laufzeit sich entwickelt, wenn sich die Problemgröße
verändert. Also wenn ich zum Beispiel
irgendwelche
Berechnungen mache, dann ist die Problemgröße
üblicherweise die Größe der Zahl.
Also wenn ich jetzt zum Beispiel den
größten Primfaktor
finden möchte von einer Zahl, dann
kann ich das für die Zahl 10
noch sehr schnell machen.
Für die Zahl 100 wird es dann schon etwas langsamer
und für die Zahl 1000 wird es dann noch langsamer und für die
Zahl 10 hoch 20 wird es dann halt noch deutlich
langsamer.
Und die Frage ist, wie viel langsamer wird es denn, wenn die Zahl größer wird?
Und weil das von Mathematikern erfunden worden ist, sind alle endlichen Zahlen hier direkt egal.
Sondern es geht nur um, wie verhält sich das denn, wenn wir in Richtung unendlich gehen.
Das ist genau das Problem bei den galaktischen Algorithmen.
Den Mathematikern sind die absolut recht.
Dass man die nicht in der Praxis einsetzen
kann, ist uns Mathematikern
einfach egal, weil
da geht es nur um die Korrektheit.
Also im Wesentlichen ist es die Frage,
wenn ich die Problemgröße
verdoppele, wie verändert
sich dann meine Laufzeit?
Wenn ich jetzt zum Beispiel einen Algorithmus habe, der O
von N ist,
dann heißt es linear. Das heißt, wenn ich meine
Probleme verdoppele,
dann verdoppelt sich auch die Zeit, die ich
brauche, um das Ergebnis zu brechen.
Das ist gut. Das ist
leicht planbar. Das ist absehbar.
Ich weiß, ich habe jetzt einen Computer, der
kann Probleme lösen mit tausend
Stellen und nächstes Jahr habe ich einen, der ist
doppelt so schnell, kann ich ein Problem lösen,
das 2000 Stellen hat. Das ist
leicht zu planen.
Und schon ein bisschen schlechter ist O von n².
Das heißt,
wenn ich die Problemgröße verdoppele,
dann vervierfacht sich
die Laufzeit des Problems.
Und das ist
schon mal schlechter, weil dann heißt es halt,
dass ich mit einem doppelt so schnellen Computer
nicht doppelt so große Probleme lösen kann.
Also dann brauche ich einen viermal so schnellen Computer.
Brute Force von Spielgaben.
Genau.
Und entsprechend gibt es dann natürlich auch N hoch 3
und N hoch 4 und N hoch 5.
Und diese ganzen Dinge heißen alle Polynome.
Die sind alle polynomiell.
Weil die im Wesentlichen handhabbar sind.
Die wachsen nicht ungeheuer schnell.
Ein Polynom mit N hoch 100 wächst auch ungeheuer schnell.
Aber ist okay.
Das ist sozusagen das, was man als Mathematiker akzeptiert.
Polynomielles Wachstum.
Jetzt gibt es so eine Grenze oder so einen Schnitt, wo es Funktionen gibt, die wachsen schneller als jedes Polynom.
Und das sind die exponentiellen Funktionen, also 2 hoch n.
Das heißt, wenn ich mein Problem verdoppele, dann wächst die Laufzeit mehr, als jedes Polynom wachsen kann.
Also größer als N hoch 100, größer als N hoch 1000, sondern 2 hoch N und das hängt eben davon ab, wie groß N ist, wie schnell dieses Wachstum ist, weil das Wachstum nämlich auch immer schneller wird. Das ist eben eine der Kerneigenschaften der Exponentialfunktion, dass das Wachstum genauso schnell ansteigt wie die Funktion selbst.
Das in zwei Minuten in einem Podcast zu erzählen ist schwierig.
Das funktioniert aber gut.
Ihr müsst es jetzt einfach mal hinnehmen.
Ja, ja.
Ihr müsst es jetzt einfach mal hinnehmen.
Das ist schlechter als jedes Polynom.
Und jetzt ist es so, man hat Algorithmen gefunden für Probleme,
die sich in polynomierter Laufzeit lösen lassen.
Zum Beispiel Primfaktorberechnung.
Wobei das schon so eine Sache ist, die hart umstritten ist,
ob das jetzt deterministisch oder ob man das erlauben möchte oder nicht.
Es gibt viele Algorithmen, die sind in polynomialer Laufzeit machbar.
Sachen, die man berechnen kann.
Pfadberechnungen, Volltextsuche prinzipiell.
Solche Sachen sind alle in polynomialer Laufzeit berechenbar.
Es gibt aber auch eine Sorte Probleme,
für die hat man keinen polynomialen Algorithmus gefunden,
sondern eben nur solche, die in exponentieller Laufzeit funktionieren,
wo man im Wesentlichen alle Kombinationen ausprobieren muss.
Ein solches Problem ist, das ist sehr anschaulich, finde ich, das ist das Tetris-Problem oder auch das Knapsack-Problem, wo ich ein,
eine menge an zahlen gegeben habe eine menge an größen und ich habe eine
zielgröße gegeben und die frage ist kann ich aus denen mir gegebenen bausteinen
eine summe bilden die genau das ziel erreicht und die einzige möglichkeit die
es da gibt im wesentlichen ist einfach alle kombinationen auszuprobieren und
das sind halt nun mal zwei hochenden kombinationen weil ich kann eben in der
Summe jede Zahl entweder aufführen oder nicht
aufführen. Das heißt, ich habe
n Bits,
die ich
setzen kann. Ich muss die Menge aller
Teilmengen sozusagen ausprobieren.
Genau, die Menge aller Teilmengen, also
die Menge aller möglichen Summen, die ich bilden
kann mit den Zahlen, die mir gegeben sind.
Das entspricht genau der Menge aller Teilmengen und das
entspricht genau der Menge aller möglichen Zahlen, die
ich mit n Bits bilden kann und das sind genau
zwei hoch n. Und das ist der beste Algorithmus,
den es gibt. Also es gibt da so
probabilistische Sachen.
Und es gibt Techniken, wo du es eben auf n hoch 1,36 hoch n runterziehen kannst.
Und es ist nicht mehr 2 hoch n und das ist beeindruckend.
Und das ist unglaublich, aber es ist immer noch exponentiell.
Jetzt ist die Frage, gibt es für diese Probleme auch polynomielle Algorithmen?
Gibt es auch für diese Probleme Algorithmen, die in polynomieller Laufzeit das Ergebnis liefern?
Und die Antwort darauf ist unklar, die ist unbekannt.
Und das ist genau die Frage, ja, ist p gleich np?
Jetzt ist es so, da kommt noch dazu, diese Probleme, die man gefunden hat, die nennt man np, ja, nicht deterministisch-polynomial.
Das sind alle solche, die in exponentieller Laufzeit laufen.
Und lustigerweise sind die alle irgendwie äquivalent.
Also man kann die alle so ineinander umformen, dass alle das gleiche sind.
Das heißt, wenn ich einen Algorithmus
für eins von diesen Problemen finde,
der in polynomieller Laufzeit läuft,
dann habe ich automatisch auch für alle anderen
einen Algorithmus gefunden,
der auch in polynomieller Laufzeit läuft.
Und das ist das Verrückte daran.
Diese ganze Klasse an Problemen
sind alle irgendwie mehr oder weniger äquivalent.
Aber man weiß nicht,
einen einzigen in polynomieller Laufzeit zu lösen.
Und das ist die Frage.
Gibt es einen solchen Algorithmus?
Gibt es so einen polynomiellen Algorithmus für irgendeins dieser Probleme oder gibt es diesen Algorithmus nicht?
Das heißt, gibt es die zwei unterschiedlichen Mengen?
Es gibt Probleme, die polynomiell lösbar sind und Probleme, die nicht polynomiell lösbar sind.
Oder sind das alles die gleichen?
Sind es nur solche, gibt es nur solche, die polynomiell lösbar sind?
Und das ist die ungeklärte Frage, ist p gleich mp?
Wenn man dieses Problem löst, kriegt man direkt eine Million Dollar überwiesen, weil da gibt es einen Clay Price dafür,
Mathematik, ja, so ein
Mathematikpreis, der da ausgeschrieben ist,
ist mit einer Million Dollar dotiert
und ich glaube auch
eine Fields-Medaille und eine Turing-Medaille und alle
anderen Medaillen, die es so gibt in dem Feld, wären
relativ schnell sicher. Also ich meine, wenn es
irgendwie sowas
gäbe wie das wichtigste Problem in der Informatik,
dann wäre das auf jeden Fall ein Kandidat dafür oder
das wichtigste ungelöste Problem.
Ja, also das kann
ja, ja, ja, also diese
Komplexitätstheorie ist halt schon so, also ich meine, es gibt
dann noch, also ich glaube, also der Grundform,
was jetzt NP heißt, also
ist nicht deterministisch
polynomial, weil du kannst halt
mit einer nicht deterministischen
Turing-Maschine
in Polynomialzeit überprüfen,
also kannst du das halt bestimmen.
Und du kannst halt mit einer deterministischen Turing-Maschine
in Polynomialzeit überprüfen,
ob die Lösung richtig war oder nicht.
Sozusagen, das ist halt irgendwie
die Namensgeschichte. Aber es gibt
auch noch bösere, also es gibt jetzt
von den Komplexitätsklassen, es gibt halt
NPH, dann gibt es NP-vollständig und dann
gibt es auch noch, genau, X-Time
drumherum und P-Space und weißer Teil.
Ja, da gibt es noch ganz viele und diese ganzen Space-Klassen gibt es ja
auch alle noch, P-Space und N-Pace.
Da gibt es
eine ganz große Hierarchie davon, aber das sind die
einzigen, die so richtig bekannt sind.
Ja, und
es ist halt eben so,
jeder nicht deterministisch
polynomielle Turing-Maschine kannst du trivialerweise
in eine deterministische
Turing-Maschine überführen, die halt
aber zwei Hoch-N-Zustände hat.
die dann entsprechend
länger braucht.
Das heißt, die hat keine polynomiale Laufzeit mehr.
Und das ist die Krux
an der Sache.
Und jetzt vielleicht noch ganz, ich weiß nicht,
das ist bestimmt wieder nur ein Satz,
der Unterschied zwischen der nicht-deterministischen
und der deterministischen Turing-Maschine.
Oh, Jochen,
das darfst du mal erklären. Das ist schwer zu erklären.
Naja, sagen wir mal so,
das eine ist halt etwas, was wir bauen können,
das andere irgendwie nicht so richtig.
Also sozusagen,
Nein, es ist so, ich versuche es mal zu erklären.
Eine Turing-Maschine ist ja so ein Automat, der hat eine gewisse Anzahl Zustände und in jedem Zustand macht er bestimmte Dinge.
Und in einer deterministischen Turing-Maschine nimmst du immer einen Übergang.
Du gehst immer von einem Zustand in einen anderen Zustand.
Weil das ist, was wir bauen können, wie der Jochen gesagt hat.
Wenn der Zustand jetzt A ist und dann sind die Bedingungen gegeben,
dann gehe ich als nächstes in den Zustand B.
So, easy.
In einer nicht deterministischen Turing-Maschine legst du dich nicht fest.
Du sagst, wir gehen jetzt von dem Zustand A in alle möglichen anderen Zustände
und erst wenn wir zu einem Ergebnis kommen,
sage ich dir, in welchen Zustand ich wirklich gegangen bin.
Das heißt, da erklärt sich auch schon so ein bisschen,
warum es einfach ist, das
in einer exponentiellen Laufzeit zu machen,
weil du halt quasi in einem Zeitschritt
in alle anderen möglichen Zustände
übergehst, in die du übergehen kannst.
Und das ist halt
nicht zu bauen, das kannst du nicht bauen. Du sagst
sozusagen erst am Ende, welchen Weg
du durch die Zustände genommen hast.
Ja,
wobei, also ich meine, was ja
so ein bisschen in die Richtung geht, wäre dann ja,
also ist nicht das Gleiche, also Quantencomputer
sind keine nicht deterministe Turing-Maschine,
Aber so ein bisschen, was geht dann
in die Richtung? Und jetzt bewege ich mich natürlich
weit außerhalb von dem, wo ich mich normalerweise
beschäftige, aber es gibt halt eine Klasse
von Problemen, die halt
durch den Quantencomputer halt
in polynomial Zeit lösbar sind,
werden, die das halt normalerweise nicht sind.
Dazu gehört sowas wie
Graphenisometrie,
Primzahlfaktorisierung,
das ist ein wichtiges, also das ist halt
blöd, wenn das Quantencomputer
tatsächlich geben sollte. Das macht
RSA kaputt und
damit... Und für DSA gibt es, glaube ich,
auch so einen. Ja, also
das Shores-Algorithmus heißt das Ding
irgendwie, das macht auf dem Quantencomputer das Ding halt
in Polynominalzeit nieder
und das
ja, das ist auch
schon implementiert worden, also wenn es einen
mit genügend Qubits gibt, dann haben wir ein Problem.
Es sei denn, wir haben
auf Post-Quantum-Kyptografie gesetzt
oder so, was aber keiner macht, weil
das kann aber gar nicht passieren. Naja, mal sehen.
Ja, ist aber tatsächlich vor ein paar
Monaten, Schrägstrich Jahren, hat
die NIST auf einmal sehr und
auch die NSA auf einmal
sehr plötzlich ihre Empfehlungen
geändert, ohne zu begründen, warum.
Also es gibt schon so Hinweise, dass
man dringend auf Postquanten
Algorithmen wechseln sollte.
Ja, jedenfalls die
50 bis 100 Jahren, wissen wir das
dann auch, ob die mehr wussten als wir.
Also diese Komplexitätsklasse
wird glaube ich dann MPI genannt,
so MP Intermediate oder so und da sind halt so ein paar
Dinger drin. Leider, ja, es waren halt auch so ein paar
wichtige. Ja.
Aber tatsächlich ist es immer noch,
also, ach genau, und diese Klasse gibt es überhaupt nur dann,
wenn P ungleich ein P gilt.
Wenn P gleich ein P gilt, ist das natürlich sowieso Quatsch.
Aber, ja, dann ist es vorbei.
Aber ich meine so wirklich, ehrlich gesagt, so realistisch
kann man das nicht so richtig annehmen, weil
also, das hätte auch schon jemand
rausgekriegt, wenn das wirklich wäre, ne? Also,
ja. Ja, aber guck mal, wenn das so eine
krasse galaktische Sache ist, wo du halt
so Konstanten brauchst, die 10 hoch 40
groß sind und ein Lookup-Table,
der 10 hoch 100 Einträge
hat, dann
finden wir diesen Algorithmus
nicht, weil da sind unsere Gehirne einfach nicht groß genug
dafür.
Ja, kann schon sein.
Da wäre dann ein Beweis halt besser.
Und als Mathematiker muss ich sagen, ein Beweis ist immer besser.
Ja.
Es ist ja nicht nur so,
man kriegt ja die Million Dollar nicht, wenn man
diesen Algorithmus findet. Man kriegt ja die Million Dollar auch,
wenn du beweist, dass es diesen Algorithmus nicht gibt.
Also wenn du P ungleich NP beweisen kannst.
Nur ist bisher auch niemandem gelungen.
Nee, also es ist auch
nicht so, dass es nicht versucht worden wäre.
Es haben schon diverse Leute sich an dem Ding
die Zähne ausgelegt.
Ab und zu gucke ich da mal rein und denke so,
oh, interessanter Blogartikel. Und dann denke ich mir
noch so den ersten, zweiten Absatz, ah, ganz interessant.
Dann denke ich mir so, oh, das wird aber jetzt von einer
Notation schon ein bisschen wild. Und dann irgendwann
denke ich mir so... Und dann klickst du mal auf
Später lesen.
Dann fangen die Leute an, davon zu reden, so, ah ja, gut,
okay, mit normaler Mathematik haben wir jetzt hier, jetzt müssen wir
eine neue Mathematik irgendwie brauchen wir, um
dabei, okay, später lesen.
Das ist okay.
Keine Schlafflektüre ordnen.
Ja, als ich
habe ja Mathematik studiert und ich hatte da auch einmal
eine sehr, oh, das ist jetzt auch wieder eine
Überleitung zu Win und Fail.
Ich hatte eine sehr lange Unterhaltung mit jemandem,
dem es nicht
einleuchtend war, dass es nicht
Existenzbeweise gibt und dass
er mich unbedingt davon überzeugen wollte,
dass es die universelle
Mathematik gibt und dass es eine Lösung für jedes Problem
gibt und
dass ich das doch als Wissenschaftler auch untersuchen
müsste und
mein Bürogenosse, der
derweil echte Arbeit gemacht hat
und nicht nur mit Verrückten sich unterhalten hat,
hat immer mehr gekichert
im Hintergrund und
diese Diskussion hat sich etwas länger hingezogen
als notwendig.
Aber hat er dann logarithmische Komplexität oder nicht?
Es gibt auch, es gibt Probleme mit logarithmischer Komplexität, aber das, es gibt auch Probleme mit konstanter Komplexität, auch das ist sehr überraschend für viele Leute, dass zum Beispiel Dictionaries O von 1 sind bei den wichtigen Operationen.
Auch das überrascht Leute manchmal, wenn man das denen beibringt, dass man sagt, okay, das Einfügen in ein Dictionary dauert immer konstant lang, egal wie groß das Dictionary ist.
Und auch das Raussuchen eines Keys dauert immer gleich lang, egal wie groß das Dictionary ist, bis auf ein paar Unwägbarkeiten selbstverständlich und auch bis auf die Endlichkeit unserer endlichen Computer.
Aber im Wesentlichen dauert das immer gleich lange.
Und das ist ja schon was Überraschendes,
dass das Einfügen eines Wertes in den Dictionary
mit einem Schlüssel dauert im Wesentlichen genauso lange
wie das Einfügen in den Dictionary
mit einem Milliardenschlüssel oder zehn Milliardenschlüssel.
Ist schon eine überraschende Sache,
dass es sowas gibt
und dass es sowas trivial für uns zugänglich gibt.
Aber du wolltest auf die Historik hinaus,
in der du mit jemandem über die Nichtbeweisbarkeit ...
Ja, das ist im Wesentlichen die Story,
dass halt jemand versucht hat, mich davon zu überzeugen,
dass es die universelle Mathematik gibt.
Er hat dann auch irgendwann angefangen,
von seinen Erfahrungen in Indien zu sprechen,
wo er Einblick in das Universum bekommen hatte,
was mich natürlich in unserem 70er-Jahre-Betonbau
im Tübinger Institut für Mathematik relativ wenig beeindruckt hat.
ja, es gibt so Leute, die glauben,
das war irgendwie, keine Ahnung,
Ramanujan 2 oder so und du hast
ihn weggeschickt. Meine Güte.
Ja, das war neue Mathematik und ich habe sie halt
verschmäht.
Man muss ja auch dazu sagen,
Vermaas-Theorem
war ja 400 Jahre lang ungelöst
und das ist wesentlich leichter zu beschreiben
als P gleich NP.
Vielleicht ist da einfach noch nicht genügend
Zeit reingeflossen. Vielleicht ist die Mathematik,
die wir jetzt haben, einfach wirklich nicht ausreichend.
um diesen Nicht-Existenzbeweis
zu führen. Und irgendwann kommt so was
ganz Verrücktes um die Ecke, wie Andrew Wiles,
der ja
Sachen bewiesen hat, die überhaupt gar nichts damit
zu tun haben.
Der Insider war ein bisschen zu weit
weg für den Podcast, der musste jetzt wieder
herauskommen.
Ja, Andrew Wiles ist derjenige, der den
Satz von Fermat bewiesen hat.
Das Theorem von Fermat.
Aber er hat es nicht auf direktem Wege bewiesen, sondern er hat ein ganz anderes Theorem aus einem ganz anderen Bereich der Mathematik bewiesen, wo man allerdings vorher schon wusste, dass es äquivalent ist zum Theorem von Fermat oder dass es das Theorem von Fermat als Teilergebnis enthält, um es mal so zu sagen.
Der erste Eintrag auf Google sagt dazu, dass er durch seinen Beweis der Taniyama-Shimura-Vermutung berühmt wurde.
Genau richtig.
Ach so, ja, genau, okay.
Ja, und die enthält eben Vermaas letztes Theorem als Teilmenge, mehr oder weniger. Also er hat mehr bewiesen als Vermaas letztes Theorem, aber dafür ist er bekannt. Dafür gibt es auch einen Film über ihn und wird uns allen lange im Gedächtnis bleiben dafür.
Und genauso wird es halt auch sein bei p gleich np, dass sich die Mathematik irgendwo hinmeandert und irgendwann sagt einer halt, oh, Moment mal, wenn ich da richtig rum drauf schaue, dann sieht man, dass es einen solchen Algorithmus nicht geben kann und zack, in 300 Jahren halt.
Tja.
Da sind wir vielleicht nicht mehr am Leben.
Tja.
Je nachdem, wann wir geimpft werden. War das nicht ein schöner Bogen?
Ja, jetzt haben wir ganz viel über Fails gesprochen, gibt es denn auch irgendwas, wo ihr so richtig sagen würdet, das hat funktioniert bei euch in Projekten, weil das ist ja was, was schöner ist und was leider nicht so häufig.
Also oft, das hatte ich mir auch schon aufgeschrieben,
also Dicts, so Hashes, diese Art Datenstruktur ist etwas,
was man einfach ständig braucht.
Und das ist total super.
Also wenn man nur Dicts hat, nur Listen und nur Skalare,
da kommt man damit schon sehr, sehr weit.
Also wenn man das richtig, also wenn man das wirklich verstanden hat
und richtig verwendet, dann ist man da schon,
also dann ist man schon auf einem echt guten Weg,
weil das meiste kriegst du damit halt schon klein.
Und das summiert auch ganz viele so Techniken,
die man sich im Informatikstudium ganz schwer erarbeiten muss
mit Bäumen und mit Balancieren und mit Binärsuche und so Zeugs.
Das geht da alles weg, weil das einfach jetzt schon drin ist, fertig.
Ja, und das ist halt total nett.
Also das würde ich sagen, ist ein großer Win.
Ich meine, bei diversen unterschiedlichen Programmiersprachen
ist das halt sozusagen das Basiskonzept, das eingebaut zu haben
und dann damit schnell zum Ziel zu kommen.
Das ist bei PHP so, das ist bei
Perl so, Ruby und Rails
eben Python. Ich bin dann halt bei Python
hängen geblieben. Ich würde sagen,
Ruby und Rails ist auch eine gültige
Programmiersprachenlösung, wo man hängenbleiben kann.
Das ist auch ein Win.
Vielleicht auch Perl 6,
das habe ich mir dann nicht mehr angeguckt, keine Ahnung.
Gibt es das schon? Ist das schon raus?
Das ist schon raus, tatsächlich, ja.
Das ist ja verrückt.
Aber genau,
also, ja,
das ist toll, dass es den allen
gemeinsam und das funktioniert wirklich gut.
Hast du auch konkrete Kriegsgeschichten,
Jörn? Also ich meine, wir haben alle konkrete Geschichten, wie wir
schon mal eine Datenbank gelöscht haben und wir
schon mal... Ein Win, ja,
so Wins. So ein konkreter Win?
Ja, doch, vielleicht auch
Python tatsächlich.
Ein wenig beachtetes
Modul
aus einem total uninteressanten Spiralarm
der Standardbibliothek,
über das ich mal gestolpert bin,
hat irgendwie unerwartete Vorteile
gehabt. Und zwar
das Array-Modul. Ich weiß nicht, ob euch das
was sagt.
Da habe ich tatsächlich heute drüber
nachgedacht, ob das überhaupt was ist, was man
je braucht. Ja,
denkt man eigentlich, so braucht man nicht unbedingt. Aber
tatsächlich, ich habe es mal
verwendet und das war ein ziemlicher,
oder ich fand, das war ein Win.
Und zwar
hatte ich das Problem, irgendwie,
ich mache ja schon lange auch so Text-
Klassifikationsgeschichten und so Maschinen-Learning
mit Texten. Ganz am Anfang
gab es da noch keine Bibliotheken, da haben wir das alles selber
gemacht und irgendwie unsere
früher, ja, irgendwie
ohne Spur, bergauf
durch den Schnee, genau.
Aber inzwischen gibt es da ja
Cycled Learn und
das habe ich auch
verwendet, das habe ich vor allen Dingen so Kegel-Competitions
verwendet, also das
so Maschinen-Learning-Wettbewerbs-Dinger
und
aber ich hatte halt nicht so viel Hauptspeicher.
Und das Ding ist relativ verschwenderisch mit dem Hauptspeicher umgegangen, weil du zerlegst halt Texte. Was du eigentlich haben möchtest, sind Vektoren, die so einen Text beschreiben. Und zwar, wo du halt pro Wort eine Dimension hast und dann in der Dimension hast du halt ein Gewicht für dieses Wort stehen.
das angibt, wie wichtig dieses Wort
im Text ist und
dafür musst du die ganzen Worte zählen und so
und Scikit-Learn
hat diese
Zählgeschichten, also da heißt
das Ding halt Count Vectorizer oder Vectorizer
allgemein für diesen Text
irgendwie in so einen
Vektor verwandeln,
hat da erst Listen draus gemacht
und dann halt auch die ganzen Counts
und so in Listen gehalten
und Listen sind halt nicht so richtig
Was ja prinzipiell nicht so blöd ist.
prinzipiell nicht so blöd. Funktioniert das auch alles praktisch.
Du musst ja halt nicht vorher überlegen, okay, wie lang ist denn jetzt
mein Text? Sondern du kannst halt einfach,
weil du fügst halt einfach in Listen ein, das geht.
Der Nachteil dabei ist halt
auch eine einfache Zahl
wie so ein Count braucht halt irgendwie
irgendwas um die, also ich weiß nicht,
irgendwas 20 Byte,
etwas über 20 Byte.
Integer sind groß.
Und das ist halt...
Listen haben auch nochmal Overhead.
Die haben nochmal ein bisschen Overhead, also
es ist deutlich mehr, als du brauchen würdest,
wenn du jetzt einfach nur den nackten Zahlenwert
als 4-Byte-Integer oder so halt hättest.
So 32-Bit oder 64-Bit, wie auch immer.
Ja, und bei mir ist der Hauptspeicher
tatsächlich bei so einer Competition ausgegangen.
Und ich dachte mir so,
ah, okay, kriege ich das irgendwie gedrückt?
Und da bin ich dann halt
über dieses Array-Modul gestolpert.
Und ja, das hat tatsächlich funktioniert.
Und zwar kann man ja einfach statt einer Liste so ein Array nehmen
und dann braucht es tatsächlich nur noch so viel Speicher,
wie halt das Integer, was man da speichert,
halt einen Platz braucht.
Und das ließ sich relativ problemlos austauschen
und das hat halt irgendwie so den Speicherbedarf gedrittelt ungefähr.
Und genau, ich habe damals halt,
ich habe das, dass das geht,
habe ich irgendwann halt in dieser
Competition, in dieser, glaube ich,
Predict Close Open Questions in
Stack Overflow Competition, habe ich das
irgendwie gesehen und dann habe ich irgendwann mal
so ein Pull-Request rausgemacht, das war dann aber
ein bisschen später, irgendwann 2015 oder so.
Das ist auch tatsächlich durchgegangen und seitdem
sind,
braucht halt TF-EDF-Vectorizer
und so, braucht halt nur noch ein Drittel Hauptspeicher.
Und man kann halt damit größere, ja.
Und das ist auch, das ist halt
vor allen Dingen deswegen einfach so durchgegangen,
weil man eben nichts installieren
musste oder nichts Kompliziertes machen musste,
sondern man konnte einfach das stinknormale
Array-Modul
aus der Standardbibliothek nehmen.
Das ist einfach ein anderer Konstruktor, den du da aufgerufen hast.
Ja, also der Code hat
sich dann auch nochmal ein paar Schritte geändert, aber
ja.
Ja, aber das ist natürlich echt cool.
Auch was echt für die Welt getan
sozusagen.
Ja gut, ich weiß nicht, ob das...
Für den kleinen Teil der Welt, aber...
Ja, es ist ein witziges, aber...
Das kann man durchaus als Win.
Das ist echt cool.
Um das noch kurz nachzuführen,
das Array-Modul ist einfach sozusagen
gepackte Listen, also quasi
C-Structures
oder C-Arrays als
Python-Bibliothek und sorgen
halt dafür, dass man nicht genau diese Listen-
Operationen hat, aber dafür hat man
halt auch nicht den Listen-Overhead.
Ja, es muss halt alles vom gleichen
Typ sein, was da drin ist.
Und die Größe muss bekannt sein.
Ja, genau. Das heißt, man muss sich selber drum kümmern,
dass man das irgendwie, also die vergrößern
sich irgendwie selber, wobei man da muss aufpassen,
dass die verdoppelt, glaube ich, den Platz
irgendwie dann halt, wenn man das einfach so naiv macht.
Man kann das aber auch selber einstellen und ich glaube,
was da unten drunter liegt, also das,
was die Leute dann immer, sie nennen das irgendwie dann
Type Memory View oder so, ist halt
einfach sozusagen ein Stück
Hauptspeicher mit einem Typ dran.
Ja. Ja, das ist witzig.
Ich habe tatsächlich auch eine Geschichte,
die ist aber sozusagen das Gegenteil von
deiner Geschichte. Da musst du aber ganz kurz warten, weil
da, glaube ich, ganz super passt zu dieser Frage,
mit den Listen, die Frage mit den Dicks,
weil wir hatten ja kurz darüber gesprochen,
dass Dicks so schnell gehen und
wenn Listen jetzt so cool sind über Array,
wie gehen denn Dicks so schnell? Vielleicht
da nochmal kurz, also das wird ja irgendwie implementiert,
aber wie funktioniert denn das?
Es gibt da ein Table
über dieses Dickt und da guckt man einfach drin
oder wie macht man das?
Ja, da gibt es verschiedene
Techniken, aber im Wesentlichen ist so ein
Dictionary ja ein sogenannter
Hashtable.
Das gibt es eigentlich
in den allermeisten Programmiersprachen, die heißen
immer ein kleines bisschen anders. In Java zum Beispiel
heißen sie HashMap.
Der Trick ist sozusagen,
dass man eine Liste,
also man sieht,
das Dictionary ist ja
eine Zuordnung von einem
Key-Wert zu einem Value-Wert.
Also unter einem bestimmten Key
habe ich irgendeinen Value eingespeichert.
So das klassische Modell ist das Telefonbuch.
Zum Key Dominic ist deine Telefonnummer
eingespeichert und zum Key Jochen
ist Jochens Telefonnummer eingespeichert
und zum Key Johannes ist meine Telefonnummer
eingespeichert.
Das ist so das klassische Dictionary,
ein Wörterbuch.
Zu einem Wort auf Deutsch
ist dazu gespeichert das Wort auf
Englisch.
Jeden
Key-Eintrag kannst du halt nur
einmal geben und das Value kann dann
irgendwas sein. Das kann eine Liste von Wörtern sein
oder kann irgendwas sein. Das spielt erstmal keine
Rolle.
Jetzt ist ja schon mal, diese Datenstruktur an sich
ist ja schon mal schwierig zu visualisieren.
Wie würde man sowas speichern?
Die einfachste Liste, sowas zu speichern
ist, dass man sich sozusagen
diese Paare speichert, einfach als Abfolge
von Paaren.
Das erste, was ich mir gemerkt habe,
Dominik ist deine Telefonnummer, also schreibe ich mir
auf in meine Liste oben
Dominik, Telefonnummer von Dominik
1. Und dann
kommt der Jochen und dann schreibe ich mir Jochens
Namen in meine Liste und schreibe
mir halt in meine Liste rein, Jochen,
17. Telefonnummer von Jochen ist 17.
Mist, habe ich jetzt deine Telefonnummer
verraten?
Und dann merke ich mir meine Telefonnummer
auch noch. Das heißt, ich schreibe mir in meine Liste,
in meine Abfolge von Werten einfach rein,
Johannes, 42. Das ist meine Telefonnummer.
Und das ist gut, weil das bedeutet,
wenn ich eine neue Telefonnummer eintragen möchte,
dann ist das ganz einfach. Ich muss nur mir dieses
Paar merken und das als Ende meiner Liste schreiben.
Und das ist leicht.
Das Herausfinden eines Eintrags ist da aber langsam, weil ich muss von oben nach unten durchgehen.
Wenn ich jetzt nach dem Eintrag für Johannes suche, muss ich mir den ersten Eintrag anschauen und sehen,
ist das die Telefonnummer, ist das der Name, den ich suche?
Da steht Dominik, also es ist nicht der Name.
Dann schaue ich mir den zweiten Eintrag an und sage, ist das der Eintrag, den ich suche?
Und da steht Jochen und es ist also nicht der Eintrag, den ich suche.
Der dritte Eintrag, den ich suche, ist der Eintrag, wo Johannes mit meiner Telefonnummer dabei steht.
Das heißt, in diesem Fall, wenn ich das so implementieren würde, diese Datenstruktur, dann wäre die Insertion, also das Einfügen eines Eintrags O von 1, weil es immer gleich lang dauert, einen hinten hinschreiben.
Aber das Heraussuchen wäre O von N und das ist schlecht, weil üblicherweise möchte man mindestens genauso oft raussuchen, wie man reinschreibt.
Normalerweise sucht man viel mehr raus, als man reinschreibt.
Das heißt, wir wollen, dass auch das
heraussuchen O von 1 ist oder
zumindest schneller ist.
Und jetzt wird was gehasht.
Genau, und jetzt
kommt die Magie dazu, die magische
Zutat sind Hashes.
Und zwar,
also man kennt Hashes ja üblicherweise
aus so einem Bereich, dass man sagt, das ist eine Checksumme
oder eine Prüfsumme oder eine
Signatur von irgendwas, ja, wo man
so einen Char 1 Hash dann macht und dann kommt
eben raus, die Datei hat die Prüfsumme
A 17 12 21
1916, also irgendwas, ja.
Das ist nicht die Art Hash, die man hier verwendet,
sondern die Art Hash, die man hier verwendet,
ist eine ganz andere Art von Hash,
die nicht so eine ganz lange Prüfsumme gibt,
sondern die gibt einen Index heraus.
Das ist eine spezielle Sorte Hash,
die man da verwenden muss,
der schnell sein muss und kleine Ergebnisse hat
und in konstanter Laufzeit und so weiter.
Also ganz viele Sachen, die man da reintut.
Ich weiß auch gar nicht genau,
was da für ein Hash verwendet wird.
So, das heißt, dieses Dictionary, was wir vorher als Liste von Schlüsselwertpaaren hatten, wird jetzt zu einer Liste, die erstmal leer ist.
Ich sage mir, okay, ich gehe davon aus, dass ich im Laufe meines Lebens 16 Einträge in mein Telefonbuch speichern möchte.
Jetzt kommt der erste Eintrag und der erste Eintrag heißt Dominik,1.
Das heißt, der Schlüssel heißt Dominik und der Wert dazu heißt 1.
Jetzt nehme ich den Schlüssel und hashe diesen Schlüssel und kriege jetzt als Hash eine Zahl von 0 bis 16 raus, also eine Zahl in meinem Adressbereich.
Jetzt gucke ich in meine bislang leere Liste und sage, da steht noch nichts.
Okay, perfekt. Also schreibe ich da den Dominik rein, also den Wert von Dominik.
Das heißt, in meiner Liste steht jetzt ganz viel nichts und an einer Stelle steht deine Telefonnummer.
Jetzt kommt der zweite Wert. Der zweite Wert für Jochen. Ich nehme wieder meinen Hash von Jochen und da steht jetzt halt 10. Da kommt jetzt 10 raus. Das heißt, in meine Liste schreibe ich jetzt an der Stelle 10 die Telefonnummer von Jochen rein. Bei Dominik sagen wir, kommt 12 raus.
Dann schreibe ich Johannes. Ich nehme den Hash von Johannes. Da kommt 2 raus. Also schreibe ich in meine Liste an der Stelle 2 die Telefonnummer von Johannes rein.
Wie man sieht, ist das Einfügen in diese Datenstruktur immer noch O von 1, weil es spielt keine Rolle, wie viele Einträge da drin sind. Das dauert immer gleich lang. Ich muss diesen Hash ausrechnen und dann an die Stelle, die mir der Hash gegeben hat, die Zahl reinschreiben. Mindere Details, wie zum Beispiel, dass die Liste voll wird oder dass der Hashtag voll wird oder dass es Kollisionen gibt, die ignorieren wir jetzt. Das sind Implementierungsdetails. Die bleiben dem geneigten Leser als üblich.
Und du musst ja einmal kurz den Space verdoppeln,
den man braucht oder sowas.
Genau, musst du entweder den Space verdoppeln
oder musst du eine Liste von Werten anlegen
oder musst du irgendeine Kollisionsstrategie überlegen.
Und auch eine Größenstrategie musst du dir auch überlegen.
Okay, einfügen ist immer noch O von 1.
Heraussuchen ist jetzt auch eine andere Operation.
Ich sage, ich möchte die Telefonnummer von Jochen wissen.
Ich nehme jetzt also den Hash von dem Namen Jochen
und kriege raus, die Telefonnummer von Jochen
steht in meiner Liste anstelle 10.
Das Herrschen dieses Wertes, also die Adresse sozusagen berechnen, wo ich die Telefonnummer gespeichert habe, das ist immer gleich, das dauert immer gleich lang. Und jetzt in diese Liste an der Stelle 10 reingucken, dauert auch immer gleich lang. Und da steht genau die Telefonnummer vom Jochen drin, das heißt, auch das Heraussuchen dauert jetzt O von 1.
Und die Magie ist eigentlich, dass man nicht den Schlüssel als Wert da drin hält, sondern man greift über eine Indirektion zu und diese Indirektion ist ein Hash und dieser Hash vermischt die Sachen auf eine einheitliche Art und Weise, sodass man eine einheitliche Füllung erreicht.
Und das garantiert uns dann eben diese, ja, sogenannte amortisierte Laufzeit von ORF1 im Schnitt über lange Zeit, dauert jeder Zugriff auf den Dickschneider gleich lang.
Ja, das Einzige, was man halt da tatsächlich machen muss, ist, wenn man ganz, ganz viele Einträge hat, mehr Speicher für dieses Dick alloziieren oder so.
Genau, also es gibt oft so Situationen, wo es einen Trade-off gibt zwischen Rechenzeit und Speicherplatz und auch hier ist es so, wir haben halt ein kleines bisschen Overhead, was Speicherplatz angeht, weil wir immer ein bisschen leere Zellen haben müssen, wobei auch das in den neuen Python-Versionen nicht mehr stimmt.
Da haben sie eine bessere Implementierung, die keinen großen Overhead haben drin, was noch beeindruckender ist, was wir uns auch gerne mal genauer anschauen können, wenn du das mal vorbereitest, Jochen.
Ja, sich das mal unter Detail anzugucken, wäre nicht so uninteressant. Ich hatte jetzt noch im Hinterkopf, dass irgendwie die Dict-Implementation in Python, dass das irgendwie so try-basiert ist oder so, aber es kann sein, dass das auch wirtschaftlich veraltet ist.
Zwischenschritte. Die machen noch so,
das ist, glaube ich, auch veraltet, diese neue
Implementierung ist, glaube ich, pur Array-basiert,
soweit ich das weiß, aber ich weiß es nicht genau.
Das sind
auch so Implementierungsdetails, weil es
halt schneller ist.
Weil du noch ein paar Nanosekunden
rausholen kannst und weil das eindeutig zur
Hot-Section gehört von Python, weil das der Code ist,
der Python
laufen lässt. Dictionaries
sind im Wesentlichen
der Kleber, der Python zu Python macht.
Auch intern,
jedes Mal, wenn ich ein Objekt verwende,
in anderen Programmiersprachen werden die dann irgendwie
kompiliert oder zu Structs gemacht oder zu sonst
irgendwas gemacht. In Python ist das halt
ein Dictionary mit den Namen von dem,
von dieser Instanz
und fertig. Und
auch die lokalen Variablen, die liegen alle in dem Dictionary.
Da gibt es keine Speichermap
und da gibt es keine festzugewiesene, da gibt es kein
Stack und nix, sondern, ein Stack gibt es auch noch,
aber die lokalen Variablen in einem Frame liegen
immer in einem Dictionary drin.
Deshalb
ist die tatsächliche Implementierung
hier sehr detailliert und sehr ausgefeilt,
weil es sich eben lohnt,
hier jede Nanosekunde rauszuholen.
Aber
die Magie, die drinsteckt,
oder der Kerngedanke ist eigentlich,
man hasht die Schlüssel und
greift dann auf diese mehr oder weniger
zufällig gewählte Adresse zu.
Ja, also das ist
die Python-Dict-Implementation
ist halt auch so eine der schnellsten
Hash-Implementationen,
die es überhaupt gibt.
ja, eben weil sie halt auch so wichtig ist.
Und das ist
auch manchmal dann überraschend, so für, wenn man
in anderen Sprachen unterwegs ist oder
mit Leuten sich unterhält, die in anderen, so ich hatte das
auch schon mal, ich wollte das mal irgendwie,
ich habe mit einem Python-Dict angefangen
bei irgendeiner Geschichte, ich weiß jetzt gar nicht mehr genau, was
es war, ich wollte irgendwelche Dinge unique machen, irgendwie
riesige Sachen und
das war irgendwie zu langsam und dann
dachte ich so, okay, das muss ich wohl
dann doch mal irgendwie in C oder C++ oder so
neu machen und habe das dann in
C++ versucht
und habe dann auch angefangen,
weil ich dachte, ich mache es jetzt erstmal so wie in Python
und dann gucke ich mal,
wo ich optimieren kann. Und habe dann
halt irgendwie
HashMap, außer sozusagen
naja, C++ gibt es nicht, gab es oder
vielleicht gibt es heute, aber gab es damals nicht so richtig
eine Standard-Typerie. Boost heißt die. Boost gab es, genau.
Und habe das halt so probiert,
habe das gemanagt, habe irgendwas falsch
gemacht. Irgendwie kann ja nicht sein.
War deutlich langsamer als die beiden
Varianten. Und habe dann
also auf Stack Overflow so naiv nachgefragt,
so, irgendwas mache ich hier falsch,
was ist denn da los? Und dann waren
die Antworten drauf aber eher nicht so
ermutigend weiterzumachen in die Richtung,
sondern dann hieß es so, ja, ach so, ja,
ein Boost, ja, unsere Hashmap-Implementation,
ja, das ist eigentlich noch gar keine richtige Hash,
das ist nicht so richtig Hash, das ist eher so
ein, eher so, wir holen die Dinger
so per binäre Suche daraus und dann,
das ist klar, deswegen dauert es dann natürlich schon ein bisschen länger.
So, okay, Moment,
aber das ist doch eine Datenstruktur, die man dauernd verwendet,
ja, wie, was?
Und ja, das geht auch schneller.
Da musst du nur, ja, da musst du nur
dann irgendwie, keine Ahnung, hier von
SGI gibt's da
irgendwie Header, die du irgendwie reinnehmen kannst,
und dann musst du nur sagen, dass du das als Hash-Funktion, und dann geht's schneller.
Das ist so, ähm,
na, vielleicht auch nicht. Mal gucken, vielleicht kann man das
auch irgendwie anders machen.
Python nimmt man also.
Aber das ist, äh, ja,
da ist Python wirklich stark
also das ist
ja
ja aber es ist halt auch einfach wichtig
es gibt so Späße
wo man jede Programmiersprache beschreibt
als eine Kerneigenschaft
eine so eine Liste
die ich mal gesehen habe war eben
jede Programmiersprache beschrieben als
what if everything was an
und da war zum Beispiel c
what if everything is a pointer
und Java ist
what if everything is a pattern
und
Python war halt what if everything
is a dictionary und das ist schon so.
Es ist schon so. Es ist einfach alles
ein Dictionary und wenn man irgendein Problem mit Dictionaries
lösen kann, dann ist das
sehr gut.
Um aber nochmal
zurückzukommen, auch das Dictionary
ist eine schöne Überleitung zu meinem Win,
den ich mal hatte,
in einem Projekt, war tatsächlich
das erste richtig große
kommerzielle Projekt, wo ich mitgewirkt
habe, wo ich alleine
mitgewirkt habe, um es mal so zu sagen,
war auch
Webshop und wir mussten da
die Produkte aus einer API holen und wir hatten
sehr genaue Vorgaben.
Es waren Modeprodukte.
Wir hatten
sehr genaue Vorgaben, wie lange wir sozusagen
die Daten, die wir haben,
cachen dürfen, wie alt unsere Daten
sein dürfen, weil da gibt es ja Probleme mit
Verfügbarkeit und
Preisen, die sich dann auch ändern. Also wir mussten
einfach einhalten, dass wir
maximal fünf Minuten alte Daten
anzeigen dürften,
was Preise und Verfügbarkeit angeht.
Und Produkteigenschaften auch, weil die dann oft
dann halt im Betrieb
eine Charge ersetzt haben durch eine andere.
Also wenn halt die
Hose von dem einen Hersteller durch war
und die Hose vom anderen Hersteller noch nicht
durch war, dann hat sich halt der Preis verändert,
weil das Material raus war sicher.
Wir durften einfach nichts anzeigen, was älter ist als fünf Minuten.
Und wir hatten aber das Problem, dass unsere Seite super langsam war,
weil wir für jede Produktseite, für jede unserer Seiten,
mussten wir ungefähr 20 Produkte laden.
Das heißt, wir mussten 20 API-Aufrufe machen.
Und das war damals, als es noch kein Async gab.
Das heißt, wir mussten die mehr oder weniger seriell machen.
Und wir hatten halt furchtbar schlechte Zeiten.
Also die API, die wir benutzt haben, war super schnell.
Die hat nur so 20 Millisekunden gebraucht pro Aufruf.
Aber wenn du 20 von den Aufrufen machst,
dann hast du halt direkt 400 Millisekunden verbrannt
für nix.
Hast ja noch nix selber gemacht.
Und
wir haben
versucht, die Sachen in den Cache zu legen und das
hat auch nicht so richtig funktioniert. Und irgendwann ist uns
aufgefallen, dass
wir ja tatsächlich genügend Hauptspeicher haben.
Wir haben genügend Hauptspeicher,
um alle Produkte zu
speichern, die wir je
anzeigen.
Also haben wir das
einfach gemacht. Wir haben einfach alle
Produktdaten abgerufen und die in den Cache gelegt
und weil die nicht
länger als fünf Minuten da sein
dürften, hatten die eine Expiry von fünf Minuten
und wir haben einfach Background-Jobs laufen
lassen, die alle fünf Minuten jedes Produkt
refreshed haben.
Das heißt, wir hatten einfach
vorher hatten wir
eben diese ganzen Aufrufe an die
API, die wir ersetzt haben
durch Unmengen an unnötigen
Aufrufen, die
aber dann eben im Ernstfall dafür gesorgt haben,
dass die Daten, die wir tatsächlich gebraucht haben, alle
schon warm waren, weil
wir, weil halt einer von den
Entwicklern und es war tatsächlich in dem Fall nicht ich.
Es ist also keine Win-Geschichte
für mich, es ist nur eine Win-Geschichte für unser Projekt
und für den anderen Entwickler.
Weil der halt gesagt hat, okay, wir können ja mal
ausrechnen, wie viel Speicher wir verbrauchen. Wir probieren einfach mal
aus, alle Produkte zu laden, die wir je haben.
Und die haben in den Cache
gepasst, in unseren Memcached.
Und dann ist es natürlich
schön schnell, weil dann so ein Memcached-Aufruf,
der ist ja,
der dauert nicht so lang.
Das heißt, wir konnten da tatsächlich
unsere Response-Zeit um ein Vielfaches
verbessern, einfach dadurch, dass wir
die ganze Zeit
den Cache-Refresh haben.
Egal, ob wir Traffic hatten oder nicht,
es war einfach, dieser Cronjob, der das
gemacht hat, lief einfach die ganze Zeit.
Alle fünf Minuten hat er alle Produkte einmal
durchgepingt.
Ja, das
erinnert mich, das ist auch etwas,
man unterschätzt oft, wie viel
Hauptspeicher man tatsächlich zur Verfügung hat
und was man da mit all den tollen Dingen alles so tun kann.
Und dass man oft einfach Sachen
brutal erschlagen kann mit irgendwie
Hauptspeicher oder
genau, das habe ich auch so
ähnliche Geschichten zum Beispiel,
also was mich schon mehrfach gebissen hat,
das ist eher so ein Thema
für generell, das ist eher so ein bisschen
auf der Fail-Seite, man muss aufpassen, so
Pfeilsysteme, vor allen Dingen, wenn man Pfeilsysteme
benutzt irgendwie und da
rein daraus liest und schreibt,
gleichzeitig und zwar von vielen Rechnern
aus und dann so verteilte Dateisysteme
ein bisschen, also
du hast halt
eigentlich nur ein Dateisystem auf dem Server
und viele lesen und schreiben davon.
Also vielleicht so zu Hause oder in einem kleinen
Büro, gute Idee, irgendwie schön.
So
Internet-mäßig
oft nicht so eine richtig geile Idee, weil
funktioniert nicht gut.
Und das da
hatten wir auch mal echt
böse Probleme mit
naja, also
Webseite mit ganz vielen unterschiedlichen
Bildgrößen für Produkte, aber
halt auch relativ viele, also so
zig Millionen und
ja, das muss man
dann schon irgendwie auf der Platte liegen haben, weil es ist einfach zu viel
Zeug und naja, jetzt muss man
das alles umrechnen und jetzt
hat man das Problem, dass
man zum Beispiel irgendwie neue Bilder anzeigen
muss, weil es gab irgendwie eine
Abmahnung, weil
irgendwie jemand in einem
Webshop einfach irgendwie Bilder
von der Herstellerseite geklaut hat oder so,
die er nicht verwenden durfte und dann wird er
vom Hersteller abgemahnt und dann
muss das ganz schnell wieder verschwinden
und dann kann man das auch verschwinden lassen,
aber, also das Verschwinden lassen geht
noch, aber dann die neuen Bilder stattdessen anzeigen geht
nicht so richtig, weil die müssen ja neu gerechnet werden und die
Queue von Neuberechnungsjobs ist jetzt so zwei Wochen
lang, also es dauert dann irgendwie so zwei Wochen
von irgendwie, es kommt
ein neues Bild rein und es ist in den
richtigen Größen... Aber habt ihr keine Priorisierung gehabt
für Jochen? Ja, das hätte man dann natürlich machen können,
Also man hat sich dann natürlich so Dinge überlegt,
ja, kann man das nicht irgendwie priorisieren
oder kann man nicht irgendwie sagen,
okay, man macht da irgendwie andere komplizierte Geschichten,
man macht die Berechnung woanders
und kopiert es dann hinterher batchmäßig immer darüber.
Also es wurde in viele Richtungen überlegt,
auch sogar in solche Richtungen wie,
was für Blockgrößen bei der Übertragung per NFS
sind denn jetzt die optimalen
und nimmt man jetzt UDP oder TCP
und diese ganzen Geschichten.
da haben Leute irgendwie lange dran rumüberlegt,
wie man das alles optimieren kann und
Sachen ausprobiert und getestet. Das hat lange
gedauert und es war ein ständiger Schmerz.
Bis dann auch
irgendjemand, auch nicht ich,
tatsächlich sehr guter
Entwickler,
auf die Idee kam,
wie viele, also
ja, okay, das sind viele Bilder und so, aber
wie viele von den Bildern zeigen
wir eigentlich so an?
Wenn ich jetzt durch die Logs, durch die Serverlogs
wie viel von dem Kram wird denn tatsächlich da draußen angezeigt.
Und das waren dann gar nicht mehr so viele.
Das waren dann nicht mehr zig Millionen,
sondern das war dann halt nur noch ein kleiner Teil davon.
Und dann war halt die Überlegung,
okay, kann man das vielleicht nicht auch alles einfach on demand machen
und dann halt den heißen Teil der Bilder einfach im Hauptspeicher cachen?
Und das ging dann.
Und dann dieses System umzudrehen und dann zu sagen,
okay, wir brauchen das nicht irgendwie fertig irgendwo liegen zu haben,
sondern wir übergeben die Größe, die wir gerne hätten,
einfach nur als Parameter in der URL für das Bild mit
und cachen dann.
Das war dann halt so, das hat gar nicht lange gedauert,
das umzustellen und das System hinterher war
sackschnell und man konnte alles quasi
on-demand ändern,
Blacklisten, White-Listen, alles kein Problem
und es war so. Und danach war dieses Problem
gelöst und vorher hatten da wirklich viele Leute
lange dran rumgetüftelt,
dass irgendwie den eigentlich
den blöden Ansatz halt sozusagen
irgendwie zum Laufen zu bringen, der aber einfach
nur falsch war und deswegen hat es halt nicht funktioniert.
Und das, ja.
Und dann hat man am Ende mehr Features
und eine einfache Implementierung und
es ist schneller.
Ja, also
ich habe so das Gefühl, so an diesem
zweiten Schritt bei der Feynman-Lösung,
dieser zweite Schritt, da
ist enormes Potenzial.
Das ist irgendwie so.
Ja, aber das ist doch, als Entwickler
macht man sich das doch oft, oder? Also Stunden des
Machens ersparen Minuten des Nachdenkens.
Das ist schon oft so.
Ja, natürlich.
Tja, wenn man aber, weißt du, wo man
Ja, aber manchmal ist es auch wirklich so, dieses Größenordnungen überdenken, das ist für mich auch manchmal so eine Live-Lessung. Wir hatten bei unserem ersten Kind, haben wir zwei Fläschchen gehabt, mit denen wir dann jede Nacht die Milch gemacht haben und das heißt halt, dass du ständig daran dabei bist, diese Fläschchen zu spülen, weil wenn du eine aufgebraucht hast, dann hast du nur noch eine.
Und ich bin dann halt irgendwann mal hier zu einem Supermarkt gegangen und habe einfach zehn solcher Fläschchen gekauft. Das hat einen überschaubaren Geldbetrag gekostet. Die kosten, glaube ich, zwei Euro Stück oder so. Also es war, oder 2,50, ja. Es ist wirklich egal.
Und dann kannst du halt in einer Nacht fünf Fläschchen verbrauchen oder sechs oder sieben oder acht und am nächsten Tag stellst du sie in die Spülmaschine und bist fertig. Einfach mal so Größenordnungen überdenken. Das ist eine sehr mächtige Sache.
Und viel hilft viel. Ja, es ist wirklich so. Viel hilft halt manchmal einfach viel und kostet aber gar nicht so viel. Und man hantiert oft mit solchen Limits rum, die völlig zufällig gewählt sind, aber an denen man dann so im Kopf rumhängt, die man eigentlich einfach mal überdenken müsste.
Also die man einfach mal genauer anschauen müsste, ob das wirklich sinnvolle Limits sind und ob man vielleicht irgendwas verändern kann, sodass man nicht an diesem Limit hängt. Und die simpelste Möglichkeit ist halt vertikale Skalierung, mehr Hardware kaufen.
Weniger schlafen.
Im Falle der Fläschchen. Im Falle der Fläschchen hat das, ja, und das hat dann auch direkt zu mehr Schlafen geführt. Wenn du weniger Verwaltungsaufwand hast.
Ja, das sind Sachen, bei so endlichen Ressourcen.
Ja, aber diese Zahl, auf die man sich irgendwann mal festgelegt hat, die ist ja nicht in Stein gemeißelt. Und die ist weder bei Hauptspeichern in Stein gemeißelt, noch bei der Anzahl der Utensilien, die man so hat.
Naja, glücklicherweise kann man auf die meisten Maschinen noch ein bisschen mehr Speicher oder sowas werfen oder halt mehr Fläschchen einfach so in einem Supermarkt kaufen. Das ist ja immer, die Probleme kommen ja tatsächlich erst immer dann wirklich zum Tragen, wenn es halt diese Restriktionen gibt, dass du halt dann dir Konkurrenz hast für irgendwelche Prozesse oder sowas, dann wird es erst nervig.
Wenn du an die Grenzen kommst. Aber bis du da hinkommst,
gibt es oft Lösungen, die überraschend
simpel sind und doch nicht so schlecht.
Und ich meine Hauptspeicher, es gibt halt Maschinen,
die 6 Terabyte Hauptspeicher haben können.
Also ich
habe seltsame Probleme gehabt.
Das ist natürlich schon, also 6 Terabyte
Hauptspeicher, wow.
Ja, kostet schon
100.000 Dollar oder 200.000, aber
bei der Problemgröße, also ein Cluster mit
100 Nodes kostet mehr als 10.000 Dollar.
ja deshalb manchmal lohnt sich das über solche größenordnungen einfach mal
nachzudenken und ja das das will ich auf jeden fall als win bezeichnen ist ein
ganz klarer win ja sowas zu überdenken und so eine hürde zu überkommen
ich habe mir irgendwann einfach mal 50 paar identische socken gekauft und
seither keine socken mehr gefaltet weil es meist immer lauter identische socken
da drin und wenn die leer wenn wenn die wäsche ist dann ist die schublade wieder
voll. Und wenn einer kaputt geht, dann schmeiße ich ihn weg
und dann habe ich immer noch 49,5 Paar
identische Socken.
Ja, ja, sehr gut.
Das ist eine triviale Sache, aber es ist
einfach einmal über so eine Größenordnung
nachgedacht und bemerkt, dass die Grenze,
die man sich selber gesetzt hat, völlig arbitriär ist.
Nicht kleckern, klotzen, bigger is better
und so weiter. Genau.
Und wenn man irgendwas, irgendein
Problem hat, was man in Hauptspeicher kriegt,
warum nicht? Oder wenn man es so trimmen kann,
dass man es in Hauptspeicher kriegt, noch besser.
Also das ist ein Win, sagst du, okay.
Eindeutig.
Und es gibt viele
Gelegenheiten für solche Wins, deshalb, das ist super.
Und die fühlen sich gut an,
so ein Win ist eine total tolle Sache.
Ja, wenn's nicht gut.
Ja, wobei
ich muss allerdings dazu sagen, als ich
die zehn Flächen gekauft habe,
habe ich leider die falschen gekauft, also ich musste dann noch mal
hin und die alle zurückgeben und
neue kaufen, also es ist
gemischt, ja, win und
Fail zusammengemischt.
Tja.
Und das ist doch ein schönes Resümee für das Jahr
2020. Das ist doch ein schöner Jahresrückblick.
Win und Fail zusammengemischt
in gleich großen Proportionen.
Ja.
Ja, dieses Jahr
war eine Spur zu viel Fail,
ehrlich gesagt, für meinen Geschmack
in der Gesamtsituation.
Aber ja,
es sieht ja leider so aus, als ob das uns
noch ein Jahr beschäftigt.
Ja, aber ich fand ja gut, also was ich toll
finde an der ganzen Geschichte ist, dass jetzt alle
das mit dem Internet mal so richtig und das mit dem
Paketen und so, das geht jetzt alles und
ab dann denke ich jetzt,
ab jetzt ist es halt normal.
Also es gab auch wahrscheinlich coole Sachen auch irgendwie, also ich weiß nicht.
Ja? Ja, ja.
So ein paar Sachen sind vielleicht gar nicht so schlecht, dass das jetzt nicht mehr so
durch ist. Ja, so das mit dem Homeoffice irgendwie,
das ist ja so normales zum Beispiel.
Das ist so eine Sache, die eigentlich
schon selbstverständlicher hätte sein können
irgendwie länger. Und wie man sich ja auch
immer so dachte. Ja, wobei
Jochen und ich, wir leben das ja schon seit Jahren.
Ja, ich auch, übrigens.
Herzlich willkommen in unserer Welt.
Das meine ich ja, genau.
Und da merkt man mal, was für Vorteile das hat.
Oder auch für Herausforderungen. Und dass es nicht mehr darum geht,
dass man nur nichts machen will oder so.
Ja.
Ja, und es gibt noch
ein paar andere gute Sachen. Also so ein paar
Menschen sind nicht wieder gewählt worden
oder so. Das gab es ja auch.
Noch, noch ist er nicht weg.
Ja.
Ich habe tatsächlich im März noch mit einer Firma gesprochen,
die hatten immer Inhouse-Entwicklung
und die haben dann aber umgestellt auf Homeoffice,
hatten 3000 Entwickler, die dann plötzlich im Homeoffice waren
und weil das alles sicherheitskritisch war,
war das alles mit Remote Desktop und so.
Die hatten aber nur Remote Desktop-Kapazitäten
für 1000 Anwender.
Also die hatten einfach nur 1000 Desktops,
diese Remote zur Verfügung stellen konnten
und haben dann relativ schnell gemerkt, dass
da irgendwas nicht geht.
Tja.
Und mussten dann so ein kleines bisschen nachziehen.
Also auch
der Übergang war da nicht immer ganz flüssig.
Nö, also das hat man auch, aber ich,
ehrlich gesagt, mich hat das überrascht, wie wenig
das dann, also klar, also
ich hab da natürlich Probleme und so,
also das hat dann auch, also ab und zu ging dann halt auch mal
irgendwas wirklich nicht oder so,
aber ich hätte jetzt erwartet, also wenn man mir gesagt hätte,
also in einem Umfeld, wo
Remote nicht üblich war, machen das
jetzt alle irgendwie 100% die ganze
Zeit und es muss halt einfach alles darüber funktionieren.
Ich dachte so, oh mein Gott, das gibt eine Katastrophe.
Das dauert Jahre.
Das dauert Jahre und das ist alles ganz schrecklich.
Wenn man das als Projekt geplant hätte,
dann hätte
jemand gesagt, okay,
da müssen wir Jahre. Tatsächlich
hat es aber nicht Jahre gedauert, sondern
weil es wirklich nötig war, ging es dann halt irgendwie
doch und es ging auch relativ schnell und es hat
zwar auch böse gefällt ab und zu, aber
Ja, zum Beispiel die Schulen oder sowas. Das ist ja auch ein Riesenproblem, aber das wird halt einfach jetzt rapide, schneller, besser. Und das brauchen wir ja wahrscheinlich, wenn wir irgendwie sowas wie Zukunft irgendwann mal besser machen wollen, auch irgendwie. Das sind so ein paar Dinge, die halt dann doch schneller funktionieren. Oder dass so ein Impfstoff so schnell entwickelt werden kann und so. Und wie viele Leute da auf einmal doch kollaborativ arbeiten können. Alles nicht so schlecht. Und dass man entdeckt hat, dass China nicht wirklich vertrauenswürdig ist. Also gar nicht so schlechte Dinge.
Ja, sowas. Ich habe vor kurzem den Traffic von einem niederländischen ISP gesehen. Die hatten so eine Zusammenfassung, war auf Twitter. Und die haben Traffic-Spitzen zu jeder vollen Stunde zu den Bürozeiten, weil da die Videomeetings anfangen.
Und die dauern halt unterschiedlich
lang und das ist quasi, jede Stunde ist ein
so ein Peak und das fällt dann bis zur nächsten Stunde
wieder so ab. Sehr schön.
Oder zur nächsten Vornstunde. Und in der
Mittagspause sieht man eben, dass dieser
Peak nicht da ist, weil um zwölf eben keine
Meetings anfangen und es ist
sehr, sehr schön.
Ja, ja, ja.
Ja, auch noch so eine Sache. Ja, dass
die alle darauf aufmerksam sind, dass man die Kapazitäten
da ernsthaft ausbauen muss vielleicht auch und so.
Also endgültig, das wusste man ja eigentlich schon
und so. Aber ne, so diese Notwendigkeit.
Ja, es gab, also ein paar
schöne Sachen gab es ja auch dieses Jahr.
Hoffentlich auch bei euch.
Selbstverständlich.
Corona-Kekse, ich meine.
Ja, hat man auch, ich habe die ja
letztens, hat man das eigentlich gesehen? Ich habe
die ja auch dann verlinkt,
ob man das, gab es einen?
Ja, natürlich.
Also, da ist so wenig Traffic
drauf, dass man nicht sieht, was, dass es
individuelle Ereignisse gibt, aber vielleicht,
wir können uns das jetzt als,
an alle Hörer, als
Vorsatz nehmen, dass ihr mal
einen Traffic-Spike in meine...
Du meinst, ist das noch jemand dabei jetzt um diese Zeit?
Ja, selbstverständlich.
Wir haben noch nicht mal die zwei Stunden überschritten.
Ja, okay.
Ja, was ich jetzt, ich habe jetzt
mal in letzter Zeit,
ich habe ein bisschen Zeit dann irgendwie
auf Statistiken geguckt und was ich
schon überraschend fand, jetzt auch gerade zu Weihnachten
hat man natürlich einen Einbruch, aber es gibt immer noch irgendwie
pro Tag, weiß ich nicht,
allein auf Spotify 25 Leute, die sich das
zu Weihnachten angehört haben, wo ich dachte so,
ähm, habt ihr eigentlich ehrlich gesagt,
also, ich meine, naja, also
Was hast du denn Weihnachten gemacht?
Ja, aber,
äh, naja. Also ich habe
alle Episoden vom Piran Podcast nach
gehört gleichzeitig.
Selbstverständlich. Hätte ich ja nicht mal Zeit dafür.
Ah, ja, ja, ja.
Jetzt weißt du, woher die 25-Klicks-Eckung.
26 waren es ja, weil es waren ja 26
Episoden. Ja, die eine Episode hast du schon gehört.
Ja, die erste, die Einführung.
Nee, aber das ist doch immer, es gibt doch immer,
also ich meine, ja,
an Weihnachten hat man Zeit, die Sachen zu machen,
die man sonst nicht macht.
Ja, ja, na ja, diesmal
war ein bisschen,
es war auch so ein bisschen unentspannt, ehrlich gesagt, so,
ja. Ja, fandest du?
Nee, aber es war super. Also ich habe schon am Tag vorher
acht Stunden Suppe gekocht und Soße.
Also so prinzipiell,
nee, war alles total super, aber es war
einfach eine völlig andere Situation als normalerweise,
weil irgendwie Teile
der Familie so irgendwie
gar nicht. Ja gut, also es war
zu Hause Weihnachten.
Ja.
Genau. Aber das ist doch nicht
unentspannt.
Zum Teil sogar viel entspannter. Also ich fand's
viel entspannter.
Wir hatten längst nicht so viel
hin und her gefahren und längst nicht so viel hin und her
transportieren.
Ja. Gut, klar, die Kinder
sind die ganze Zeit da und unbeschäftigt, aber
mit genügend großen Lego-Packungen
kriegt man ein großes Problem in den Griff.
Ja, wir haben leider
die klassischen Fehler gemacht und haben nicht bemerkt,
nicht vorher geguckt, dass diese
Lego-Packungen, die wir gekauft hatten, Batterien brauchen.
Oh. Ah.
Ja, und
es ist halt blöd, wenn die Lokomotive nicht fährt,
weil keine Batterien da sind. Und wenn Prime nicht
liefert, same day delivery an Weihnachten,
dann ist das uns verschämt halt. Ja, also das
ist ja gar nicht. Und da habe ich dann eigentlich gedacht,
eigentlich müsste man, das ist auch so eine Sache,
Da müsste man eigentlich am ersten Weihnachtsfeiertag
einfach mit so einem Korb voll Batterien rumgehen
und die von Haustür zu Haustür verkaufen.
Weil ich bin da sicherlich nicht der Einzige,
der die Batterien in den Geschenken vergessen hat.
Eine gute Idee, aber das Problem ist irgendwie die Marge.
Distribution.
Sind die Leute wirklich bereits so viel da drin?
Ja, ich will es auch nicht machen.
Du brauchst jetzt eine fliegende Drohne.
Ach komm, da verkaufst du eine Batterie für 5 Euro das Stück.
An Weihnachten zahlen die Leute das.
Oder wenn die Drohne weiterfliegen muss,
dann muss man einfach die Drohne sich nur selber
noch in eine Batterie zusätzlich reinstecken.
Ja, genau.
Drohne, ja. Die hat sehr große
Reichweite, diese Drohne, theoretisch
gesehen.
Ja.
Auch im Wind übrigens.
Ja, ruhige Weihnachten war
für einige Leute vielleicht mehr Wind,
für einige Leute weniger Wind.
Ja, ich hoffe, dass ihr auch bei Hause da alle
gemeinsam noch irgendwas
davon hattet und es euch gut geht.
Das war wichtig, ne?
Jetzt kommt ja bald noch ruhige Silvester.
Das erste Mal richtig ruhiges Silvester.
glaubst du dran? Da bin ich
auch gespannt, ob das, wie das
Also, ja gut, ich meine
Wir knallen vorher, nachher wird weniger im Verkauf
und sonst
Ja, das wird halt genau um
die zwei Minuten vor und nach
Mitternacht wird es wahrscheinlich nicht so laut sein wie sonst
Ja, eben
das meine ich ja. Das Feuerwerk ist nicht
im Verkauf und
das wird schon
Tja, wollen wir noch
irgendwelche Dinge picken oder sowas?
das könnten wir ja auch. Standardlib?
Oder irgendein Modul aus dem Standardlib
besprechen, aber ich will. Oh, ich weiß
eins, ich weiß eins. Array.Array.
Ich wollte auch gerade Array sagen.
Du bist gemein, ich habe mir meinen Pick geklaut. Das passiert mir jedes Mal.
Ja,
stimmt, das ist
ein sehr schönes Modul.
Wir picken das jetzt einfach
an. Warte mal, ich muss auch mal
Standardlib aufmachen, vielleicht finde ich auch was.
Ja, also
im Grunde kriegt man da natürlich genau das gleiche, was man
jetzt auch mit einem NumPy-Array oder so kriegen würde,
Aber halt in Situationen, wo man NumPy nicht importieren will
oder nicht voraussetzen will, ist das halt mehr.
Wenn man die ganzen anderen NumPy-Arrays so können nicht braucht,
gute Alternative.
Ja, und auch schon zehn Jahre vorher, oder?
Also dieses Array.Array gibt es ja schon immer.
NumPy gibt es ja noch nicht schon immer.
Ja, aber ich weiß nicht genau, wann das dazugekommen ist.
Ja, ob das vor NumPy war, weiß ich nicht.
Aber es ist schon alles relativ ewig.
Ich möchte was anderes hervorheben,
was so ähnlich ist,
was auch in diese Kerbe schlägt.
Und das ist das Struct-Modul.
Habt ihr das schon mal gesehen?
Das ist quasi ein Modul,
was es einem erlaubt,
C-Type Structures zuzulegen.
Also man gibt da einen sogenannten Format-String an.
Es ist ein bisschen ein Gefitzel,
diesen Format-String zu bauen.
oder den zu wissen, aber dieser Format String erlaubt es einem dann sozusagen Structs, so wie sie in C vorkommen, zu lesen und zu schreiben und die sind natürlich auf Bit-Ebene gepackt, also wenn man da eben die Werte mit den entsprechenden Bitlängen hat, die sind sehr dicht und sehr eng gepackt und man braucht das manchmal, wenn man Formate liest, die eben eng gepackt sind.
Also Bitmap zum Beispiel ist so ein Format, das ist relativ simpel zu parsen in C, weil es im Wesentlichen, wenn man die Structs kennt, kann man das im Wesentlichen einfach reinladen und das ist in Python ein bisschen schwieriger zu verarbeiten, aber mit dem Struct-Modul auch nicht, weil man da eben nur die entsprechenden Formate wissen muss und die entsprechenden Formate eintragen muss und das Struct-Modul zerlegt einen die dann in Python-Werte und umgekehrt auch, wenn man die schreiben möchte, schreibt sie auch in Python-Werte.
Ist super gut, wenn man Daten eng gepackt haben möchte oder bereits vorliegen hat, um solche Sachen, die eben in C sehr leicht sind, auseinanderzupacken und in Python-Werte umzuwandeln.
Braucht man nicht super häufig, aber wenn man es braucht, ist es echt lebenswerter.
Also ich habe es tatsächlich auch nie so wirklich super häufig, aber wir haben es auch einmal an einer Stelle gebraucht.
Was man nämlich zum Beispiel machen kann, ist, man
baut halt sozusagen
die Datenstrukturen, die man in einer anderen Bibliothek
dann verwenden möchte. Also man hat zum Beispiel irgendeine
C-Bibliothek, die irgendwas macht. In unserem Fall war das halt
Lipidinear. Das war halt so eine
Bibliothek zum Lösen von
Support-Vector-Maschinen, Geschichten, lineare Support-Vector-Maschinen.
Und
normalerweise gibst du den
Trainingsdaten und so halt in Form von
und halt auch die Sachen, die du nachher klassifizieren willst,
in Form von so Text-Files, wo das
dann mit Doppelpunkt getrennt ist und Kommas
und so, weiß ich nicht. Aber das ist halt alles
Mist, weil Text-Files zu parsen, das ist halt
alles, dauert alles lange und das geht alles
nicht toll. Aber dann kannst du halt das
aber in dem Format, in dem, das war
zum Glück sehr simpel, wie die Bibliothek
halt die Daten halt selber dann, also
das Zielformat, in das sie die Sachen geparsed hat,
kannst du halt in Python hingehen und das einfach so in den Hauptspeicher
schreiben, das
in Chat-Memory-Signal packen und dann halt einfach
von der Library aus
einfach so verwenden. Sagst du ja so,
du hast hier, die hast du gerade
geparsed, bitteschön, mach damit mal irgendwas.
Und das hat einfach super funktioniert.
Ja, auch für so Netzwerksachen
ist es super nützlich, weil
mir eben oft diese Netzwerksachen,
die man über das Netzwerk kriegt, halt oft so gepackt
sind, wie sie halt in C gepackt werden.
Und da die einzelnen
Felder rausholen, ist mit Struct super nice
und super simpel.
Struct?
Also ich picke dis.
Oh, dis, dis.
Jetzt musst du mal erklären, wie du das schon mal verwendet hast.
Ja, also ich habe gestern CTF gespielt und damit
kann man ja irgendwie das, was da an
Funktionshaufen passiert,
disassemblen und auseinandernehmen und gucken, was da so
tatsächlich an anderen Hin- und Hersprüngen passiert.
Ja.
Viel mehr werde ich gar nicht verraten.
Dafür müssen wir bestimmt noch mal so eine Folge machen
über Assembling und Disassembling und
Ja, also
einfach Python Bytecode anschauen.
Das ist generell eine sehr interessante Sache.
Bin ich auch.
Also die Episode möchte ich gerne hören.
Kann ich zu wenig, um dazu beizutragen,
Das ist halt immer das Problem.
Bei vielen Dingen bräuchte man eigentlich jemanden, der sich so richtig
damit auskennt und das ist halt
Wir haben alle keine Ahnung.
Also ich jedenfalls nicht, aber
Ja. Und wir sind auch offensichtlich
alle zu faul, um uns vorher
bereiten zu können.
Ja, das kann man ja mal ab und zu machen, aber die ganze Zeit
Oh Gott, Arbeit.
Ja, da ist es wieder.
Das mit dem zwei Stunden des
Arbeitens erspart uns zwei Minuten des Nachdenkens.
Ja, aber
Ja, aber da ist ja jetzt, der Dominik
ist ja jetzt eingearbeitet, der kann uns ja dann sagen, wie das
funktioniert. Oh ja, natürlich, der absolute Profi, wie immer
in allen Themen.
Just call me, ruft mich an,
hört mir zu,
uns morgens, mittags,
abends, nachts, wann immer wieder einschalten wollen.
Ey, ich wollte auch noch was picken. Du darfst was picken?
Ja. Das hast du eben. Aber was habe ich denn
gepickt? Ich dachte, du hast Array gepickt. Ja, genau.
Ach so, okay, nee, dann ist gut. Nein, du musst
jetzt was picken. Ah, na gut.
Weil ich wollte
nämlich eigentlich noch, ich mache gerade momentan so ein bisschen
Fast API
nebenher und
das, was mir da auch tatsächlich
sehr nützlich
untergekommen ist, ist halt
Pydentic. Das ist ziemlich
klasse. Pydentic?
Ja. Das hört sich nicht was für dich an.
Bibliothek.
Das hört sich an wie was für Zahnärzte.
Ja.
Es gibt eine ganze Reihe von diesen
Geschichten. Ah, Pydentic.
Das ist
also es kann auch ein bisschen, also es ist halt
auf diesen API-Fall sehr zugeschnitten,
wo es halt in FastAPI
halt irgendwie da so
wichtige Funktionen
übernimmt, aber es gibt in Python jetzt
seit einiger Zeit schon so irgendwie so ein Trend
irgendwie,
naja, die Erstellung von Klassen
einfacher zu
machen und irgendwie so Objekte
zu serialisieren, deserialisieren,
das auch alles so ein bisschen simpler
hinzukriegen und
weil es gibt halt so bestimmte Sachen,
die braucht man halt ständig und bestimmte
Dunder-Methoden wären halt
auch nett, wenn die einfach so da wären, aber
das alles selber hinzuschreiben ist halt ein Haufen Arbeit
und also ich sage
jetzt mal so, die anderen Geschichten, die in die Richtung
gehen, ist so Atres,
da müssen wir uns auch nochmal mit Leuten unterhalten, die sich damit
auskennen.
Und Dataclasses, genau, das ist halt
ja, ist halt
in die gleiche, also das ist
auch in der Standardbibliothek, das ist inspiriert
von Atres, soweit ich das
weiß,
und
ja, aber was man da halt auch
machen kann, ist, du kannst halt ein Dict nehmen und sagen,
okay, mach daraus
jetzt ein Objekt
von einer bestimmten Klasse, du kannst
aber auch sagen, erst Dict
irgendwie, dein Objekt von einer Klasse,
und dann hast du ein Dict und so, und Pydentic
macht das Ganze nochmal so, da hast du nur Punkt Dict
und
du hast halt auch einen ORM-Mode, wo du Sachen
also direkt aus dem
Datenbank-Result
halt direkt in Objekte packen kannst,
und das Ding macht dann halt
Überprüfungen, ob das jetzt also
korrekt,
ob die ganzen Typen korrekt sind oder so,
halt von selber. Du hast halt so, es ist quasi so
ein bisschen ähnlich wie bei Django-Modellen, du schreibst halt hin,
welche Attribute gibt es denn und welchen Typ
haben die und, aber das kannst du halt auch kompliziert
machen, kannst nicht nur
Typefins verwenden, sondern halt auch noch
Validatoren dafür schreiben und keine Ahnung,
kannst ja dann relativ sicher sein, dass wenn die Daten
halt von der Klasse
gefressen werden, dann waren die
im richtigen Format und ansonsten gibt es eine vernünftige
Fehlermeldung und man muss sich da um nichts kümmern,
außer das halt zu definieren, was man
gerne hätte. Und alles andere
macht halt die Magie da drin
und das ist natürlich schon sehr schön.
Und ja, ich glaube, es ist
ein ganz interessanter Trend. Ich weiß auch nicht so genau,
warum das jetzt irgendwie so,
aber da passieren auch so mehrere Dinge
gleichzeitig.
Ich weiß nicht, habt ihr den,
Marc hatte so
einen Vortrag gehalten, ich weiß nicht genau,
halt von,
hier von der Python-Usergruppe Düsseldorf
zur Zukunft von Python.
Nee, hab ich nicht geguckt.
Da war das generell...
Verlink den mal.
Würde ich gerne auch noch sehen.
Ja, der war tatsächlich ganz interessant.
Ein Thema vielleicht für die Zukunft von Python,
ganz interessant,
könnte dieser ganze Enterprise-Bereich sein.
Weil, also der ist momentan halt total...
Ja, auf der Pidentic-Webseite steht schon,
dass Microsoft das benutzt, um das
in Windows und Office einzubauen.
Also das ist
schon mal die richtige Richtung.
Genau. Und also dieser ganze Enterprise-Bereich
ist ja momentan total von Java dominiert,
aber
tatsächlich für viele Dinge braucht man
gar nicht so diese, man muss halt nicht
irgendwie alles erstmal mit so einem
sehr Pattern, mit dem Gang-of-Four-Buch
So was?
Ja, es ist
überraschend. Es ist erstaunlich und
vielleicht auch ein bisschen traurig für Leute, die jetzt viel Zeit
damit verbracht haben, das alles auswendig
zu lernen. Aber vielleicht braucht man sie auch nicht
die ganze Zeit dauernd. Aber was man vielleicht schon
braucht, ist halt eine Art,
solche Sachen
hinschreiben zu können. Auch so Objekte
oder Klassen, die dann halt irgendwie so Business-
Geschichten machen. Und dafür,
wenn du jetzt aber ganz viele Klassen hast
und Sachen hinschreibst, dann ist das halt ziemlich
nervtötend und öde.
Und wenn man davon zu sehr angeödet
ist, dann kann man halt irgendwie solche Sachen verwenden, die
einen dann halt einen Großteil davon wegautomatisieren.
Und deswegen ist das halt auch so ein interessanter Bereich,
Microsoft macht da ja auch sowieso
Dinge in die Richtung. Die haben ja auch jetzt ganz viele
Python-Entwickler
angestellt und
es könnte sein, dass das halt
tatsächlich auch so ein bisschen in die Richtung geht,
weil das ja auch etwas ist, was
Microsoft eigentlich ganz gut auskennt. Also ich bin gespannt.
Es könnte sein, dass das alles so ein bisschen in die Richtung geht
und ich finde es auch sehr interessant, was da gerade so
passiert. Und es macht halt das Bauen von APIs
deutlich einfacher, wenn man das halt quasi
delegieren kann, den harten Teil davon
an sowas.
Ein ORM on the fly quasi. Ja, spannend.
Ja, dann sind wir diesmal für heute am Ende, am Ende dieses Jahres auch mittlerweile und ja, also hört uns immer, wo ihr uns auch immer hört und so, bleibt uns gewogen und habt Spaß und Lust zum Einschlafen und zum Aufstehen und zum Autofahren, wo auch immer ihr hinwollt, im Homeoffice natürlich.
Ja, Jochen, gehen wir noch ein bisschen cybern.
Ja.
Alles klar.
Vielen Dank, Johannes, dass du wieder da warst.
Ja, schön, dass ich dabei sein durfte.
Ja, wir hören uns.
Bis zum nächsten Mal.
Alles klar.
Ciao.
Ciao, tschüss.