Transcript: Wins and Fails

· Back to episode

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.