Transcript: Wins and Fails
Full episode transcript. Timestamps refer to the audio playback.
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 mit
2021 noch und Strukturen
Trends oder weiß ich nicht. Ein bisschen Struktur,
ja, ich fange einfach mal so ein bisschen mit News an.
Ja, ich wollte es ja sagen, dann kommen wir als erstes die News.
Ja, und
zwar ganz nett, freut mich natürlich besonders,
es gibt jetzt Python
391
und 387 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 391, 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.
Zweites Ding auch zum M1
Docker
tatsächlich, das war ja auch letztes Mal schon so ein bisschen
die Frage, ob das gehen 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? Das weiß ich
nicht. Es gibt eine experimentale
Release für M1.
Die hat nämlich auch sowas wie Compose eingeführt
jetzt als extra Kommando ohne Docker-Compose.
Ah, okay.
Haben sie das reingezogen. Das ist ja schön.
Ja, und ansonsten
war noch, also großes Thema, das war auch
im Django-Newsletter, das ist ja mal
irgendwie Breaking News.
ist
David Hanema
Hanson, der von Ribbon Wells
hat
etwas angekündigt und zwar
hat er einige Geschichten released
oder
vielmehr die Firma dahinter, Basecamp,
unter dem
Oberbegriff Hotwire
und... Ein Hotwire, ein heißes
Kabel, was ist das? Ja,
das ist ganz interessant. Heiße Draht.
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 diese ganzen
JavaScript-Zeugs braucht man nicht mehr.
Wir machen nämlich jetzt HTML
direkt über das Kabel.
Ja gut, das hat man ja schlimmer gemacht.
Was ist denn da jetzt neu und toll?
Das hatten wir doch schon mal, oder?
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 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
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, so 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
Gerändere, 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
und aber trotzdem
hast du halt nicht diese
Unterbrechungen, die du normalerweise hättest, wenn du einen Patch-Reload
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 LXC,
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,
ich meine, 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 du 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 jetzt davor setzen?
In das Frontend macht man dieses Turbo rein
und das lädt dann einfach aus der
Template-Hin-Engine irgendwelche
Teile raus, die dann
zwar über Sockets kommen, nicht über einzelne Requests.
Ja, also das kann auch
über normale...
ü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 es 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.
Er 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 nicht eine sehr schöne Technik ist
das ist schon mal eine super Idee
sehr psychologisch
für alle Leute die so notorisch
nervös mit dem Mauszeiger rumwillen
über alle Links, gibt das dann Lags
auf der Seite, weil die ganze Zeit irgendwelche Requests passieren
oder?
für die ist es nicht gut geeignet, aber
einen Tod muss man sterben
ok, verstehe
ja
ja, ich habe keine News
also ich habe in den letzten vier Wochen nicht viel
war zu sehr im Weihnachtsstress
ja ja
es ist einfach nichts Neues passiert
ja ja
das stimmt auch
ich habe jetzt
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
stimmt
der perfekte Sturm
sozusagen.
Ja, aber auch im Hinblick auf
ja genau, das wollten wir, das ist vielleicht
eine Überleitung zur Richtung, was kommt
eigentlich 2021 und die
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.
Globale Auswirkungen.
Ja, das ist so ein bisschen schlecht.
Es gibt ja zum Beispiel bei den
also diese
analog, also
DRC, also digital
zu Audio und umgekehrt
Converter.
Da gibt es halt nicht so viele von,
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
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.
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,
wird es in 2021 ein bisschen schwierig, das zu kaufen.
Unter anderem auch deshalb,
weil halt die Nachfrage weiterhin
hoch bleiben wird, denke ich mal.
Weil Homeoffice wird wohl weitergehen, nehme ich mal an.
Das sieht
erst mal so aus.
Ja, also die
bisherige Prophezeiung
war da so bis Sommer.
Also jedenfalls jetzt hier bei uns
so in Mitteleuropa.
Ja, kommt drauf an,
welche man will.
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, ja.
Wir sind schon fast da. Wie 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.
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 musst jetzt mehr Leute
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 brauchst du halt
der Prozentsatz der Leute, die irgendwie immun sein müssen
entweder dadurch, dass sie das schon hatten oder
geöffnet werden, halt höher, was bedeutet
ja, 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, so, 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
es kann eigentlich nur
egal in welche Richtung es geht, es sind alle doof
die Richtungen, es gibt keine guten mehr
jetzt über Weihnachten sind die Sachen alle gesunken
komisch
warten wir mal die Nachmeldungen ab
warten wir mal die Nachmeldungen
ja gut
ich meine das wird uns noch
das nächste Jahr beschäftigen
habt ihr da irgendwas
Habt ihr eigentlich sowas gemacht?
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 also mal in der Partikel gefragt,
diese Schnelltests, das klingt ja alles ganz toll und so,
und hier ist es halt so, nä, nä, nä,
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.
Ich habe dann halt auch bestellt.
Wie viel beteiligt hat der Hand?
Man musste ihn in großen Packungen kaufen. Ich habe irgendwie so
25 Stück bestellt. Das hat so
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 so ein paar Tage
später,
ein bisschen schlecht mit dem Liefern.
Habe ich mir auch schon gedacht, dass das eventuell
und das ist ja gut, sonst wäre das ja vielleicht gar nicht angekommen.
Wunderbar.
Ja
Und hast du den Webshop aufgemacht und den Preis verfünffacht?
Nee, nee, nee
Sie sind auch schon, also ein guter Teil
davon ist jetzt auch schon
verbraucht
Ja, ich habe tatsächlich Angebote gesehen
da haben sie 50 Euro pro Test verlängert
also da können schon durchaus Margen drin sein
Jochen
Ja gut
Geld für zwei
neue Lieferungen.
Lass mal überlegen, wie kann man denn da ein Pyramidensystem
draus machen? Eine kurze Lektion
in ex-politische Faktum.
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.
Beim dritten Verstoß 20 Euro.
Und das wäre dann
gleichzeitig abschreckend und
eine kurze Einführung in exponentielles
Wachstum.
Was vielleicht
witzig wäre.
Ich glaube,
die Wahrscheinlichkeit der Kontrolle mehrfach
ist wahrscheinlich gering.
Ja gut, das ist
auch ein lösbares Problem.
Gerade in Deutschland ist das ja ein lösbares
Problem.
Ob ihr das jetzt als Win oder
als Fail einsortiert, das überlasse ich jetzt
mal euch.
Ja, insgesamt tendiert die ganze Situation so ein bisschen Richtung Fail, muss ich sagen
Ach, findest du?
Ja, schon
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-Rail-Problems
Also es geht da erst schaunlich gut, toi toi toi
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, ne, also das
tatsächlich
Man muss ja 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, also bitte Jochen.
Genau, die
hatten jetzt auch so ein Problem,
damit das halt irgendwie, naja gut, die ganzen
Veranstaltungen, die normalerweise dann
Pre-Ticks 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 dieser
Zeit. 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
so ein bisschen experimentieren.
Ja, ich kann dir da, ich als Betreiber des
rasend
erfolgreichen Spielmanns-Keks-Kanals
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 vielleicht noch eine Impfung.
Wie sieht der denn überhaupt aus? Wird der per Schluckimpfung
verabreicht oder wird der gespritzt?
Ne, die werden gespritzt.
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.
mit Nasellspray.
Habt ihr das gelesen?
Das fand ich super cool. Da gab es jetzt
einen Artikel, auch von
einem, der normalerweise sich eher mit Computerkram
beschäftigt, vor DNS oder so.
Oh ja, den habe ich gelesen.
Den hast du gelesen?
Ja, der war saukool.
Der hatte den Impfstoff von BioNTech,
Pfizer, den hat er halt sozusagen
aus so einer Computerperspektive
irgendwie mal
darüber gesprochen,
was das Ding so alles macht.
Und das fand ich sauinteressant.
weil da waren echt einige tolle Tricks
dabei, von denen ich gar nicht wusste, dass man
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, das sind irgendwie
Jochen, korrigier 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 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 Jochen, man hat
gelesen. Ein paar Änderungen
gemacht, ja. Aber also
tatsächlich, was das Ding tut,
ist also einmal RNA ist halt
sozusagen
in Computeranalogie ü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... Da 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-Energien.
Ja, auch Zellen nehmen den ja eigentlich normalerweise
gar nicht an, die nehmen ja gar keine RNA-Affen aus.
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, so quasi von der,
ja, und das, was
dieses Ding macht, ist, dass
Spike-Protein von dem
Virus zu erzeugen.
Und zwar
so ziemlich genau das Ding.
Bis auf auch wieder ein paar kleine Details.
Ja, damit es stabil wird.
Genau, weil normalerweise rollt sich das Ding zusammen,
faltet sich zusammen und dann ist es halt egal.
Also das Virus
entblößt 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
Dehyd drüber oder man macht das irgendwie
heiß, dann ist das halt kein Virus mehr, sondern nur noch
so Teile von einem Virus.
Viruskröme.
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. 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,
und Jochen unterhalten sich über die Programmiersprache Python
und das war ja auch bei diesem Virus hier so, ja,
dass die nach zwei Tagen diese Sequenzen,
die sie da jetzt alle getestet hatten,
hatten. Die haben diese
Virussequenz gekriegt aus China,
das war auch eine 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.
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 3D-Drucker
für RNA.
Kannst du einfach kaufen.
Dann nimmst du diese Folge, die du
aus dem Internet aus einer
zwielichtigen Quelle
kopiert, suchst es rein
und dann drucktest du das Ding in RNA einfach
aus, in so einer
30-Mikrogramm-Dosis.
Gut, ist jetzt auch nicht so einfach zu handeln,
aber dann kann man damit
lustige Sachen machen und das in Muskel spritzen
und dann programmiert das
Zellen. Das ist schon
faszinierend.
und bestimmt können wir irgendwann alle ewig
leben.
Das gibt es übrigens auch als
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 meisten dieser
durch ein Tau.
Durch ein Tau, ja, ja.
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
und das ist ja offenbar
keine RNA. Ja, ist ja offenbar
irgendwas anderes. Ist ja irgendwie
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 Umsozim vielleicht nicht egal sein.
Da sind sehr viele sehr schöne Hacks drin.
Ja, 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
zivilisiert, sondern das geht nur
mit Technik und so. Das heißt,
ja, es kann,
diesen Trick kann das Virus
sich dem Impfstoff nicht abgucken. Also es ist schon
toll, ja.
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
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, ich weiß nicht, wann war das, vor ein paar Tagen über Twitter, oh mein Gott.
Ich frage mich immer, das hört man dann auch so von Leuten, impfen, ja oder nein,
oder gibt es irgendwie Allergien?
Ich frage mich immer, wo denn solche Informationen herkommen.
Wenn die dann Autisten...
und
jetzt auf Twitter
habe ich dann tatsächlich mal eine von den Quellen
für so einen Quatsch irgendwie
gesehen, das war halt diese
Hahnemann-Gesellschaft, also die Homöopathie-Leute
hatten auf ihrer Webseite eine ganze Reihe von
irgendwie echt
Hahnemüchen-Behauptungen
unter anderem eben auch, dass das
Impfstoffallergien auslösen würde, was totaler Quatsch ist
also 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
und ja, haben dann nochmal Leute reingeguckt, ja, das war aber die Kontrollgruppe, die hatten das, die hatten 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, das ist ja noch gefährlicher.
Magie.
Genau, gerade zum Beispiel.
Magie.
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
Art, wie man da drumherum kommt, ist,
indem er seinen Mund und seine Nase bedeckt
und
die Sorte ist das halt
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, jetzt
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 zu kommen.
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, okay.
Aber das ist ja alles schon
eine sehr schöne Überleitung. Lass uns doch mal über Sachen,
Themen sprechen, die wir so
wieder erfahren sind.
Ich möchte endlich über mich sprechen.
Nein, nicht.
Wie kannst du dich in der Jugend
identifizieren?
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
sehr früh, also viel mehr lief halt
auf Oracle quasi, weiß nicht ob das noch immer noch so ist
aber vor langer Zeit war das so
Das war bei den 90ern noch, da gab es mal so Oracle-Kampf
Na, in den Nullern auch noch
Ja, bei mir war das auch in den Nullern
Ja, bei uns war
im Wesentlichen die Begründung, dass der Hersteller
das Produkt, das wir vertrieben haben
das vorgegeben hat, weil andere Datenbanken
sind nicht schnell genug
Was damals schon eine sehr interessante
Auffassung
Behauptung war
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 sind 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-Datenbanken verwenden und
es gibt ja dieses schöne
Statement delete from für
SQL-Datenbanken. Habt ihr sicherlich auch schon
mal verwendet. Delete star from
du sagst.
Nee, delete from heißt der Befehl einfach nur, weil
du da erst dann angibst
mit einer where-Klausel, was alles gelöscht werden
soll. Also delete
from, 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
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 DeleteFrom-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 keine Namen nennen, ich will jetzt auch niemanden hier persönlich an den Pranger stellen.
DeleteFrom.
Wie wäre das mit der Barriere?
Nur DeleteFrom.
Tabellenname
dann löscht es einfach alle Zeilen
aus einer Tabelle aus.
Und das ist ja sehr
ungünstig, wenn das mal passiert.
Je nachdem.
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
nicht mit der Testdatenbank verbunden ist,
sondern mit der Produktivdatenbank.
Aber zum Glück, und das ist was sehr Interessantes,
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 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 Undo-Log.
und 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 Zahlen 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 der Tabelle
und zwar schnell, ohne die
ins Undo Log
zu tun. Und ihr könnt
euch denken, wozu das geführt hat
und zwar Delete From.
Jeder Entwickler in der Abteilung
war dieses Delete From zu langsam.
Wir sind einfach alle
auf Truncate Table
übergegangen, was dann
so den ganzen Sinn dieses Undo-Logs
ein kleines bisschen kaputt gemacht hat, als der Erste halt
tatsächlich in der Produktionsdatenbank
ein Truncate Table gemacht hat.
Nicht nur ein Delete-From, sondern
ein Truncate Table und einfach mal
eine von den Projektdaten
Tabellen gewischt hat.
Das war ein
nicht so cooler Tag.
Ja, ich würde sagen,
dann haben wir 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 auch die Dreckpaste recht 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ön professionelle Zeiten damals.
Da hat wohl einer keine Backups gehabt.
Ja, wir hatten ja ein 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 der Deploy-Chain.
Und dann vergessen, das dann wieder aufzuspielen.
Du hast es gleich direkt automatisiert gemacht.
Das ist doch, würde ich sagen,
sehr modern. Du hast nicht nur die Datenbank gelöscht,
sondern du hast sie gleich automatisiert
und mit Tests gelöscht.
Ja.
Die hätte man wahrscheinlich noch wieder herstellen können.
War nicht so schlimm,
eigentlich, weil das Projekt liegt noch nicht so lange.
Ja, so
einen ähnlichen Fall habe ich mal,
habe ich auch mal produziert,
allerdings, was war eher so ein,
Datenbanken kann man natürlich löschen,
das ist eine Möglichkeit, 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, DNS ist 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 das falsche
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, naja, das ist halt
so, Computer, manchmal funktionieren Dinge nicht so
richtig. Ja, das überprüft
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
hmm, 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 Cache-Zeiten
beim Hochfahren auch wieder.
Aber da hast du auch keine halben Sachen gemacht, wenn du direkt den Primary
DN ist.
Ja, das war so bitter,
dass dann auch tatsächlich jemand hingegangen ist.
Also da musste
tatsächlich jemand 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.
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,
aber es war eine Zeit lang, bis es aufgefallen ist
und dann hat es nochmal ein paar Stunden gedauert, bis es wieder gefixt war
und ja. 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 so, damals war das alles noch so.
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
Ja, ich glaube, das passiert auch allen
irgendwann früher oder später mal, das ist halt
ja
Die Feuertaufe
Oder auch schön 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 müssen wir immer offside 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 ja ein kleiner Exkurs
Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die Die
von Elon Musk.
Welche reiche Raketenfirma?
Ja, Elon Musk war das.
Und Virgin Galactic,
der dritte reiche Mann,
der dritte verrückte Milliardär,
hat doch auch eine Raketenfirma.
Hat ja auch Raketenfirma inzwischen.
Ich dachte, der war noch was mit Flugzeug.
Und er ist noch irgendwer,
der Westfair Branson,
ist da hochgeflogen.
Das Ding heißt irgendwie nicht Spaceship One,
sondern Starship.
Naja, wie auch immer
Der Ramespace 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 wieder
verwendbar sein und das segelt sozusagen irgendwie wieder runter
und das 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 halt diesen tollen Talk
Hat auch einwandfrei funktioniert
Da gibt es halt ein paar tolle Talks, wie man Raumschiffe
baut und wie man Raumschiffe fliegt
Die gab es haben wir zwischendurch
In Kerbel oder in echt?
Ja, in echt, in echt
Ja, es gibt ja auch ganz viele
so Amateurfirmen, die das
versuchen
und dann machen
Kopenhagen 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.
Ja, der Urs hat das gesagt,
wie man das macht. Das ist sehr interessant.
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. Also 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 ja endlich mal seine Steam-Bibliothek abarbeiten
Ja, ja
Noch so ein Wenn übrigens oder ein Fail
Ich weiß nicht, Cyberpunk, 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
und Jochen unterhalten sich über die Programmiersprache Python
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²
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².
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 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
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
Lookup-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 nach 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.
Auch ein galaktischer Algorithmus nicht anzuwenden.
Das war ein Paper von Klugmann,
falls ihr das wisst, 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.
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
erstmal den Staub weg.
Das lag nämlich
schon eine ganze Weile
drin und ich mach das jetzt mal auf und es sind
tatsächlich 1, 2, 3, 4, 5, 6, 7, ja 7,5 Seiten beschrieben. Das hier ist die 8. 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 Seite 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 auch als besondere Rezeption.
Aber tatsächlich in der Praxis hat man oft dickere Rezeptbücher als Algorithmenbücher.
Ja, das ist mir auch schon aufgefallen.
Ja, leider.
Ich weiß auch nicht, es hilft auch nicht, 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,
oder auf dem Level
nicht so schwer, aber was mir ganz oft
passiert ist, dass ich irgendein Problem
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 Algorithmus man eigentlich nehmen sollte,
sondern ich fange dann an, darüber selber
nachzudenken, das ist halt auch nicht
so optimal und sehr langsame
Algorithmen...
Oder sag mal so,
es ist irgendwie
also ich teilweise
denke ich sie dann halt wieder,
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, aber
Du musst mal einen davon vorstellen, Johannes, der einen vielleicht so 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 Bloomfilters. Wisst ihr, was ein Bloomfilter ist?
Nein.
Ja, voll geil.
Das ist eine sehr spezifische
probabilistische Datenstruktur, die
wenn man sie braucht, absolut
genial ist und absolut
undenkbar, dass es überhaupt funktionieren kann
aber wenn man sie
nicht braucht, ist es 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.
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.
Das ist 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 Flumpilter 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,
sind etwa 100 KB.
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 sind ja 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
alle in euer Algorithmenbuch direkt rein.
Wie schreibt man den denn? Den Blumenfilter mit
UH, mit OO? So wie Orlando.
Okay.
und BLOM-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.
Das war fast das.
Ein passgebrauchter
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
Ja, wenn ich es so überlege, also ich meine
das hatte ich ja 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.
Oder man war eigentlich einfach so genial,
es hatte einfach jemand anders von, diese Idee,
aber völlig unabhängig.
Das ist eine Annahme, die wäre mir sehr sympathisch.
Das Problem dabei ist, dass halt
so lange dabei nie irgendwas ausfällt.
Was tatsächlich neu ist,
spricht das so ein bisschen gegen die Hypothese,
aber tatsächlich, Werner Feynman hat das ja auch
irgendwie, ich weiß nicht,
in welchem Buch er das geschrieben hat, aber
er schrieb da ja 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
das ist doch die Feinmann Problemlösungsmethode
kennt ihr die?
die hat drei Schritte, der erste Schritt Problem hinschreiben
zweiter Schritt
nachdenken
dritter Schritt Lösung hinschreiben
da gibt es dann auch die
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 erzähle mich da eher zu dir
Ja, aber tatsächlich, wenn ich so überlege
was habe ich denn noch so an Dingen mal gebraucht
wo es sich 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 Onlineshop hat
wenn man jetzt
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
wie zum Beispiel
Naja, ein Shop kann
deswegen offline sein,
weil er ist ü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
kaputt. Also sagen wir 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.
und
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 ok, ist jetzt wieder online, aber
wenn dann irgendwie, keine Ahnung, eben
vor Gericht, dann will man nicht wieder in den online Zustand
zurück wechseln, sonst hat man ein zweites Gerichtsverfahren
das ist ja auch doof und
das wird komplizierter, als man
sich das so vorstellt und wir
hatten dann halt irgendwie
wir hatten das halt zuerst in Code alles
und es 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
und da haben sie 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.
Und das ist uns aber nie gelungen oder nicht so richtig und dann als nicht Automaten konnten wir uns irgendwie hinschreiben aber als deterministischen nicht Das kann auch nicht sein dass das so schwierig ist und Jochen unterhalten sich die Programmiersprache Python
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.
Die Konsequenz davon ist, ist die Frage P gleich
NP oder nicht. Ja, so weit sind wir dann nicht gekommen.
da war dann halt die 8 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.
Wie schnell ein Algorithmus
sich entwickelt, wenn man ihn mehrmals macht, oder?
Ne, genau, wie schnell
sich ein Algorithmus, wie schnell
die Laufzeit sich entwickelt, wenn sich
die Problemgröße verändert.
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
mein Problem 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 1000 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 Schielgarten.
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, 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
Kern-Eigenschaften 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.
Das müsst ihr 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.
Pfadberechnung, Volltextsuche prinzipiell.
Solche Sachen
sind alle in polynomialer Laufzeit
berechnbar. 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 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 den 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 hoch n 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
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
es gibt da so probabilistische Sachen
und es gibt Techniken wo das eben auf
n hoch 1,36
2 hoch
also 1,36 hoch n runterziehen kannst
und es ist nicht mehr 2 hoch n und das ist beeindruckend
ja 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, ist P gleich NP?
Jetzt ist es so, da kommt noch dazu, diese Probleme, die man gefunden hat,
die nennt man NP, 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?
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 ein Mathematikpreis,
der da ausgeschrieben ist.
Das 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, also das wichtigste ungelöste Problem.
Ja, also diese Komplexitätstheorie ist halt schon so.
Also ich glaube, der Grund, warum das jetzt NP heißt, 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
vor den Komplexitätsklassen, es gibt halt
NPH, das ist NP-vollständig und dann gibt es auch noch
genau, X-Time drumrum
und PSPACE und weißer. Ja, da gibt es noch ganz viele
und diese ganzen Space-Klassen gibt es ja auch alle noch.
PSPACE und NPACE.
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,
jede nicht-deterministisch-polynomierte
Turing-Maschine kannst du trivialerweise
in eine deterministische
Turing-Maschine überführen, die halt aber
zwei hochend 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 der bestimmte Dinge
und in der 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 der
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 der 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.
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
Licht-Tetaminist-Tutoring-Maschine, aber
so ein bisschen, was geht dann in die Richtung?
Und jetzt bewege ich mich natürlich
außerhalb von dem, was 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 leben sollte. Das macht RSA kaputt.
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 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-Kyphografie gesetzt oder sowas, aber keiner macht, weil das kann doch 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 Empfehlung geändert, ohne zu begründen warum. Also es gibt schon so Hinweise, dass man dringend auf Postquanten-Algorithmen wechseln sollte.
Okay, ja, jedenfalls die Komplexität.
In 50 bis 100 Jahren wissen wir das dann auch, ob die mehr wussten als wir.
Ja, also diese
Komplexitätsklasse wird glaube ich dann MPI genannt,
so NP Intermediate oder so und da sind halt
so ein paar Dinger drin, leider, ja,
auch so ein paar wichtige.
Aber tatsächlich ist es immer noch,
also, ach genau, und diese Klasse gibt es überhaupt
nur dann, wenn P ungleich NP gilt.
Wenn P gleich NP gilt, ist das natürlich sowieso Quatsch.
Aber, ja, da 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.
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
Mathematiker, muss ich sagen, ein Beweis ist immer besser.
Ja,
naja.
Es ist ja nicht nur so, ja, es ist ja
nicht nur, 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.
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 ausgedrückt.
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
ganz interessant, dann denke ich mir so, oh
das wird aber jetzt von einer Totenlösung schon ein bisschen wild
und dann irgendwann denke ich mir so,
dann fangen die Leute an, davon zu reden,
so, ah ja gut, okay, mit normaler Mathematik
kommen wir jetzt hier, jetzt müssen wir eine neue Mathematik,
irgendwie brauchen wir um dabei,
okay, später lesen,
Keine Schlafflektüre ordnen.
Ja, als ich
ich hatte eine Mathematikstudie
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
und Jochen unterhalten sich über die Programmiersprache Python
als notwendig.
Hatte
logarithmische Komplexität?
Es gibt auch
Probleme mit logarithmischer Komplexität,
aber 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,
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 eines Wertes in den Dictionary mit einem Schlüssel.
fügen in den Dictionary mit
eine Milliarde Schlüssel
oder 10 Milliarden Schlüssel.
Ist schon eine überraschende Sache,
dass es
sowas gibt und dass es sowas
trivial für uns zugänglich gibt.
Aber du wolltest auch die Historie hinaus,
in der du mit jemandem
die Nichtbeweisbarkeit...
Ja, das ist im Wesentlichen die Story,
dass halt jemand
versucht hat, mich davon zu überzeugen, dass es die
universelle Mathematik gibt.
und 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, dass...
Wir beweisen, das war irgendwie, keine Ahnung,
irgendwie 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.
Das war jetzt ein bisschen zu weit weg für den Podcast, du musst 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 Fermats letztes Theorem als Teilmenge, mehr oder weniger.
Also er hat mehr bewiesen als Fermats 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 so
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 im Leben
Tja
Je nachdem wann wir geimpft werden
War das nicht ein schöner Bogen?
Ja, ja, ja
Ja, aber
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,
diese Art Datenstruktur
ist etwas, was man einfach ständig braucht.
Und das ist total super.
Also wer nur Dicts hat, nur Listen
und nur Skalare, da kommt man damit schon sehr,
sehr weit. Also wenn man das richtig
verstanden hat
und richtig verwendet,
dann ist man da 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 ist, schon drin, so, fertig
Ja
Ja, und das ist halt total nett, also das würde ich
sagen, ist ein großer Win, das ist halt bei
ich meine, bei diversen
unterschiedlichen Programmiersprachen ist das halt sozusagen
das Basiskonzept, das eingebaut zu haben und dann damit
schnell zum Ziel zu kommen, ne, 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 on Rails ist auch eine gültige
Programmiersprachenlösung,
wann hängen bleiben kann.
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, ja.
Das ist verrückt.
Aber genau,
also
ja,
das ist toll, dass es den allen gemeinsam
und das funktioniert wirklich gut.
Hast du auch konkrete Kriegsgeschichten, Jochen?
Also ich meine, wir haben alle konkrete Geschichten, wie wir schon mal
eine Datenbank gelöscht haben und wie wir schon mal
Ein Win, ja, so
ein Win. So ein konkreten 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 unerwartete
Vorteile gehabt. Und zwar
das Array-Modul. Ich weiß nicht, ob euch das was sagt.
Da habe ich tatsächlich heute
darü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, ich mache ja schon lange
Text-Klassifikationsgeschichten und so Machine Learning mit Texten.
Ganz am Anfang gab es da noch keine Bibliotheken, da haben wir das
alles selber gemacht und irgendwie unsere
Brühe, ja,
ohne Spur,
bergauf durch den Schnee, genau.
Aber inzwischen gibt es ja
Cyclet Learn und
das habe ich
auch verwendet, das habe ich vor allen Dingen so
Kegel-Competitions verwendet,
also so Machine Learning-Wettbewerbs-Dinger
und
aber ich hatte halt nicht so viel
Hauptspeicher und das Ding
ist relativ verschwenderisch mit dem Hauptspeicher
umgegangen, weil
weil da wurde halt, also du zerlegst halt Texte in, ja, also 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
Zellgeschichten, also der heißt das Ding halt
CountVectorizer oder Vectorizer allgemein
für diesen Text irgendwie
in so ein Vector 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
einfach, weil du fügst halt
einfach 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
in...
Integer sind groß.
Und das ist halt...
Wir haben nochmal ein bisschen Overhead, also
es ist deutlich
mehr, als du brauchen würdest, wenn du jetzt einfach nur den
nackten Zahlenwert als
Byte
4-Byte-Integer
oder so, so 32-Bit
oder 64-Bit, wie auch immer.
Ja, und
bei mir ist der Hauptspeicher
halt tatsächlich bei
so einer Competition halt ausgegangen.
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 an 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 dann, dass das geht,
habe ich irgendwann halt in dieser, glaube ich,
Predict Close Open Questions
in Stack Overflow
habe ich das irgendwie gesehen und dann habe ich irgendwann mal
ein Pull-Request rausgemacht, das war dann
aber ein bisschen später, irgendwann 2015
oder so. Das ist auch tatsächlich durchgegangen
und seitdem
braucht halt
TF-EDF-Vectorizer und so nur noch ein Drittel Hauptspeicher
und man kann ja damit größere...
Und das ist auch
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.
Einfach ein anderer Konstruktor, den du 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 einen kleinen Teil der Welt, aber
ja, es ist ein witziges, aber
kann man durchaus als Wien.
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-Auwert.
Ja, es muss halt alles vom gleichen Typ sein, was da drin ist.
Die Größe muss bekannt sein.
Ja, genau, das heißt, man muss sich selber darum kümmern, dass man das irgendwie, also die vergrößern sich irgendwie selber, wobei man 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, das ist witzig Ich habe tatsächlich auch eine Geschichte, die ist aber sozusagen das Gegenteil von deiner Geschichte
und ich glaube, ganz super passt zu dieser Frage
mit den Listen, die Frage mit den Dicts,
weil wir hatten ja kurz darüber gesprochen,
dass Dicts so schnell gehen und
wenn Listen jetzt so cool sind über Array,
wie gehen denn Dicts so schnell?
Vielleicht da nochmal kurz, also das ist ja irgendwie implementiert,
aber wie funktioniert denn das?
Es gibt ja ein Table
über dieses Dict 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.
und das ist auch, 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,
ein 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 und und und und und und und und und und und und und und und und und und und und und und und und und und und und und und und und
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.
Eins.
Und dann kommt der Jochen und dann schreibe ich mir Jochens
Namen in meine Liste und schreibt mir halt in meine Liste rein, Jochen, 17.
Telefonnummer von Jochen ist 17. Mist, da 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 es 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. Und erst 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 diese Datenstruktur dann w die Insertion also das Einf eines Eintrags O von 1 weil es immer gleich lang dauert ein hinten hinschreiben Aber das Heraussuchen w O von N und das ist schlecht weil m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m
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, wo man so einen SHA-1-Hash dann macht und dann kommt eben raus, die Datei hat die Prüfsumme A17, A12, A21, A16, also irgendwas.
und Jochen unterhalten sich über die Programmiersprache Python
und Jochen unterhalten sich über die Programmiersprache Python
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.
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. 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.
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 an Stelle
10.
Das Hashen 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 von 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 diese Hash vermischt die Sachen auf eine einheitliche Art und Weise,
sodass man eine einheitliche Füllung erreicht und das garantiert uns dann eben diese
sogenannte amortisierte Laufzeit von ORF1 im Schnitt
über lange Zeit dauert jeder Zugriff auf den Dickschneider gleich lang.
Ja, das ist das Einzige, was man halt da tatsächlich machen muss,
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
ein 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 sehr
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
Tri-------------
weil du noch ein paar
Nanosekunden rausholen kannst und weil das
eindeutig zur Hotsection 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 es 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 Festzugewiesen,
da gibt es kein Stack und nichts, 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 die Python-Dict-Implementation ist halt auch so eine der schnellsten Hash-Implementationen, die es überhaupt gibt.
Eben weil sie halt auch so wichtig ist.
Und das ist auch manchmal dann überraschend, wenn man in anderen Sprachen unterwegs ist oder mit Leuten sich unterhält.
jeden anderen. Also 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 unik 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
halt 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 Library?
Boost heißt die. Boost gab es, genau.
Und hab das halt so probiert, hab das gemanagt,
hab irgendwas falsch gemacht,
irgendwie kann ja nicht sein. War deutlich langsamer
als die beiden Varianten.
Und hab dann also auf
Stack Overflow so naiv nachgefragt,
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 da hieß es so, ja, achso, 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
so eine binäre Suche daraus und dann
das, klar, deswegen dauert es dann natürlich schon ein bisschen länger.
So, okay, äh, Moment,
aber das ist doch eine Dateninstruktion, die man dauernd verwendet,
ja, wie, was? Und, äh,
ja, das geht auch schneller, da musst du nur,
ja, da musst du nur dann irgendwie, keine Ahnung,
hier von, äh, von, ähm,
SGI gibt es da irgendwie Header,
die du irgendwie reinnehmen kannst und dann musst du nur sagen,
und dann geht es schneller.
Vielleicht auch nicht.
Mal gucken, vielleicht kann man das auch irgendwie anders machen.
Python nennen.
Aber das ist
ja,
da ist Python
wirklich stark.
Ja, aber es ist halt
auch einfach wichtig. Es gibt so
Späße, wo man jede Programmiersprache
beschreibt als eine
Kerneigenschaft.
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 einfach alles ein Dictionary und
wenn man irgendein Problem mit Dictionaries lösen kann, dann
ist das sehr gut.
Um aber nochmal
und der
und Jochen unterhalten sich über die Programmiersprache Python
noch nicht durch war, dann hat sich halt der Preis verändert
oder das Material oder was weiß ich.
Wir durften einfach nichts anzeigen, was älter ist als 5 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
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 5 Minuten da sein dürften,
hatten die eine Expiry von 5 Minuten
und wir haben einfach Background-Jobs laufen lassen,
die alle 5 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
und die haben in den Cache gepasst, in unseren Memcached.
Und dann ist 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 refresht haben.
Egal, ob wir Traffic hatten oder nicht, es war einfach dieser Cronjob,
der das gemacht hat, lief einfach die ganze Zeit.
Alle 5 Minuten hat er alle Produkte einmal durchgepingt
Ja
Ja, das erinnert mich
Das ist auch etwas
Man unterschätzt oft, wie viele Hauptspeicher
man tatsächlich zur Verfügung hat
und was man da mit all den tollen Dingen alles so tun kann
Dass man oft einfach Sachen brutal
erschlagen kann mit irgendwie Hauptspeicher
oder
Genau, das hat ja 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 Filesysteme, vor allen Dingen
wenn man Filesysteme benutzt
und da rein
daraus liest und schreibt gleichzeitig und zwar von vielen
Rechnern aus und dann so
verteilte Filesysteme
du hast halt
eigentlich nur ein Filesystem
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
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
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 die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die die
und es dauert dann irgendwie so zwei Wochen von
irgendwie, es kommt ein neues Bild rein
und es ist in den richtigen Größen...
Man hat ja keine Priorisierung gehabt für Jochen.
Ja, das hätte man dann natürlich machen können.
Man hat sich dann natürlich so Dinge überlegt,
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, so kopiert es dann hinterher
Blattschmerz jemand darüber oder...
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 und 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,
und Jochen unterhalten sich über die Programmiersprache Python
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, Whitelisten, 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 dann hat man am Ende mehr Features
und eine einfache Implementierung und
es ist schneller.
Ja, also
ich habe so das Gefühl,
bei diesem zweiten Schritt, bei dieser Feynman-Lösung,
dieser zweite Schritt, da
ist enormes Potenzial.
Ja, aber das ist doch, als Entwickler
macht man sich das doch oft, oder? Also Stunden des
Machens ersparen Minuten des Nachdenkens.
und Jochen unterhalten sich über die Programmiersprache Python
gebraucht hast, dann hast du nur noch eine.
Und ich bin dann halt irgendwann mal hier zu einem Supermarkt gegangen
und habe einfach 10 solcher Fläschchen gekauft. Das hat einen
überschaubaren Geldbetrag gekostet. Die kosten glaube ich 2 Euro Stück oder so.
Oder 2,50 Euro. Es ist wirklich egal.
Und dann kannst du halt in einer Nacht 5 Fläschchen verbrauchen oder 6
oder 7 oder 8 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.
Viel hilft.
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 hat das,
ja, und das hat dann auch direkt zu mehr
Schlafen geführt. Wenn du weniger
Verwaltungsaufwand hast, ist...
Ja, das sind Sachen,
bei so endlichen Ressourcen.
Ja, aber
diese Zahl, die man
irgendwann mal, 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.
Die Probleme kommen ja tatsächlich
erst immer dann wirklich
zum Tragen, wenn es halt diese Restriktionen gibt,
dass du halt dann
Konkurrenz hast für
irgendwelche
Prozesse oder sowas, dann wird es erst
Ja klar.
Wenn du an die Grenzen kommst. Aber bis du dahin kommst,
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, ja.
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 arbiträr ist.
Nicht gleich kann klotzen, bigger is better
und so weiter.
Genau. Und wenn man
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 es
Ich muss allerdings dazu sagen, als ich
die 10 Flächen gekauft hab, hab ich
leider die falschen gekauft, also ich musste dann nochmal hin
und die alle zurückgeben und neue
kaufen, also es ist gemischt.
Ja, gemischt. 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.
Dieses Jahr war
eine Spur zu viel Fail, ehrlich gesagt.
Für meinen Geschmack, so in der
Gesamtsituation.
Aber 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 das ist, ab dann denke ich jetzt, ab jetzt ist es halt jetzt normal.
Also es gab auch wahrscheinlich ein paar coole Sachen auch irgendwie, also ich weiß nicht.
Ja?
Ja, ja.
Also so ein paar Sachen sind vielleicht gar nicht so schlecht, dass das jetzt mal 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, und es gibt noch so ein paar andere gute Sachen.
also so ein paar Menschen sind nicht wieder
gewählt worden oder so, das gab es ja auch und
noch ist er
nicht weg.
Ich habe eben 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, die sie
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
gab 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 hätte gedacht so, oh mein Gott, das gibt eine Katastrophe.
Das dauert Jahre.
Das dauert Jahre und das ist alles ganz schrecklich.
Und 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 das ging auch relativ
schnell und es hat zwar auch böse gefällt
aber zum Beispiel die Schulen oder sowas
ist ja auch ein Riesenproblem, aber das wird halt einfach
jetzt auch 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 jede Stunde ist ein Peak
und das fällt dann bis zur nächsten Stunde wieder so ab.
Sehr schön.
Oder zur nächsten vollen Stunde.
und in der Mittagspause
sieht man eben, dass dieser Peak nicht da ist, weil um
12 eben keine Meetings anfangen und
es ist sehr, sehr schön.
Ja, ja, ja.
Ja, auch noch so eine Sache,
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, aber so diese Notwendigkeit.
Ja, es gab
ein paar schöne Sachen auch dieses Jahr.
Hoffentlich auch bei euch.
Ja, ja.
Selbstverständlich. Corona-Kekse, ich meine.
Ja, hat man das eigentlich gesehen? Ich habe die ja auch dann verlinkt, ob man das...
Ja, natürlich.
Also da ist so wenig Traffic drauf, dass man nicht sieht, dass es individuelle Ereignisse gibt, aber vielleicht, wir können uns das jetzt an alle Hörer als Vorsatz nehmen, dass ihr mal einen Traffic-Spike in meine...
Du meinst, es ist noch jemand dabei, jetzt um diese Zeit?
bringt. Ja, selbstverständlich.
Wir haben noch nicht mal die zwei Stunden überschritten.
Ja, okay.
Ja, was ich jetzt, ich habe jetzt,
ich habe
in letzter Zeit, ich habe ein bisschen Zeit
dann irgendwie auch auf Statistiken geguckt
und was ich schon überraschend fand, jetzt auch gerade
zu Weihnachten, da 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
das so, habt ihr eigentlich
ehrlich gesagt, also ich meine,
naja, also.
zu tun.
Was hast du denn Weihnachten gemacht?
Ja, aber...
Also ich habe alle Episoden vom
Python-Podcast nachgehört gleichzeitig.
Selbstverständlich.
Hatte ich ja nicht mal Zeit dafür.
Ich weiß noch, woher die 25-Klicks herkommen.
26 waren es ja,
weil es waren ja 26 Episoden.
Die eine Episode hast du schon gehört.
Ja, die erste, die Einführung.
Nee, aber das ist doch immer, es gibt doch immer...
und Jochen unterhalten sich über die Programmiersprache Python
war zu Hause Weihnachten.
Ja, genau.
Aber das ist doch nicht unentspannt.
Zum Teil sogar
viel entspannter. Also ich fand es viel entspannter.
Wir hatten längst nicht so viel hin und her gefahren
und längst nicht so viel hin und her transportieren.
Gut, klar, die Kinder sind die ganze Zeit
da und unbeschäftigt, aber
mit genügend großen Lego-Packungen
kriegt man auch nicht das Problem.
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 schämend 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,
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 ja sicherlich nicht der Einzige,
der Tränen neben Geschenken
vergessen hat.
Eine gute Idee, aber das Problem
ist irgendwie die Marge.
Das ist die Büschen.
Ich will es auch nicht machen.
Du verkaufst eine Batterie für 5 Euro
Stück und Weihnachten zahlen die Leute.
Oder wenn die Drohne weiterfliegen muss, dann muss
die Drohne sich nur selber noch eine Batterie
reinstecken.
Die hat sehr große Reichweite,
diese Drohne, theoretisch gesehen.
und Jochen unterhalten sich über die Programmiersprache Python
und
Das wird schon...
Tja, wollen wir noch irgendwelche Dinge
picken oder sowas?
Standardlib?
Oder irgendein Modul aus dem Standardlib besprechen?
Oh, ich weiß eins, ich weiß eins.
Array.Array.
Ich wollte auch dann Array sagen.
Du bist gemein, ich habe mir meine Picke gekauft.
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 in Jahrhunderts.
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
Vorname 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
zu zerlegen.
Also man
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 Structmodul
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 aber wenn man es braucht ist es voll gut also ich habe es tats auch nie so wirklich super h aber wir haben es auch einmal an einer Stelle gebraucht was man
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, also in unserem Fall war das halt
das war halt so eine Bibliothek
zum Lösen von so 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 Textfiles, wo das dann mit
Doppelpunkt getrennt ist und Kommas und so.
Aber das ist halt alles Mist, weil Textfiles
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, 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.
Dann hast du gerade gepasst, bitteschön, mach damit mal irgendwas.
Und das hat einfach super funktioniert.
Ja, auch für so Netzwerksachen ist es super nützlich, weil man eben oft diese Sachen, 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.
und
Ja, also einfach Python Bycode anschauen. Das ist generell eine sehr interessante Sache. 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.
Also ich jedenfalls nicht.
Und wir sind auch offensichtlich alle zu faul, um uns herzubereiten.
zu machen.
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 das muss so genau sein.
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.
Das Call Me, ruft sich an,
hört mir zu
und
morgens mittags abends nachts und man immer wieder einschalten will Hey ich wollte auch noch was picken Du darfst was picken Ja Das hast du eben Aber was habe ich denn gepickt Du hast Array gepickt Ja genau Ach so okay 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, das hört sich nicht was für dich an.
Bibliothek,
das hört sich an wie was für Zahlenernstich.
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
die Erstellung von Klassen
einfacher zu machen
und wie so Objekte
zu serialisieren, deserialisieren,
das auch alles so ein bisschen simpler
hinzukriegen.
Weil es gibt halt so bestimmte Sachen, die braucht man halt
ständig und bestimmte
Methoden wären halt auch nett,
wenn die einfach so da wären. Aber das alles selber
hinzuschreiben ist halt ein Haufen Arbeit.
Also ich sage jetzt mal so,
die anderen Geschichten, die in die Richtung gehen, ist so
und Atteres, das müssen wir uns auch nochmal mit Leuten teilen, die sich damit auskennen.
Und Data Classes.
Und Data Classes, genau.
Das ist halt in die gleiche, also das ist auch in der Standardbibliothek, das ist inspiriert von Atteres, 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.
und Python-Tick macht das Ganze nochmal so, da hast du nur .dict und du hast halt auch einen ORM-Mode, wo du Sachen direkt aus dem Datenbank-Result direkt in Objekte packen kannst.
Und das Ding macht dann halt Überprüfungen, ob das jetzt korrekt, ob die ganzen Typen korrekt sind oder so, halt von selber.
Du hast halt so, ist es 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 schon sehr sch 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,
hier von der Python
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.
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
total...
Auf der Pydentic-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 erst mal mit der
Pattern, mit dem Gang of Four Buch, genau.
Ja, 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,
also so 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.
Cool.
Ja,
Dann sind wir diesmal für heute am Ende dieses Jahres.
Auch mittlerweile.
Und ja, also hört uns immer, wo ihr uns auch immer hört.
Und so wird uns gewogen.
Und habt Spaß und müsst 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.
Ja, vielen Dank Johannes, dass du wieder da warst.
Ja, schön, dass ich dabei sein durfte.
Ja, wir hören uns.
und bis zum nächsten Mal.
Bis zum nächsten Mal. Alles klar. Ciao.
Tschüss.