Transcript: PP03 - Weihnachtsfolge
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, diesmal in der Weihnachtsepisode.
Ja, was machen wir hier eigentlich? Wir sind diesmal bei Dominik unterm Dach.
Ja, ich bin der Dominik und dabei ist natürlich wieder Jochen. Hallo Jochen.
Ja, hallo, ich bin Jochen, genau. Und ja, das ist irgendwie eine sehr schöne...
Das sieht ein bisschen aus wie eine Raumschiffzentrale, ehrlich gesagt.
Eine ganze Menge Monitore und Elektronikdinge. Ich bin da ein wenig neidisch, muss ich sagen.
Oh, das hört sich super an.
Also ich bin auch immer neidisch auf deinen schönen Wintergarten.
Aber probieren wir es mal hier aus.
Mal gucken, wie der Ton ist und wie unsere Hörer den finden.
Ja, das wird auch interessant.
Das ist einfach jetzt ein anderes System, mit dem wir das aufnehmen.
Und genau, wir nehmen wieder auf mit den beiden drahtlosen Mikrofonen.
Letztes Mal hatte ich halt irgendwie so ein Beyerdynamics-Headset verwendet.
Das war eigentlich ziemlich cool und das war auch vor allen Dingen schön,
dass ich dann hören konnte, dass alles immer noch funktioniert
und nicht irgendwie der Audio-Stream plötzlich weg ist.
Aber es ist auch so ein bisschen, es isoliert einen.
Du meinst mit letztes Mal die Django-Folge,
die noch gar nicht ausgestrahlt worden ist?
Ja doch, also wenn wir die jetzt ausstrahlen,
dann ist die schon ausgestrahlt.
Ja? Also wir machen zuerst die Django-Folge
und dann die Weihnachtsfolge.
Denke ich schon, ja.
Ja, das finde ich super, okay.
Also sind wir sogar in der dritten Episode offiziell.
Ja, genau.
Wobei es natürlich auch wieder darauf ankommt,
wann man anfängt zu zählen oder wie man anfängt zu zählen.
Bei Null?
Ja, eigentlich sollte man ja bei Null anfangen, genau.
So, wir sind ja nicht bei Fortran hier.
so bei 1 anfangen zu zählen, ist ja im Grunde
irgendwie falsch, so für mich
als irgendwie computeraffin.
Also es gibt Mathematiker, die auch bei 1 anfangen zu zählen,
aber das ist alles Unsinn.
Ja, aber natürlich
ist jetzt die Frage, wenn wir jetzt bei 0
anfangen zu zählen, haben wir ja trotzdem 3
Episoden drin, denn die Länge des
Arrays wäre ja irgendwie... Ist immer noch 3,
aber wir wären erst bei Nummer 2.
Ja, okay. Aber ich glaube...
Da müssen wir uns nochmal drüber streiten.
Ich glaube, man kann
in der Datenbank, das sind momentan
die tatsächlich, die ID ist der Datenbank, man kann in der
ID, in der Datenbank, die fängt
auch mit 1 an und nicht mit 0.
Naja, ach, alles kaputt.
Alle
tolle Sachen werden dann nur mal kaputt
gemacht. Ja, also genau,
kaputt ist direkt das nächste Stichwort, weil was machen wir
heute? Heute wollen wir tatsächlich
ein bisschen darüber erzählen, was alles nicht so richtig
funktioniert. Vor allem, was der Jochen immer
so im Web macht und was dann da nicht klappt.
So an Pandas mit Request HTML,
Pars mit seinem Respy,
der hat nämlich Hass und
muss weg. Und mit dem Verstärker
von Jochen. Ja, da wollten wir
am Ende ein bisschen euch über
eigene Podcasts erzählen, was es
so für interessante Dinge noch gibt.
Ja, und diesmal so ein bisschen durcheinander. Ist ja die Weihnachtsfolge
ein bisschen Chaos. Genau, wir haben nicht wirklich
was vorbereitet, sondern wir erzählen jetzt
einfach mal so, was so passiert.
Was vielleicht auch ganz interessant sein kann.
Und ich denke, vielleicht ist es sogar am besten einfach mal so,
ja, wie geht es uns eigentlich?
Ja, erst mal für immer, wenn wir Fragen, Anmerkungen,
Kommentare, Lob, Hass, alles mögliche
haben, schreibt an
hallo.python-podcast.de
Und die Links und zusätzlichen Infos
findet ihr in den Shownotes.
Ja, Entschuldigung, ich wollte dich jetzt nicht unterbrechen.
Direkt los. Was machen wir heute?
Wir haben uns nicht richtig vorbereitet.
Ja, wir machen immer so querbeet, alles mögliche.
Genau. Und ja, aber
genau, wie geht's uns?
Wie geht's dir, Jochen?
Ja, besser.
Nachdem wir
irgendwie letzten Monat
bei einem
Ausflug irgendwie in den Taunus
einen Hund in die rechte Hand
gebissen.
Ich dachte immer so ein bisschen, bin ich eher so
der Hundetyp statt Katzentyp, aber
das muss wohl auf Gegenseitigkeit
beruhen und wenn man
von Hunden nicht so gemocht wird, dann
war er erst wenigstens ein süßer Hund.
Nee, nee.
Sogar ein hässlicher Kleiner.
Oder ein hässlicher Großer.
Und das
ist natürlich auch ein bisschen blöd, wenn man die Hand gebissen wird.
Echt, muss das sein?
aber da sind jetzt die Verminderer ab
und das sieht alles super aus
kann alles bewegen
Wie hast du in der Zeit die Maus gesteuert? Mit dem Fuß?
Ne, tatsächlich mit der gleichen Hand
Ich habe keine Maus, ich habe ein Trackpad
Ah, ein Trackpad
Das ist ja fast ganz oldschool, also kein Trackball
ein Pad
Die Idee dabei ist
sozusagen, dass ich
möchte, dass meine
Desktop-Arbeitsumgebung
möglichst ähnlich ist wie meine Laptop-Arbeitsumgebung
und da hat man ja, auf dem Laptop hat man ja meistens auch
ein Trackpad oder also in meinem Laptop
habe ich ein Trackpad. Oder man nimmt sich eine Maus
mit, ja.
Und dann ist es
ist es halt sozusagen
wenig Umstieg, also man
das ist sozusagen die Idee,
dass man da halt
einen fließenden Übergang hat.
Dass man seine Routinen mitnehmen kann. Genau.
Ich habe auch die gleiche Tastatur, sozusagen die gleiche
Bluetooth-Tastatur am Desktop,
wie die Tastatur, die ich im Laptop habe.
Und das war eigentlich immer, das hat eigentlich immer ganz gut
funktioniert. Ich habe letztens umstellen müssen,
weil, ah,
jetzt sind wir schon mal wieder bei dem,
wie die funktionieren.
Ja.
Weil blöderweise irgendwie die Tastatur
an meinem Laptop nicht mehr so richtig geht, was
ein bekanntes Problem ist. Ich habe so ein
2016er Gurken-MacBook
und da ist die
Tastatur, die funktioniert halt dann irgendwann nicht mehr,
wenn der Krümel sich zwischen
den Tasten und der Mechanik da irgendwie
verhaken. Oh, das ist natürlich nicht so cool. Also guck mal
hier, also dann sowas, ich kann jetzt ein Werbung
machen wir Werbung.
Ich habe eine Cherry-Tastatur
mit so Klicks, die kann man einfach hier
abmachen und dann kann man die saubern.
Und das kann man mit einem
Caps so machen. Das ist ganz cool.
Das sieht auch super aus. Also die leuchtet auch
und dann, genau, hat
verschiedenfarbige Tasten und es sieht sehr robust aus.
Das ist echt gut. Ich habe ganz lange
so eine alte IBM
in
den Kreisen
der Benutzer dieser Tastatur.
ist das Ding auch Hackbrett.
Weil es halt ein sehr kräftiges
Geräusch macht bei der Benutzung.
Das ist tatsächlich auch hier so. Also die Cherry-Klicks, die sind
tatsächlich relativ laut. Also meine Frau beschwert sich, glaube ich,
wenn ich direkt neben ihr...
Genau, sowas habe ich
ganz lange verwendet. Also das ist halt,
das hat eine Metallplatte unten drin, damit kann man wirklich
Leute...
kann man
nicht nur als Waffe im virtuellen
Umfeld verwenden, sondern halt auch ganz
so im Nahkampf bewährt sich das Ding
auch. Und es ist halt nur so
Also das kommt aus einer Zeit, die wurden Anfang der 80er irgendwie hergestellt und da hat noch jemand von Hand, also ich hatte mal ein bisschen Schwierigkeiten, ich konnte die nicht oder ich habe versucht, die nicht zu waschen zu sehr, weil die hatte hinten halt noch so einen Aufkleber drauf, wo jemand von Hand unterschrieben hat, dass die Qualitätskontrolle durch war und so.
Okay, also tolles Teil, aber einmal.
Warum nicht einfach eine Hacke?
Mit Magneten irgendwie die Platte manipulieren, ja, das wäre natürlich eine Idee.
Aber das war dann doch irgendwann zu unpraktisch,
also die Dinger sind auch riesengroß und
ja, also eigentlich mein Wunsch
sozusagen eine möglichst
ähnliche Umgebung auf dem Desktop zu haben
wie auf dem Laptop hat dann dazu geführt, dass ich da einfach
die gleichen Geschichten benutze, aber
bin ich jetzt auch von weg, weil
irgendwie funktioniert nicht mehr richtig
irgendwie meine Laptop-Tastatur
und ja,
blöderweise
kann ich
jetzt auch meinen Laptop nicht einfach so weggeben.
Also
Also der Service hat dir gesagt,
schicken Sie doch das Gerät bitte einfach mal ein.
Dann kommen es in etwa sechs bis acht Wochen
wieder repariert zurück.
Dummerweise, ich benutze es jetzt
aber so für Sachen, mit denen ich mich einfach mal
eine Zeit lang aussetzen kann.
Es wäre schneller gegangen.
Also keine zwei Ersatzgeräte.
Ja, das war dann halt so meine Option.
Da dachte ich dann so, okay,
selbst wenn das halt nur sechs Arbeitstage
oder sowas, aber auch das
ist schon so, dass ich mir dann sage, okay, da kann ich mir eigentlich
auch ein Ersatzgerät kaufen, weil
ja, das ist
und ich hatte auch vor allen Dingen eine Versicherung für den
ich habe also AppleCare für den Rechner
weil ich dachte, genau, ich möchte eigentlich ja nicht
dass mir finanzieller Schaden dadurch entsteht, wenn das Ding mal
irgendwie kaputt geht oder so
hab dann feststellen müssen, nützt alles nichts
ja, die sechs Tage kriege ich nicht weg
ich kriege auch kein Austauschgerät
super, das heißt, nächstes Mal kein AppleCare mehr
ja, also Leute
wir sind übrigens im Peißen-Podcast, in der Weihnachtsfolge
wo wir
heute eigentlich noch einen Grühwein anbieten oder sowas
Ja, genau.
Das habe ich mir tatsächlich mal überlegt,
ob wir das nicht mal machen könnten und
vielleicht irgendwo in eine Bar setzen
oder so.
Und von da aus verkasten.
Weil
man müsste halt blöder...
Ich denke, man müsste die Leute vorher fragen,
weil Tonaufnahmen in der Bar ist ja vielleicht
jetzt nicht so.
Ich glaube, man müsste einfach die Leute vorher
alle anderen rausschmeißen, damit die ganzen Nebengeräusche nicht mehr da sind.
Ja, das wäre auch schwierig. Aber es gibt so ein paar,
wo man eventuell
nicht stört. Also wenn man sich zum Beispiel
in der Skla-Bar, kann man sich vorne draußen hinsetzen.
Da würde man jetzt nicht so stören
und auch keine anderen Gäste aufnehmen.
Ist ja schon klar, dass es gerade geschneit hat, also
vorgestern. Ja.
Gerade wegen dem Draußen-Hinsetzen.
Wir machen ja noch ein paar Folgen.
Wir fallen noch draußen
und fallen mir jede Menge tolle Orte ein.
Ja.
Ja, müssen wir mal gucken. Das stelle ich mir
eigentlich auch ganz interessant vor.
Irgendwie gucken, wie sich
so die Qualität irgendwie über die
Zeit verändert, somit zunehmend
krummeln Pegel.
Ja, also sagen wir tatsächlich Bescheid,
wenn ihr irgendwelche Anregungen, Anmerkungen habt,
wenn die jetzt zu euch kommen sollen oder sowas,
schreibt uns eine E-Mail, die E-Mail habe ich ja schon eben genannt,
findet ihr auch in den Shownotes.
Ja, fangen wir doch an mit Python jetzt,
lieber Jochen. Ja. Was funktioniert
alles nicht? Und du hast gesagt, was machst
du die ganze Zeit und mit Web
irgendwelche Sachen und so.
Mit Web-Kram mache ich momentan viel
und tatsächlich ist es auch nicht so,
es ist halt nur so ein bisschen Python. Also das
Backend ist alles Python.
Aber
ich mache
momentan auch viel auf der Client-Seite
und da halt vor allen Dingen mit
JavaScript, was eigentlich
auch inzwischen ganz gut geht.
Das ist so, also
ich habe immer mal wieder irgendwie bei
JavaScript reingeschaut, ob das jetzt irgendwie inzwischen
okay ist und fand
eigentlich immer furchtbar. Aber so
inzwischen
ist das eigentlich
gar nicht mehr so furchtbar schlimm. Also ich mache jetzt
einen
JavaScript-Dialekt, der nennt sich TypeScript
und mit so einer IDE,
das ist zwar alles nicht so
snappy, schnell,
wie ich das eigentlich gern hätte,
aber es ist eigentlich gut genug, dass man
damit so entwickeln kann, dass
es tatsächlich Spaß macht und man diese
ganzen Hässlichkeiten nicht so wirklich wahrnimmt.
Welche
IDE ist das? WebStorm
verwende ich das. Das ist quasi auch IntelliJ-basiert.
Aha, okay, habe ich auch
ja schon einige Male gehört, ja.
Das ist eigentlich tatsächlich ganz gut.
Und
ja,
das macht eigentlich,
man kann so richtig auf
Teilenseite quasi so programmieren, wie man das halt auf
Serverseite auch gewohnt ist,
mit allem drum und dran.
Aber was,
und vor allen Dingen, also inzwischen sind ja auch
die Browser so gut geworden, also die können halt eine ganze
Menge, man kann ja tolle Sachen machen
und es ist alles nicht mehr so super unterschiedlich,
wie es früher mal war, wo man dann halt irgendwie für jeden
Browser irgendwelche Ausnahmen machen
muss. Es gibt keinen Browser mehr, für den man Ausnahmen machen
muss? Ja, doch, leider schon.
Ah, sehr gut.
Es gibt, ja,
alle Browser sind irgendwie benutzbar. Nein,
es gibt einen Browser, der sich standhaft
wehrt, irgendwie
benutzt werden zu können. Und das ist heutzutage
erstaunlicherweise
Safari.
Safari ist echt so.
Schon wieder Apple. Apple ist das neue Microsoft, oder?
Ein bisschen schon, ja. Also
Safari ist irgendwie so ein bisschen der neue
Internet Explorer. Also den Internet Explorer
gibt es ja jetzt irgendwie nicht mehr so richtig.
Edge ist jetzt Chromium-Engine?
Edge war eigentlich gar nicht
so schlecht. Edge hatte, glaube ich, eine eigene Engine.
Ich weiß nicht, ob sie die vom IE übernommen haben,
aber Edge war quasi so ein Neustart.
Und
soweit ich das gehört habe, war das eigentlich ganz gut, war brauchbar.
Und so aus
Nutzerperspektive finde ich, ist es ja eigentlich toll, wenn es
da Konkurrenz gibt und unterschiedliche
Rendering-Engines. Also ich würde
mir wünschen, dass sie alle die gleichen
APIs implementieren und dass sie kompatibel
untereinander sind. Aber wenn es unterschiedliche
Implementationen gibt, dann ist das eigentlich
eine sehr gute Sache. Und von da
aus gesehen war das eigentlich immer toll, dass es
mit Edge halt da noch eine dritte
Geschichte neben halt
ja, wie heißt die
von
Chrome? Bing?
Ist die Microsoft
Zugmaschine? Nee, genau,
nicht Bing.
Wie heißt die?
Blink. Blink heißt die.
und das Ding von WebKit von Safari.
Aber das ist eigentlich basiert auf dem gleichen Code.
Das basiert auf KHDML aus dem KDE-Projekt ganz früher.
Da kommt das her und dann hat Apple das quasi in WebKit eingebaut
und dann war Chrome basierte ganz lange auf WebKit auch
und dann haben sie WebKit irgendwie weggeforkt,
weil ihnen die Entwicklung da nicht mehr schnell genug ging
und haben da ihre eigene Engine draus gebaut
und die heißt jetzt Blink irgendwie.
glaube ich, ja.
Und
insofern war WebKit und
Chrome, das war immer ziemlich ähnlich.
Und dann gab es halt noch Firefox,
hatte ja irgendwie eine eigene
Engine noch. Und Opera hatte damals auch eine eigene
Engine, oder war das wieder was Neues? Ja, doch.
Ganz am Anfang, aber die sind relativ schnell
auf irgendwas anderes umgestiegen. Ich weiß aber nicht mehr was.
Ja, aber Opera spielt leider nicht mehr
so eine große Rolle. Ja, ich glaube, vor drei Jahren sind sie auch
auf Chromium umgestellt oder so. Ja, ja.
Opera hat ein Feature, was andere
Browser nicht haben. Und das führt dazu, dass
Opera teilweise in so Ländern wie Indien
oder teilweise auch
Südostasien, manchen, also von Indien
weiß ich es relativ sicher, gibt es
irgendwie noch, 20%
des Traffics geht über Opera
und man fragt sich, hä, warum das denn?
Und der Grund ist, dass die so einen
ja quasi grafischen
Browser betreiben, also man hat auf dem Handy halt
sozusagen sieht man nur
ein Bild, also es wird einem nur
das gerenderte Bild geschickt, was man halt
so runter komprimieren kann, dass das halt nur ganz wenig
Traffic verbraucht, weil die da halt so komische
Tarife haben. Und
der eigentliche Browser läuft irgendwo bei der Firma
Opera selber. Okay, das heißt,
man kriegt jedes Mal nur ein Bild und wenn man irgendwas browsen muss,
dann... Ja, wenn man irgendwo draufklickt, dann wird halt zurückgeschickt,
dass man da draufgeklickt hat. Und das ist halt eine ganz interessante
Geschichte. Das ist ziemlich seltsam,
aber es scheint wohl dann halt auch mit
ganz wenig Daten noch so halbwegs zu funktionieren.
Deswegen gibt es da irgendwie noch so einen komischen
Nischenmarkt für. Aber
im Grunde spielt Opera keine wirkliche Rolle
mehr. Und ja, Firefox
hat ja jetzt auch umgestellt,
auf Rust, auf eine neue Sprache
und auch eine neue Render-Engine.
Das ist übrigens auch, wenn man
längere Zeit Firefox nicht ausprobiert hat,
sollte man das vielleicht mal tun.
Seit einem Jahr oder etwas mehr,
weiß nicht genau,
basiert das jetzt
auf einer Rust-Engine
und die ist
schnell, schick, toll. Das ist irgendwie
echt super und das Ding ist halt
tatsächlich konkurrenzfähig.
Und ja, so im letzten
Jahr hatte man dann quasi so drei unterschiedliche
Vendoring-Engines.
Sozusagen halt die von Firefox, die von
Chrome und
die von Microsoft. Und
inzwischen gibt es jetzt dann halt nur noch
zwei.
Und das ist natürlich echt wenig. Zwei ist
schon fast nur noch eine. Zumal
der Marktanteil von Firefox ja auch irgendwie
so ein bisschen im Sinkflug begriffen ist, leider.
Ja.
Mit was brauchst du persönlich gerne?
Tatsächlich
Ich benutze Chrome, Safari und Firefox.
Mit welchem Anteil?
Also für private Surfen, für die Arbeit?
Private Surfen, meistens Safari.
Weil Safari hat halt so dieses Feature der Leseliste,
das ich ganz praktisch finde.
Weil das halt über alle Devices hinweg synchronisiert.
Das heißt, wenn man sich eh im Apple-Universum
sozusagen mit seinen Geräten aufhält.
Ich glaube, bei Firefox kann man das auch machen,
das synchronisieren und auch bei Chrome.
Ja, bei Chrome ist es so ein bisschen evil an der Stelle,
weil man halt nicht so richtig gefragt wird,
ob man da jetzt mitmachen möchte oder nicht.
Also mich hat es erwischt.
Das habe ich letztens gehört, keine Ahnung,
hat sich jemand darüber aufgeregt,
dass Chrome da schon so böse, böse GUI-Geschichten macht,
um die Leute dazu zu verleiten,
irgendwie die Browser-History mit ihrem Profil
sozusagen auf die Geräte zu übertragen.
Was ich jetzt an sich noch nicht schlimm fände,
wenn einfach nur das irgendwie übertragen
würde, aber das wird halt auch bei Google gespeichert
und Google kann das halt sehen, was da drin steht und das ist natürlich
ich möchte eigentlich nicht wirklich meine
Browser-History zu Google hochladen, also das
Okay, ich glaube, man muss das halt
einstellen in der Privatsphäre-Einstellung, ob das
genau, aber da steht halt auch nirgendwo
du lädst hier deine Browser-History zu
Google hoch, sondern da steht
da ist irgendwie sowas wie, das sind so
Button-Tricks, ja, wo man dann irgendwie
wenn man halt, da ist irgendwie
so ein OK-Button, der sieht irgendwie harmlos aus
und wenn man da drauf drückt, dann passiert das automatisch, ja
Und nirgendwo steht irgendwie, du lädst jetzt deine Browser-Historie zu Google hoch.
Und das ist schon sehr, sehr hinterfotzig.
Da braucht es nicht den Search auf Google.
Also ich finde, Google hat eigentlich bisher noch nichts Böses damit getan.
Insofern hat es da auch mal so einen gewissen Vertrauensvorschuss.
Aber so GUI-Manipulationen, die einen dazu verleiten, auf irgendwas raufzuklicken,
auf das man eigentlich gar nicht draufklicken wollte, das ist schon sehr grenzwertig.
Und damit hat Google jetzt, also das war jetzt nur eine Geschichte.
Chrome hat dann noch eine andere Geschichte, wo sie das nochmal gemacht haben.
sagen wir mal so, also ich meine, ich weiß jetzt nicht,
aber es gibt halt diverse Leute
im Netz, die jetzt sagen, jetzt ist es halt
Chrome und Google ist so endgültig
auf der dunklen Seite angekommen.
So weit würde ich jetzt vielleicht nicht gehen, aber
es ist schon so ein bisschen, also daher versuche ich
auch möglichst Chrome nicht mehr
zu verwenden, wenn ich irgendwie nicht muss.
Es gibt Dinge, für die ich muss, also zum Beispiel
zum Entwickeln ist Chrome tatsächlich
irgendwie am praktischsten. Es gibt da
für React und so,
wenn man das baut, auch so
Extensions, die einem dann helfen, das zu debuggen
und so. Und das ist so praktisch,
dass ich zum Entwickeln tatsächlich
Chrome verwende.
Ich verwende Chrome tatsächlich auch privat.
Selten mal in Firefox, also
eigentlich nur, um mal, weiß nicht, was anderes zu machen.
Aber normalerweise eigentlich immer Chrome.
Ich habe auch nicht so viele Bedenken
mit dem Datenschutz. Also ich muss sagen, ich bin doof
und vertraue denen ein bisschen.
Und die wissen eh alles über mich.
Auch egal, wenn die noch mehr über mich wissen.
Vielleicht kriege ich dann
irgendwelche Bonusgeschenke, man weiß ja immer nicht genau.
Also ich hoffe ja immer noch, dass ich dann irgendwann mal
so einen Sonderrabatt bekomme.
Ja, vielleicht.
Vielleicht wird alles gut.
Irgendwann stehen irgendwelche Männer mit irgendwelchen Anzügen.
Man weiß es aber nicht so genau.
Wir sind ja in Amerika und nicht hier.
Also das ist ja schon mal gar nicht so schlecht.
Also, ja, klar.
Ich benutze Chrome auch. Ich finde auch,
das ist ein echt guter Browser und so, aber
Safari wegen der
Leseliste vor allen Dingen, weil ich dann halt
sozusagen halt auf allen...
Die haben nur gerade ihre Datenschutzeinstellungen gestellt
in Europa, haben ihre Server geändert
und ihre Rechtsform geändert.
Die sitzen jetzt in Irland von der, weiß nicht,
Google LLC auf irgendeine irische Limited
oder sowas. Ich habe noch nicht
da reingeguckt, vielleicht, weil die jetzt
DSGVO-konform sind, müsste man jetzt eigentlich auch
aus den ganzen Sachen gesondert opt-outen
können und die Frage ist, ob sowas wie die Browser History
einfach noch so übernommen wird, weil ansonsten...
Das kann natürlich auch sein, dass das mit der
DSGVO ja jetzt auch so ein bisschen
erledigt hat. Sollen wir gleich nochmal nachgucken, obwohl
eigentlich habe ich nicht so wirklich Lust, das nachzugucken.
Also wenn euch das interessiert, könnt ihr das selber mal gucken
und informiert uns doch gerne bitte in einer E-Mail, was
ihr da rausgefunden habt. Ja, also
ansonsten, Firefox versuche
ich immer mal wieder zu verwenden,
wenn, für so Casual-Browsing
Geschichten
und dafür ist das eigentlich, also
so, ja, ist das
Ding, das Ding ist schnell und
Das hört sich toll an, wenn der Jochen sagt Casual-Browsing.
Ja, wo ich halt jetzt nicht unbedingt
sozusagen
irgendwie ein Bookmarks-Grad mache oder so.
Oder halt einfach
so ein bisschen rumbrause.
Und das Ding ist auch super. Sollte man
auf jeden Fall nochmal ausprobieren, wenn man das längere Zeit nicht
gemacht hat. Das kann einem schon überraschend
gut vorkommen.
Muss man aber auch so ein bisschen aufpassen.
Die haben alle so ihre Haken und Ösen.
Chrome ist
privacy-mäßig ein bisschen schwierig.
Safari ist irgendwie technisch leider,
da kommen wir auch nochmal drauf
zu sprechen, ist halt technisch so ein bisschen
kaputt. Und Firefox
hat halt jetzt auch so ein Ding eingebaut,
so ein Privacy,
jedenfalls nicht so super optimal. Also die verwenden
jetzt statt
normalen Nameservern
gehen die
DNS-Requests auch per HTTP
irgendwie an eine von diesen,
ich weiß gar nicht an wen, CloudFront
oder weiß ich nicht, auf jeden Fall an einen von
diesen CDN-Betreibern.
was Vorteile hat.
Also dein Provider sieht halt nicht mehr, wo du
rumsurfst. Ich meine, bei HTTPS,
was ja die meisten Seiten mittlerweile
dann halt tatsächlich sind, sieht natürlich
irgendwie dein Provider auch nicht mehr die Inhalte,
aber sieht halt immer noch, zu welcher
Domain quasi dein
Request geht und
das reicht ja dann oft schon, sozusagen als
Information. Er sieht vor allen Dingen
den
Nameserver-Request, also
den
Request zur Namensauflösung, wenn
Name-Server beim Provider steht,
was bei den meisten Leuten so ist, weil das
Default ist, kann man natürlich auch selber umstellen.
Google zum Beispiel.
Google, ja, 8.8.8.
Google weiß dann alles.
Google weiß dann noch mehr.
Provider und Suchmaschine kombiniert.
Google Home Assistant, alles
integriert und dann mit dem Auto verknüpft.
Toll, ich kann über die letzten Jahre
mit dem Standort jeden Tag nachverfolgen, wo genau
ich rumgelaufen bin. Das ist hervorragend.
Ja, ich will gar nicht beschreiten, dass das
durchaus praktisch sein kann. Genau, ich
habe auch bei mir jetzt
in meiner Fritzbox
irgendwie als Nameserver eben nicht mehr
den von Provider eingestellt, sondern
1.1.1.1
und
1.1.1.0, weiß ich nicht genau.
Vielleicht sollte man da auch unterschiedliche
nehmen, vielleicht den einen von
auch einem von diesen CDN-Dingern
und dann vielleicht einen von Google
oder irgendwie, das ist halt nicht, dass man
die Daten so ein bisschen aufteilt. Also ein CDN-Ding
Das ist ein Content-Delivery-Network.
Genau, genau.
Was macht das?
Das sorgt dafür, dass, wenn du jetzt statische Dateien sehen möchtest,
wie jetzt zum Beispiel ein Video oder halt auch Bilder.
Und warum ist denn ein Video statisch?
Weil es sich nicht verändert?
Weil das Video ist das einmal aufgenommen worden ist und das als Datei auf dem Server liegt?
Weil das halt eine Datei ist, die sich nicht mehr ändert.
Und dynamisch ist es dann, wenn ich eine individuell angezeigte Web-Oberfläche habe, die mein Profil oder irgendwelche anderen Informationen beinhaltet.
Genau, also ein Applikations-Server liefert halt irgendwas aus, was sozusagen auf dem Kontext der Session oder sonst irgendwie basiert.
Und die sind übrigens auf dem Python geschrieben, Entschuldigung.
Ja, genau, also eben, natürlich, also ich denke, dass die Infrastruktur, mit der man irgendwie so CDNs hochzieht,
auch wahrscheinlich häufig in Python geschrieben sein wird. Aber die Server, die das ausliefern,
sind halt ja nicht Python, sondern das ist dann halt irgendwas schnelles. Also so möglichst nah
an der, am Metall, weil das darauf kommt, da kommt es dann halt wirklich drauf an,
auf die letzten Millisekunden und so. Nah am Metall habe ich auch gerade zum ersten Mal
gehört. Achso, ja nah an der CPU quasi, an den Leiterbahnen halt. Bei Python hat man ja immer
noch eine viertel Maschine dazwischen und so.
Und
genau, also
die Dinger sind eigentlich dafür da, dass wenn ich jetzt
sozusagen eine Webseite
habe, wo halt ganz viele
Dinge drinstehen, wie
ein Tag-Image und dann ein Source
und dann ist das halt eine Referenz auf
ein Bild oder
auf ein Video, halt je nach Tag,
dann kommt das halt
nicht von dem Applikations-Server, sondern gibt es halt spezialisierte
Dinger, die das halt ausliefern. Und wenn ich
jetzt auf der anderen Seite der Welt jemanden habe,
das angucken möchte, dann ist es halt irgendwie so ein bisschen
sinnlos, dass einmal irgendwie durch
drei unterschiedliche Unterseekabels
quetschen, wenn das ein Video ist und
das ist halt irgendwie ein Gigabyte groß.
Sondern, und
nehmen wir an, auf der anderen Seite der Welt wollen das
plötzlich, weil es irgendwie in der
Hongkonger Clubszene
wird mein Ukulelen-Video
plötzlich zu, geht viral.
Du hast ein Ukulelen-Video?
Welcher Plattform? Auf YouTube vielleicht?
Nee, hab da nix.
Ja, sehr schön.
Genau, aber in Hongkong wird das jetzt super populär.
Und dann wollen das irgendwie 10.000 Leute angucken.
Kennst du Tiny Tim?
Nee.
Muss ich dir später mal vorstellen, wegen der Ukulele.
Entschuldigung, keiner Ex-Bus.
Ach, ist das diese britische?
Das ist schon ein bisschen her, ne?
Ist das ein bisschen Comedian, Musiker?
Ja, ja, ja, doch, doch, dann habe ich es schon mal.
Mir war gerade nicht klar.
Ich konnte das nicht verknüpfen.
Aber ja, ja, doch, habe ich, glaube ich, auch schon mal gesehen.
Aber noch nicht so wirklich.
Ja, ist großartig, ja.
Ja, okay, muss ich mal reingucken.
Genau, und wenn ich jetzt hier halt
meinen Webserver irgendwo
nehme, meiner steht tatsächlich bei Hetzner
in Nürnberg, ja, und jetzt halt
die ganzen Bits da
von Nürnberg nach Hongkong irgendwie durch
alle möglichen Kabel sich quetschen
müssen, ist ja eigentlich irgendwie Quatsch.
Und dafür gibt es ein Content Delivery Network, was auf
der, weiß nicht, an einem Kontinent steht
und da ist ein großes Rechenfarm. Genau, die haben halt
in allen Punkten, wo es irgendwie
Nachfrage gibt, halt entsprechend Rechenzentren stehen
und dann geht halt das, gehen die
Bits von dem Video halt nur einmal
von Nürnberg bis zu dem lokalen
Rechenzentrum in Hongkong und werden dann von da
aus verteilt, ja. Und das ist natürlich
deutlich effizienter und irgendwie
sinnvoll. Nur für dynamischen Content nicht?
Ja, da geht's halt nicht,
weil die können halt dynamisch,
muss dann halt die Stelle, die halt
den State-Helm ist halt gefragt.
Das ist auch so ein Hoster, das ist ein relativ günstiger Hoster, wo man so Server irgendwie in einem Rack mieten kann, wo halt unter anderem halt auch zum Beispiel python-podcast.de läuft.
Oh, so eine Seite gibt es, das ist ja toll.
Ja, genau. Also die haben halt die Infrastruktur, um jetzt Dateien quasi global, irgendwie lokal auszuliefern und nicht, also ihre eigene Verteilungsinfrastruktur sozusagen. Und das ist halt naheliegend auch DNS darüber zu machen, weil da hat man im Grunde das gleiche Problem.
ja, deswegen sind die halt sehr schnell,
wenn man, jetzt zum Beispiel, ich weiß nicht,
1.1.1
oder so, dass ich jetzt bei mir,
das Ding, was ich jetzt bei mir eingestellt habe, da habe ich
7 Millisekunden Latenz hin
bei mir
zu Hause, so ein publiques
DSL. Und das ist...
Und das ist aber trotzdem, also ich meine,
7 Millisekunden ist schon echt schnell
und ich glaube, der
DNS-Server
von meinem Provider antwortet so mit
40 Millisekunden Latenz oder so.
Ja, ich wollte gerade sagen, also alles unter 20 schon fast
lokal irgendwie.
Ja, aber das sind dann halt, weil
die Namen müssen ja erst aufgelöst werden,
bevor überhaupt ein Request zum Applikationsverfahren
gemacht werden kann. Bevor überhaupt irgendwas zurückkommt,
hat man halt diese Latenzen immer drin.
Und das addiert sich dann halt auf.
Und wenn man jetzt da schon mal
30 Millisekunden Latenz sparen kann,
bei jedem Request, der irgendwie gemacht wird,
oder nicht bei jedem, manchmal wird es auch gecached,
wenn die Antworten nicht sind, aber
dann hat das durchaus merkbare
Auswirkungen und deswegen habe ich das mal
umgestellt. Geht es eigentlich viel schneller, wenn man direkt die
IP eingibt?
Das geht halt nicht unbedingt.
Ah, das geht nicht.
Ja,
die Domain oft auch benutzt wird,
um rauszubekommen,
an welchen Applikationsserver das gehen soll.
Also nehmen wir zum Beispiel mal
meine private Webseite liegt auf
dem gleichen Server
wie pythonpodcast.de
das heißt, wenn ich die IP habe
ich kann jetzt ein HTTP-Request zu dieser IP
hinschicken, aber dann weiß das
aber nicht so richtig, für wen ist denn das jetzt gedacht
ist das für python-podcast.de gedacht
oder ist das für
was sagt das Request dann
404, 403
ja, wenn das
nicht eindeutig ist, dann
kommt dann halt ein 404 wahrscheinlich zurück
und ja, dann
funktioniert das nicht, aber insofern muss halt
die Domain im Host
halt dann mitgeschickt werden und
ja,
aber wenn man das jetzt mit dem Browser macht,
dann passiert halt zuerst ein Namens
Auflösungsrequest und dann... Oder der könnte ja
lokal routen, kann der das? Also irgendwelche Anfragen
dann, also musst du dann versehen mit
der IP und einem
Namen? Ja, ja, also man
kann solche Requests natürlich auch zusammenbauen,
aber meistens verwendet man ja Browser und dann passiert
das halt alles automatisch und da braucht man
die Domains dann halt schon, weil
in meinem statischen Web-Server, der halt
sozusagen der Reverse-Proxy von den Applikations-Servern
ist, gibt es dann halt einfach eine Tabelle, sondern es steht halt
so, alles, was irgendwie mit
Python-Podcast.de anfängt, geht halt
an den lokalen
Applikationsserver, der auf dem Port
läuft. Und alles, was halt
auf die Domänen geht, geht halt an
denen und so. Okay, also
du machst halt tatsächlich relativ viel im Web, das haben wir
jetzt, glaube ich, auch gehört, auch mit den Browsern
haben wir jetzt, glaube ich, schon ein kleines Thema, ein bisschen
gehabt, was wir vorher noch nicht angekündigt hatten, aber
hey, wir haben eigentlich ein bisschen was über die Browser erzählt.
Ja, ja, sowas.
Wir wurden erzählt, was alles nicht so funktioniert, also da
hatten wir ja auch kurz den Safari erwähnt.
Ja, du hast auch gesagt, was machst du
so eigentlich die ganze Zeit und was hast du irgendwas erzählt?
Du hast ein Video mit Audio gemacht im Browser und so.
Ja, letzte
Woche. Ja. Eigentlich
mache ich
so Data Science, Machine Learning
Geschichten, aber halt in letzter
Zeit auch häufiger Frontend
Sachen im Web, weil man muss halt
auch Dinge, wenn man
Machine Learning machen will, zuerst muss man Daten
sammeln und die annotieren und so.
Und
früher haben das irgendwie immer andere
Leute gemacht, Annotationsfront 1 gebaut
und so, aber das war nie so wirklich
toll und inzwischen
ja,
arbeite ich da gerade an einem Projekt, wo ich das halt auch
mit selber mache und eigentlich bin ich ganz glücklich drüber, weil
jetzt kann ich das halt mal so bauen, wie ich das gerne
hätte und das ist eigentlich ganz praktisch
und nebenbei lerne ich halt auch mal diesen ganzen
Web-Quatsch
Ja, hab ich gehört.
Deswegen, Leute, das ist alles Quatsch und
Ja, gut geht alles nicht.
Genau, aber so schlimm ist es auch nicht.
Es ist schon eigentlich ganz gut.
Es ist wirklich viel besser als früher.
Und insofern würde ich sagen,
ist es auch momentan ein ganz interessanter Zeitpunkt,
um damit anzufangen,
weil es geht halt schon eine ganze Menge.
Aber immer ab und zu stößt man halt dann noch schon
auf so schmerzhafte Details,
wie zum Beispiel,
letzte Woche habe ich Audio gemacht,
und da war,
also Safari ist halt so ein bisschen der neue IE,
weil er hängt halt in der Entwicklung hinterher.
Und da gibt es dann so unterschiedliche
APIs, die Browser implementieren können. Zum Beispiel
die MediaCatcher-API, wo
man halt einfach vom Browser
halt sowas bekommt wie Video
oder Bilddaten.
Also das kennt man vielleicht, wenn man
ja, also eigentlich kennt man das
eher so, dass man auf dem Smartphone
dann so einen Dialog bekommt. So, möchtest
du ein Foto oder Video aufnehmen oder halt
quasi eins
aus deiner Mediathek auswählen oder so?
Du meinst, wenn ich auf Time klicke? Ich hatte mich kurz abgehängt.
wenn ich was machen möchte?
Wenn du auf einer Webseite bist und du möchtest jetzt
beispielsweise, du musst da halt irgendwie ein Profilbild hochladen
oder so. Dann gibt es meistens
einen Button oder sowas, wo man drauf drückt.
Und dann wird man halt gefragt, irgendwie so Fotovideo
aufnehmen oder irgendwie
ein bestehendes Foto benutzen oder so.
Genau. Und
das ist eigentlich
so ein File-Input,
so ein Input-Element, was man halt da verwendet.
Also ein Input-Type-File.
Und da gibt es auch einen Standard für, wie man da ranschreiben kann.
Okay, ich hätte gern jetzt aber
nur ein Foto oder nur
Audio, und zwar in dem und dem
Codec und so. Das geht eigentlich alles.
Ja. Und die
Browser können das auch.
Oh, da geht's ab.
Ich glaube, das ist die
Waschmaschine. Waschmaschine.
Ich glaube, Aufonik wird das
hinterher alles rausfiltern. Na gut.
Ich bin da sehr zuversichtlich. Mal gucken.
Bei dem Schleudergang.
Ja, genau.
Und
eigentlich wäre das ideal, wenn man einfach
irgendwo ein Element hinmachen würde,
Input-Element-Type-File
und dann halt sagt man auch, was man da gerne hätte
und dann wird der User halt gefragt, okay,
dann nimm doch halt mal diese App
zum Audio aufnehmen oder
die Fotografie-App auf deinem Telefon
mach damit irgendwas, dann landet das,
was man aufgenommen hat, in der lokalen Mediathek
und quasi auch
im Browser
und im JavaScript, sodass man damit irgendwas machen kann.
Das wäre voll gut.
Das funktioniert auch in den neuesten Chromes, glaube ich,
aber das funktioniert nicht,
mit dem Safari und das funktioniert auch nicht.
Also es wäre halt das, was man dann hätte,
aber das funktioniert halt mit dem Safari nicht und damit ist iOS
komplett raus und damit kann man es eigentlich nicht mehr verwenden,
weil geht halt nicht.
Genau.
Meinst du, die patchen das oder
sind die da zu
anders strategisch aufgestellt?
Ja, das hätten sie, ich meine,
das gibt es ja schon lange und so und andere haben das auch schon
lange implementiert und da sie das schon seit
quasi Jahren nicht gemacht haben, ist halt,
warum sollten sie es jetzt tun?
Weiß ich auch nicht. Also es könnte
sein, dass es auch kommt, man weiß es halt nicht.
Aber ja, also das
wäre am schönsten. Und dann,
wenn das nicht geht, gut, es gibt halt die
Media
Recorder API.
Die ist auch ziemlich schick.
Das ist halt ein bisschen
mehr Aufwand, da muss man halt von JavaScript-Seite
aus halt, hat man dann so ein
Media Recorder-Objekt irgendwie
an ein Window dranhängen. Das kann man benutzen,
um halt irgendwie Audio aufzunehmen oder Video aufzunehmen
oder so. Man kriegt halt
nicht einfach eine Datei, was halt
die Arbeit irgendwie enorm vereinfachen würde,
sondern man kriegt halt dann
irgendwie so ein
Blob,
so ein Binary-Objekt,
was man dann auch quasi irgendwie wieder an den
Server schicken kann und so, aber so ein bisschen
ätzender. Ich muss gerade versuchen,
ich kann es leider nicht nachmachen mit dem Blob.
Ja.
Und
das ist eigentlich auch
alles easy.
Ach, so gut, dann könnte man ja das nehmen.
Und das können auch tatsächlich alle
Browser, bis auf Safari.
Der implementiert das wieder nicht.
Also Safari ist gerade so ein bisschen
Pain, habe ich gehört.
Ja, das ist echt schwierig.
Wobei man sagen muss,
auch die anderen, die Formate sind halt
alle total unterschiedlich. Also die unterstützen
das zwar, aber
in Chrome kriegt man
dann halt
ja, die nehmen dieses
WebM-Container-Format
und schreiben da Opus-Codec rein.
Opus was? Opus ist der
Codec. Opus ist halt einer,
ja, ist halt quasi gerade für
Text oder Sprache,
für
Sprachaufnahmen ist das eigentlich ziemlich gut,
komprimiert schön
runter
und man kann
das halt immer noch gut verstehen.
Und
ja, Firefox nimmt dann halt
einen anderen Container, nimmt dann halt diesen
Ock-Worbis-Container
Aber ich glaube, sie packen da
sie packen da auch
Opus rein als Codec.
Ja, wobei
jetzt natürlich Safari irgendwie
würde jetzt wahrscheinlich nicht Opus
nehmen, die unterstützen
ja keinen freien Codec, sondern
müsste das dann irgendwie MP4 sein oder sowas.
Hurra!
Und was das halt auch wieder schwierig macht,
weil da muss man halt auf dem Server das alles nochmal ineinander
umcodieren, weil man möchte ja auch den Browsern dann das
Format schicken, was sie halt irgendwie
problemlos wieder ausgeben können und so.
Und ja,
für den Firefox ist das dann, dem schickt man
dann halt auch wieder ein Opus
Codec im
Ock-Container.
Das war super, danke.
Was zu trinken.
Das ist einfach so nebenbei. Entschuldigung, wir haben euch
stehen lassen.
Ja, Entschuldigung, wo war es gerade mit den Containern?
Genau, genau, genau. Und
dem
krumm wird man halt
irgendwie dann WebM und
auch Opus schicken.
Naja, wie auch immer. Also
Safari kann halt diese blöde
Media-Rekorder-AP nicht.
Das lässt sich dann überbrücken, indem man halt
ein Polyfill halt verwendet, was dann
die Media-Catcher-AP benutzt, um irgendwie
diesen Media-Rekorder zu emulieren.
Aber so richtig schön ist das alles nicht, weil dann kann man
nur noch... Was? Ich hab mir gerade einen Fleck
auf die Hose geschüttet. Oh nein!
Entschuldigung.
Oh, vielen Dank.
Ja, bitteschön.
Prost.
Was ist denn das?
Das ist ein Spätbrunner Brotfein.
Zur später Stunde nochmal hier auf die Weihnachtsfolge.
Ist ja sowieso alles ein bisschen chaotisch heute, deswegen.
Ja.
Das war lecker.
Na gut.
Wow.
Ja, also
klasse.
Wir waren gerade stehen geblieben.
Ja, ja, ja, bei Safari.
Also, genau.
Und
ja, also man kann das dann immer,
das Problem ist, wenn man jetzt
sozusagen diese API, die nicht implementiert ist,
im Browser selber in JavaScript
nachbaut, damit man das
halt in Safari genauso machen kann
wie in den anderen Browsern,
dann hat man halt das Problem,
dass man die rohe Aufnahme
dann halt kriegt in diesem
Binär-Blob,
Daten-Blob, den man halt
unkomprimiert als
WAV-File.
Jetzt kann man natürlich anfangen, in
JavaScript das irgendwie nach
MP4 oder nach Opus zu kodieren. Das kann man
irgendwie machen. Es gibt Leute, die das tun. Ich weiß nicht,
ob das so eine gute Idee ist.
Was ich dann mache,
ist, ich schicke dann halt das WAV-File zum Server
und der kodiert das dann halt um in die
unterschiedlichen Formate und Container-Typen.
Aber es ist halt dann einfach mehr, man braucht dann
deutlich mehr Bandbreite, wenn man das halt unkomprimiert
an den Server schickt.
Safari, die gehen halt davon aus, die haben alle genug
Bandbreite, ist ja auch Apple, ne?
Naja, und so richtig
so richtig dolle ist das
irgendwie nicht. Ja, und dann
genau, wenn man es dann beim Server hat
und dann kann man das zwar in alle Formate
umkodieren, ist aber auch manchmal, manchmal hat man dann so komische
Effekte, ich benutze da eine FFM-Pack
als Library, die kann das
irgendwie alles ineinander konvertieren und manchmal
bei manchen, wenn man von dem einen Format, also man nimmt irgendwas
in Firefox auf, spielt es dann
Safari ab oder so. Ich weiß es nicht mehr genau, wie es war,
sondern plötzlich ist dann irgendwie alles nur halb so schnell
oder so. Und dann muss man dann
den Flex von FF Eggpack aufrufen, den man
gemacht hat, irgendwie so lange drehen, bis das wieder stimmt.
Und das ist halt alles ziemlich... Also es ist nicht so,
dass es alles so out of the box funktioniert,
sondern man hat da teilweise sehr überraschende Ergebnisse
noch. Und
was halt auch total doof ist,
ist halt, habe ich mich dann halt
mit diesem Problem habe ich mich mehr
als einen halben Tag rumgeschlagen, bis ich überhaupt
rausgekriegt habe, was da das Problem ist.
Ähm, das war auch wieder Safari.
Safari!
Das ist schon der dritte Pain von Safari innerhalb von einer Woche.
Also wenn man das abspielt, dann denkt man sich,
okay, ich kann mit dem Safari leider kein Audio aufnehmen.
Okay, gut, naja, egal.
Wie ist so ein Teil?
Sorry, ich hab irgendwie so einen fiesen Husten.
Ich weiß nicht, als hättest du eben noch eine gewisse Zigarre geraucht.
Ja.
Und das geht mal wieder weg hier.
Naja, genau, aber abspielen sollte es das ja können.
Man kann das ja auch irgendwie in Format kodieren,
dass es halt Safari abspielen können müsste,
wie zum Beispiel MP4, ja, ist ja sozusagen das Hausformat.
Und dann geht das aber irgendwie nicht.
Man fragt sich, hä, warum geht denn das nicht?
Und das Einzige, was geht, ist irgendwie MP3.
Aber da geht das auch nur so,
dass man das einmal abspielen kann und dann nicht mehr.
Und dann steht in dem Audio-Teil, den man halt auf der Webseite sieht,
steht da irgendwie sowas komisches wie Live-Übertragung.
Da habe ich mich zuerst gefragt, so was zur Hölle ist das denn?
Und ja, es ist halt so, dass Safari erwartet, wenn man jetzt Audio abspielen möchte,
das heißt, man hat einen Audio-Tag, so ähnlich wie ein Image-Tag,
bloß halt mit Audiodaten drin,
dann kann man halt die unterschiedlichen Formate und Codecs halt auflisten,
was man da so alles hat.
Und der Browser kann dann entscheiden, was er abspielen möchte.
Und bei allem außer MP3 schickt Safari halt irgendwie so ein Byte-Range-Request an den Server.
Das muss der Server dann können.
Er muss dann irgendwie mit einem 206 antworten statt einem 200er.
Den benutzt Safari aber nicht.
Er schickt den halt irgendwie dahin und schmeißt das Ergebnis weg.
Aber wenn irgendwie kein 206 zurückkommt, dann geht einfach gar nichts, spielt ja gar nichts ab.
Also es funktioniert einfach nicht.
der Entwicklungs-Server, auf dem ich entwickle, der kann
sowas halt nicht. Der kann keine Wide-Range-Requests,
der kann überhaupt keine statischen Dateien eigentlich so richtig.
Das ist ein Python-Entwicklungs-Server,
dafür ist der nicht gedacht. Also
antwortet der halt auf diesen Wide-Range-Request,
glaube ich, ich weiß gar nicht, womit der dann antwortet,
aber irgendwie im normalen 200, glaube ich.
Und da sagt Fari so,
nö, dann halt nicht. Aber es gibt auch keine Fehler,
es gibt eine ganz komische Fehlermeldung
in der Konsole.
Ich habe das jetzt leider wieder vergessen, was aber irgendwie überhaupt nichts
damit zu tun hat, was eigentlich passiert.
Quad denied.
Ja, und es kann auch sein, dass das dann im Produktivbetrieb alles dann funktioniert, auch mit anderen Sachen.
Aber man kann dann halt auch schon nicht mehr so richtig testen irgendwie.
Und MP3 funktioniert deswegen, weil MP3 halt ein Format ist ohne Container, was halt auch diverse Nachteile hat.
Wie zum Beispiel, man kann halt nicht irgendwo hinspringen in der MP3-Datei.
Es gibt keine separate Zeit oder sowas, wo man sagen kann, also man hat halt nicht irgendwie ein Header-Teil in der Datei, wo drinsteht,
also dieser Zaun-Schnipsel ist so und so lang
und wenn du zu diesem Zeitpunkt willst,
dann musst du diesen Byte irgendwie abspielen oder so.
Deswegen ist das natürlich total sinnvoll,
diese Byte-Range-Requests zu haben,
weil dann kannst du halt in einem Player sagen,
okay, ich springe jetzt irgendwie zu dieser Kapitelmarke
oder ich springe halt irgendwo in die Mitte
und es muss nicht alles runtergeladen werden,
sondern es wird nur das runtergeladen,
was tatsächlich abgespielt wird.
Also eigentlich schon sehr schick.
Und MP3 kann das halt nicht.
MP3 musst du halt immer komplett abspielen
quasi oder komplett runterladen, wenn du es abspielen willst.
Das macht der Safari dann auch.
Also er sagt dann halt sozusagen, okay,
ByteRange-Requests gehen mit MP3 dann halt nicht
und das kann ich alles eh nicht machen.
Daher mache ich da was anderes
und tue so, als wäre das eine Live-Übertragung
und spiele das dann halt irgendwie ab.
Was dann aber dazu führt, dass der Browser
lädt alles runter, aber man kann es halt nur ein einziges Mal
abspielen und dann werden halt irgendwie so die
Audio-Controls dunkel und das war's.
Das ist halt also
mir so, oh nein,
was?
Safari, wenn Dicke das hört, it's a pain in the ass.
Ja, es gibt da einen sehr lustigen,
Apple verwendet für all diese Sachen so ein
Radar, heißt das Ding,
Bug Tracker.
Zu diesen Problemen, das habe ich dann irgendwie
so nach ein bisschen suchen, ich hatte, das
Problem war rauszufinden, was ist, was
passiert hier eigentlich?
Als ich das rausgefunden hatte,
war es dann relativ leicht, dann auch den entsprechenden
die entsprechenden Geschichten im Web
zu finden, kann man sich immer raussuchen, wenn man so danach sucht,
Safari-Audio-Bite-Range-Radar.
Dann findet man da auch
den entsprechenden Bug bei Apple.
Und da haben so Leute lustige Sachen reingeschrieben.
Safari
Bite-Range-Radar.
Ja.
Und
ja.
Naja, auf jeden Fall, das ist alles
nicht so toll. Ich hoffe mal, dass es dann im Produktivbetrieb
irgendwie alles geht.
Und ich einfach MP4 abspielen kann im Safari.
Aber momentan spiele ich dann halt MP3
und lebt damit, dass man es nur einmal abspielen kann
und dann nicht wieder.
Also das ist alles noch nicht so,
es ist nicht so ein total
smoothes
Experience, sondern das ist mehr so,
man fragt sich ab und zu so,
das darf doch nicht wahr sein.
Ja, dann
auch schön,
wenn man Audio aufnehmen möchte, also bei Fotos
und so geht das ja eigentlich alles auch im Testbetrieb
ganz gut, Audio nicht so sehr.
Da hat man dann zum Beispiel
das Problem, wenn man jetzt
und da die
Geschichten, die ich da gerade brauche, sind halt
vor allen Dingen für mobile Endgeräte
gedacht. Ist ja auch
eigentlich schön, da hat man dann die ganzen Sensoren dabei,
da hat man Mikrofone dabei und so. Das funktioniert
ja auch alles. Sollte man eigentlich auch Audio aufnehmen können.
So, wenn man
Fotos macht und so,
funktioniert das auch alles. Kann man halt einen Testserver im lokalen
Netz haben, auf dem das läuft.
Also ich habe da so meinen Python-Entwicklungsserver
und dann
kann ich da Fotos hochladen und so, gar kein Problem.
Aber wenn man jetzt sagt, okay, schalt mal das Mikrofon ein
und mach eine Audioaufnahme,
dann sagt einem der Browser halt so,
nee, das ist eine
unsafe Origin,
weil das ist nicht HTTPS.
Und deswegen
nee, keine Audioaufnahme.
Kann man das irgendwie vorher
umwandeln oder sowas, dass der es über
einen sicheren Kanal schickt?
Ja, der Browser sagt einfach, das macht er nicht.
Also der Safari jetzt nur
und dann machen das diesmal alle. Das machen tatsächlich alle nicht.
Ich meine, ja, okay,
Vielleicht ist Audio irgendwie super viel privater als
Film oder
Foto. Ich weiß es nicht.
Ich kann mir schon vorstellen, woran es liegt.
Ich meine, das Problem ist halt tatsächlich, dass jemand
möglicherweise irgendwie ein Telefon
auf den Meeting-Tisch legt
oder so und dann irgendwie Sachen mitschneidet und man
nicht möchte, dass es...
Ehrlich gesagt, ich weiß nicht. Kann man ja auch so machen. Man kann es ja einfach
irgendwie aufnehmen und später irgendwo hinschicken.
Keine Ahnung. Auf jeden Fall.
Ja, dann mach einen Livestream irgendwo hin. Das wird ja auch funktionieren.
Ja, oder man hat dann eben einen HTTPS
irgendwie fähigen
Server, an den man das schickt, dann geht das ja alles auch.
Aber wenn es
halt nicht HTTPS-fähig ist,
ein lokaler Entwicklungsserver geht halt nicht.
Und den kann ich ja auch nicht so leicht HTTPS-fähig machen.
Das geht ja einfach nicht.
Dem kann ich natürlich ein Zertifikat verpassen und ich kann
halt irgendwie so ein
Reverse-HTTPS-Proxy
davor schalten. Das geht ja alles.
Ein Reverse-HTTP-Proxy,
was macht der? Der halt sozusagen
das HTTPS terminiert, also
HTTPS mit dem Telefon spricht und dann die Requests
weiterleitet an meinen Entwicklungsserver. Das ging ja.
Das Problem ist nur, mit einem
validen Zertifikat geht das alles nicht so richtig.
ja, ohne valides Zertifikat ist
natürlich auch wieder nichts. Also es ist einfach
doof. Wir müssen nochmal vielleicht
kurz erklären, was valide und was invalidere Karten sind.
Aber vielleicht in Short, kriegen wir es irgendwie in the Box?
Ja, also man
ja, dieser ganze Teil von Hattipass ist auch so ein bisschen
kaputt, aber also
Wir sind ja heute bei der Chaos-Weihnachts-Folge,
liebe Leute. Im Python-Podcast
wollte ich nur einmal kurz reden.
Es ist halt so, dass ich im Grunde
ja der, also
man braucht eigentlich drei Dinge damit, was sicher ist.
Also wenn ich jetzt zum Beispiel mal das Beispiel nehme, Online-Banking
und
ich mache jetzt Online-Banking auf einer Webseite,
dann müssen drei Sachen
garantiert sein, damit das wirklich sich
sozusagen sicher ist. Und das ist
halt... Dein Computer ist nicht infiltriert,
die Verbindung ist nicht infiltriert
und der C-Computer ist nicht infiltriert.
Ja, aber es gibt noch mehr Dinge. Noch mehr.
Mehr als drei. Drei Dinge,
aber ich würde das jetzt eher auf so eine abstrakte
es auf der abstrakten Ebene
heben wollen.
Und zwar brauchst du
halt irgendwie
Authentifizierung.
Ich bin der
richtige Nutzer, der da auch rein darf.
Ich bin der richtige Nutzer, der da rein darf. Das macht man halt per Username und Passwort
üblicherweise. Oder Banken nennen das irgendwie PIN.
Machen komische Beschränkungen, aber
im Grunde zeigt man damit
der Bank, dass man derjenige ist,
für den man sich ausgibt.
Zumindest, dass ich derjenige bin,
der die Benutzer an dem Passwort kennt,
von demjenigen, als den ich mich ausgebe.
Ja, dann umgekehrt muss das aber auch gelten.
Also auch die Bank muss sich mir gegenüber ausweisen,
weil ich möchte ja natürlich schon wissen,
dass ich sozusagen mit der Bank rede
und nicht mit irgendjemandem, der zwischen mir und der Bank sitzt,
dann meine Überweisung nimmt, da irgendwie die IBAN auf seine ändert
und dann halt die Überweisung mit der richtigen Bank macht.
Tata!
Das wäre irgendwie schlecht.
Das heißt, die Bank muss sich auch mir gegenüber ausweisen
und das macht sie üblicherweise mit einem Zertifikat.
Und das ist halt sozusagen, wenn das nicht funktioniert hat,
dann gibt es so einen Polizisten mit so einem Knüppel, der da auftaucht
und dann irgendwie so eine Browserwarnung.
Oder man sieht manchmal so ein geschlossenes Symbol oder irgendwas Grünes,
wenn das besonders viel Geld bezahlt hat für die Certification Authority.
Aber im Grunde, wenn es keine Warnung gibt, dann war das okay.
Diese ganze Struktur, wie das geprüft wird, welche Zertifikate okay sind und welche nicht,
Das ist auch alles nicht so toll.
Aber inzwischen, das geht auch alles.
Man muss dafür auch kein Geld mehr bezahlen.
Deswegen ist es auch für private Anwender und so eigentlich ganz gut.
Da gibt es mit Let's Encrypt eine freie Certification Authority,
bei der man sich Zertifikate besorgen kann,
für wenn man jetzt eine Webseite betreibt, halt öffentliche Webseiten.
Und das passiert alles automatisch.
Man kann zum Beispiel einen Webserver nehmen namens Caddy.
Und wenn der halt auf der...
Ein Python-Server?
Nee, der ist in Go geschrieben, aber...
Ja, der macht sozusagen so ein Challenge-Response-Verfahren
mit Let's Encrypt, mit dieser Certification Authority,
holt sich dann die entsprechenden Zertifikate.
Das funktioniert alles automatisch, man muss sich um nichts mehr kümmern
und das klappt einfach so.
Das ist ein sehr viel besserer Zustand als früher,
wo man das alles von Hand machen musste
und mit Passphrases rumhantieren und OpenSSL-Kommandos
und keine Ahnung, war alles ziemlich furchtbar.
Aber die Aufgabe von einem Zertifikat ist einfach nur,
sozusagen sicherzustellen für den Benutzer im Browser,
dass da angezeigt wird, dass er mit der richtigen Institution redet.
Also das ist halt Authentifizierung.
Zweite Geschichte ist halt Autorisierung.
Man muss halt zusehen, dass man das, was man machen möchte,
auch wirklich machen darf.
Also dass halt, keine Ahnung, ich als Benutzer
von meinem Bankkonto Dinge überweisen darf.
Du hast die Rechte, das durchzuführen, was du möchtest.
Genau, aber es sollte jetzt nicht irgendwie, keine Ahnung, von anderen Leuten sozusagen Konten irgendwas überweisen dürfen oder so.
Und das wäre halt Autorisierung.
Ich wäre zwar authentifiziert in dem Sinne, dass die Bank wüsste, wer ich bin, aber sie muss halt auch überprüfen, bin ich jetzt autorisiert von irgendeinem anderen Konto was zu tun?
Hast du die Privilegien, das zu tun, was du tun darfst?
Da gab es ein schönes Beispiel mal bei der CeBIT.
Also die CeBIT, oh, die gibt es ja auch nicht mehr.
Ja, natürlich.
das auch irgendwie zugelassen.
In den 90ern war
die Hochzeit der CeBIT
und da...
Es war eine Computermesse.
In Hannover, genau,
gibt es ein schönes YouTube-Video
von Nixdorf,
glaube ich, selbst,
der irgendwie zu Beginn der CeBIT
gesagt hat, ich verstehe das gar nicht.
Was soll denn das? Warum hat man das
die Hannover Messe und die CeBIT auseinander
gelegt? Das ist doch eigentlich das Gleiche.
ich kapiere das alles nicht
und das ist auch interessant
vielleicht so ein Nixdorf ist dann ja irgendwie glaube ich
auf der Zebe tatsächlich an einem Herzinfarkt gestorben
und jetzt sagen
alle so, ja okay stimmt, warum haben wir das eigentlich mal
auseinandergelegt, jetzt legen wir es wieder zusammen
also ist das alles noch so
gekommen, wie es hätte von Anfang an vielleicht sein sollen
naja
nee, ich glaube die Zebe hat es einfach
das
hat halt nicht mehr funktioniert
und genau
da war es so, dass
jedenfalls habe ich das irgendwie mal gehört, ich habe keine Ahnung,
ob das stimmt, das IBM
hatte da einen Stand mit so großen Maschinen,
so Mainframes,
Z-Series
und
da
haben sie halt sozusagen einen Teil
vergessen, also sie haben halt die Autorisierung überprüft,
also da kamen halt irgendwie dann so Tieflader,
so Sattelschlepper an und
haben halt die ganze Hardware eingepackt,
das waren irgendwie Leute, die mit dem, also auf den
LKWs stand IBM drauf, die Leute, die reinkamen,
das waren alles so IBM
Arbeitsuniform
ausgestattete Leute, die hatten
irgendwie die richtigen Formulare dabei und so,
das hat alles gepasst,
haben dann den Kram mitgenommen
und
dann war er halt weg und dann irgendwann kam noch mal
die WM-Abbau-Leute,
die sich dann gewundert haben,
dass nichts mehr zum Abbauen war.
Ja, immer die richtigen Anträge,
immer die richtige Uniform.
Das Problem da ist halt so, Autorisierung war richtig,
also sie haben halt das schon überflutet, also es waren schon
das waren die Leute, die den Job hätten machen sollen.
Das ist ja nur nicht authentifiziert.
Das ist der Köpenick-Hack.
Man ist autorisiert, aber nicht
authentifiziert.
Aber man muss wirklich beides haben. Also wenn eins davon
fehlt, ist es halt schlecht. Und dann gibt es noch ein drittes,
was auch sein muss, Integrität.
Integrität ist
auch wichtig, weil ansonsten kann jemand
das manipulieren.
Kann in die Mitte setzen und winken.
Dafür hat man halt Verschlüsselungen und dafür hat man halt
auch, sind auch die Zertifikate
zuständig, damit man sozusagen weiß,
dass man auch tatsächlich mit den Leuten redet, die das
vorgeben zu sein.
Wenn man Integrität nicht hat,
dann funktioniert das auch alles nicht.
Also wenn man jetzt nicht in einem Raum sitzt
und sich gegenseitig angucken kann, ist Integrität natürlich
ein schwieriges Thema, weil ich kann mir vorstellen,
jemand kann immer so tun, als wäre er irgendjemand
und wenn er sich dann authentifizieren kann
und autorisiert wirkt,
dann kriegt
er die Befugnis und gilt auch irgendwie
als Integer. Also viele Leute machen vielleicht
den Fehler, dass sie Integrität abhängig
machen von Authentifizierung und Autorisierung.
Das ist nochmal eine getrennte Geschichte.
Und ja, wenn man diese
drei Sachen so ganz abstrakt irgendwie
auf die Reihe kriegt, dann ist es halt okay.
Und ja,
wenn nicht, dann halt irgendwie nicht.
Und dafür sind halt Zertifikate da.
Und im lokalen Netz ist es aber blöd. Da geht halt das
ganze letzten Kripp-Zeugs halt nicht,
weil man dieses Web-Challenge-Response-Ring nicht
machen kann. Müsstest du die selber
schreiben?
Natürlich kann man sich selber ein Zertifikat erstellen,
aber das Problem ist halt, dass man dann
nicht sozusagen
offizielle Zertifikate, die im Browser akzeptiert
sind, mit einem Root-Zertifikat unterschrieben, einer
entsprechenden Certification Authority. Was ist ein Root-Zertifikat?
Das ist halt das, was im Browser hinterlegt ist,
womit der Browser überprüfen kann, ob die Signatur, die eine
Certification Authority, mit dem sie ein Zertifikat
unterschrieben hat, ob die stimmt, ob die von der richtigen Certification Authority kommt.
Also das Root liegt dann wo auf dem Server?
Das Root-Zertifikat ist im Browser.
Die sind im Browser vorinstalliert.
Das heißt, die müssen bei den Browsern tatsächlich vorhanden sein
und jeder Browser bekommt sein eigenes Zertifikat?
Nee, Browser haben eine Liste von Root-Zertifikaten,
denen sie sozusagen vertrauen.
Und das sind halt einmal sowas wie VeriSign
und da gibt es diverse Firmen, die das halt irgendwie machen.
Telekom ist auch dabei, aber halt eben auch viele Provider,
teilweise ziemlich seltsame Organisationen.
Es gab da auch Leute, die versucht haben, sich da reinzuschmuggeln, teilweise erfolgreich.
Ich glaube, das war super.
Vor allen Dingen ist ein Provider irgendwie pleite gegangen,
hatte halt so ein Root-Zertifikat in den Browsern drin.
Und dann haben irgendwelche anderen Institutionen diesen Plattier gegangen,
einen Provider aufgekauft und dann lustige Sachen damit gemacht.
Einer hat versucht, in die Browser reinzukommen, auch sehr lustig.
Das war eine Spaßaktion, aber ich glaube, der hat sich genannt,
irgendwie Honest Ali,
war ein Gebrauchtwagenhändler und wollte halt auch
sein Zertifikat in den Browsern haben.
Oder Honest Ahmed, ich weiß nicht mehr genau.
Es war super lustig.
Ja, in den Browsern
sind teilweise komische Root-Zertifikate drin.
Aber
das Problem
ist halt, wie kriegt man,
der Browser muss halt irgendwo
sein Vertrauen bootstrappen.
Und normalerweise passiert das eben so, dass
die Sachen schon dabei sind. Also wenn man einen Browser installiert,
sind die Dinger halt auch schon drin. Das heißt,
wenn ein Browser
ein unterschriebenes Zertifikat sieht, dann weiß er
halt, kann er anhand der Liste der
vertrauenswürdigen Root-Zertifikate überprüfen,
ob das jetzt eine
Root-CR unterschrieben hat, die er
kennt oder nicht. Also Bootstrap heißt alles selber
einstellen. Kannst du das auch alles selber
einstellen, aber das sind so... Aber das heißt Bootstrap.
Bootstrap heißt,
dass man, man braucht halt irgendwie
sozusagen, man muss
die Unterschrift, die man jetzt
unter einem Zertifikat sieht,
ja, zurückführen auf irgendwas, was man kennt.
Sozusagen, also...
Ist das ja auch die, mit der
Unterschriebenheit passiert, der komische Ausgrund ist irgendwie auch.
Und klar, also man könnte jetzt natürlich
ein Zertifikat haben, das
unterschrieben ist von der einen und dann nochmal eine ganze Kette
von Unterschriften, aber die Frage
ist halt, irgendwie muss man
letztendlich
ja, eine haben, der man schon
vertraut und die Art, wie man
halt zu diesem sicheren
Vertrauen kommt, ist das halt schon einfach mit dem Browser
mit ausgeliefert wird.
Was natürlich, ja, das muss man halt
dann auch sicher sein, dass man den richtigen Browser bekommen hat.
Aber...
Dafür kann man ja eine Hash-Summe prüfen bei dem Runterladen
von der Seite. Ja, genau.
Ähm, ja.
Äh, genau.
Ja, alles nicht so einfach.
Ich möchte jetzt aber an der Stelle gleich kurz diese ganze
Browser-Sache so ein bisschen abkürzen, weil wir sind ja
immer noch im Python-Podcast und ich glaube, wir haben noch nicht so viel
über Python heute geredet. Ja, das ist richtig.
Ja, also Audi und Browser haben wir
irgendwie versucht zu erklären und ein bisschen, was wir
Probleme der Safari die ganze Zeit macht und was da
alles nicht so funktioniert. Es sind aber noch
einige andere Sachen, die haben nicht funktioniert, die auch mit Python
zu tun hatten. Ja.
Wobei, naja, vielleicht zuerst mal noch
eine Sache, die dann tatsächlich funktioniert hat. Also
der Server-Teil quasi,
das ist dann auch tatsächlich Python. Ja.
Django,
das hat eigentlich alles ziemlich gut funktioniert.
Ihr habt die letzte Folge von nicht gehört.
Und ja, was
ich da mache, ist
ein
Protokoll nennt sich GraphQL.
Das ist eine Geschichte, die hat Facebook irgendwann mal veröffentlicht.
Das ist tatsächlich
ziemlich nett. Also das ist halt sozusagen eine Alternative
zu, vielleicht kennt man das,
wie so REST-basierte
APIs.
Also zum Reden über JSON
Files, oder?
Ja, also
quasi, wenn man nicht eine Webseite
haben möchte, die man dem User präsentiert,
wo halt die gerendert werden soll
von dem Browser, sondern wenn man jetzt
irgendwelche Daten haben möchte
von einer API. Also heutzutage hat man oft einfach eine
Web-Applikation, die im Browser läuft,
die einem angezeigt wird und vom Server selber kommen
eigentlich nur noch so JSON-Daten.
Und die Art, wie man die vom Server holt, ist halt, man
spricht halt irgendein Protokoll mit dem Server.
Immer noch sehr beliebt und
REST an der Stelle.
Das ist halt so,
ja, wofür steht REST eigentlich?
Ist ein Rahmen, um
JSON irgendwie zu verstehen?
Nee, das hat gar nicht unbedingt was mit JSON zu tun.
Das kann halt auch ein anderes Format sein.
Das ist
Representational State Transfer
natürlich.
Ja, ja, klar.
Also man kann auch REST
Protokoll
oder eine REST-API haben, wo man
dann XML zurückbekommt oder halt
irgendwas anderes.
Oder so irgendwie
wie heißt das?
So eine Art binäres
JSON-Message-Pack oder
wie der JSON-Formate.
JSON wird meistens
verwendet, aber ist nicht unbedingt nötig.
Also zum Beispiel, wenn man jetzt
Django REST-Framework als
Modul oder
Third-Party-Django-App verwendet,
die den REST-API-Teil macht,
dann kann man hinten an die
Requests einfach Fragezeichen, Format gleich,
irgendwas dranhängen, wie zum Beispiel JSON oder XML
und dann kriegt man halt XML statt JSON zurück.
Also das ist eigentlich
unabhängig von dem Format. Das Entscheidende bei REST
ist eigentlich, dass man die HTTP-Werben
benutzt, um mit dem
Server zu kommunizieren. Also dass man,
wenn man jetzt
Dinge haben möchte,
also eine Liste von Sachen haben möchte
und das auf dem Server an dem
State des Servers nichts ändert, dann verwenden wir halt
ein Get-Request. Wenn man
Requests macht, die an dem State irgendwas verändern,
dann muss man halt Post oder Put
oder Patch-Requests verwenden.
Und wenn man
irgendwas löschen möchte, dann sendet man halt ein
Delete-Request. Ja, die meisten Leute
kennen ja wahrscheinlich nur Get und Post.
Ja, aber es gibt halt dann noch eine Menge
andere Dinge. Und
ja,
diese Sachen benutzt man im Grunde,
um halt mit dem Server zu kommunizieren
und man benutzt halt auch die HTTP-Status-Codes.
Das heißt, wenn einer nicht authentifiziert ist,
kriegt man 401 zurück.
Wenn man nicht autorisiert ist, kriegt man 403 zurück.
Wenn man eine T-Kanne ist, kriegt man 407 zurück.
Das gibt, glaube ich, oder 409, 15, ich weiß es nicht genau.
Das ist halt irgendwie eine Fehlermeldung,
heißt eine T-Port.
Es gibt manchmal so...
Ich kenne nur andere Schöne, nicht nur das Jahr.
402 kennt mir noch einen, ja.
Ja, den kenne ich gar nicht.
Was macht 402?
Payment Required.
Ah, ja, genau.
Also es gibt da diverse...
Wurde nie benutzt, aber ich habe ein T-Shirt,
da habe ich mir das draufgeschrieben.
Das ist eine gute Idee.
Ja, und das ist im Grunde Rest.
Das ist auch eine sehr schöne Sache.
Ein bisschen ein Nachteil bei Rest ist halt,
dass man manchmal so das Problem kriegt,
wenn man jetzt so genestete Daten,
also Datenstrukturen, die so ineinander verschachtelt sind,
abfragen möchte.
dass es dann manchmal
etwas schwierig wird und man oft dann halt mehrere
Requests braucht.
Und also wenn man
jetzt, weil oft
so diese Resta-APs direkt auf Tabellen
mappen, die halt irgendwie in der Datenbank sind,
das macht das Ganze manchmal so ein bisschen
schwierig und dann kann es dazu führen, dass man halt sehr viele
Requests rausschicken muss zum Beispiel.
Da muss man sich immer die Deep Links dann besorgen für den
neuen Request, damit dann die Tabelle vollständig wird,
die man selber haben will. Ja, oder man hat halt
in der Tabelle jetzt nur eine ID, eine
Referenz auf eine andere Tabelle drinstehen sozusagen.
Man möchte aber eigentlich die gesamten Daten
haben, dann muss man sich erst
alle IDs holen, dann schickt man die IDs wieder zum Server
und holt die neuen Objekte, was halt ein bisschen doof ist.
Man kann das auch so machen,
dass es halt,
dass man direkt die Daten bekommt, die man haben möchte,
aber dann muss man auf dem Server
das halt auch so hinbauen,
dass das so geht.
Und vor allen Dingen ist es halt unveränderlich.
Man kriegt halt immer das gleiche Ergebnis,
unabhängig davon, ob man jetzt das braucht oder nicht.
Man kann das jetzt zum Beispiel, wenn man jetzt in den Server
reinbaut, okay, du kriegst jetzt nicht nur
irgendwie die Liste der IDs,
sondern du kriegst halt direkt dann schon
genestet da drin die Datenstruktur, die du eigentlich
haben möchtest. Also nehmen wir an, du hättest gerne
eine Liste der
der, der von
aller Alben, die du hast
und jetzt hast du aber nicht nur
die Track-IDs da drin, sondern halt auch
Interpret und Dauer oder sowas.
Ja, der Vorteil, den das natürlich hat, wenn man die
nicht direkt alle mitschickt, ist, dass natürlich die Datenmenge,
die man bekommt, nicht so riesengroß ist. Ja, aber jetzt nehmen wir an,
du hast einen kleinen zwei
Ansichten. Eine
zeigt halt nur, welche Alben es gibt
und eine zeigt halt auch die Interpreten
und die Dauer, jetzt nehmen wir an,
an.
Jetzt kannst du, da hast du mehrere
Möglichkeiten, das zu lösen. Du kannst jetzt zwei unterschiedliche
API-Endpoints, also Endpunkte, anfragen,
wo du halt einmal das ohne die Tracks kriegst
und einmal mit. Dann hast du aber das Blöde,
da hast du zwei Endpunkte. Du musst halt zweimal irgendwie
den Endpunkt implementieren.
Du kannst es so machen, du schickst halt immer alle Daten,
das heißt Alben inklusive Tracks,
aber dann schickst du einmal zu viel Daten.
wenn du die Tracks gar nicht anzeigen möchtest.
Oder
du schickst halt nur die Liste
der Alben mit den IDs für die Tracks
und dann musst du halt einen zweiten Request machen,
um die Tracks zu bekommen
oder die Metadaten für die Tracks.
Und
dann hast du das Problem, dann überträgst du
zwar nicht zu viel Daten, aber dann hast du halt
Latenzen, die sich
aufaddieren, weil du immer noch mal
einen Roundtrip hast pro
Album.
interpretiert, ja. Du kannst auch vielleicht alle
Geister, die kriegen oder so, aber du hast auf jeden Fall nochmal einen.
Und es kann halt dann auch viel komplizierter werden, wenn du jetzt noch
mehr verschachtelte Geschichten hast. Und GraphQL kann
das. Und GraphQL löst
dieses Problem. Ja, tatsächlich
ziemlich elegant. Und
da kann man halt sozusagen auf der kleinen
Seite bestimmen, was man gerne hätte. Man schreibt halt,
ja, das ist halt der große Unterschied im Grunde.
Bei normalen Rest
APIs
kriegst du halt immer das Gleiche.
Du kannst halt in den Request nicht reinschreiben, was du gerne
hättest, sondern du kriegst halt
das, was der Server vorsieht, was du
auf diesem Endpunkt halt bekommst an Daten
und bei GraphQL kannst du in die
Query reinschreiben, ich hätte gerne diese Spalten
und ich hätte gerne, das soll jetzt genestet sein
und dann noch diese Relation mitverfolgen
und dann da die Spalten aus der
Tabelle und so. Macht natürlich die Query
ein bisschen länger und komplexer. Macht die Query komplexer
und ja, ist natürlich
auch auf der Serverseite so ein bisschen schwieriger,
weil man muss so aufpassen, dass man nicht
sich da so durch die ganze Datenbank hangeln kann,
wenn man da jetzt irgendwie die ganzen Relationen auflöst.
Aber es ist halt tatsächlich auch oft sehr praktisch.
Und ja, was man halt auch, also das ist halt ein, das Projekt hat,
das Protokoll hat Facebook irgendwann mal, glaube ich, intern entwickelt.
Und dann sind sie irgendwann, dann haben sie das zum öffentlichen Standard gemacht,
weil sie halt das Problem haben mit ihrer App, dass sie ganz viele Abfragen machen
und dann halt die gleichen Daten an unterschiedlichen Stellen brauchen,
aber dann halt nicht genau die gleichen Daten.
Und das ist halt alles, irgendwann haben sie gemerkt, so mit dem Rest kommen die hier nicht weiter.
und haben sich ja was eigenes überlegt, was sozusagen ihre Probleme da adressiert.
Und ja, GraphQL kann auch andere coole Sachen.
Da kann man halt solche Sachen machen wie, man kann diverse Statements, Queries zusammenfassen.
Das heißt, man macht zum Beispiel solche Sachen wie, alle 10 Millisekunden sendet man halt irgendwie eine Querie raus.
Das heißt, man sendet nicht jedes Mal, wenn eine Querie gestellt wird, im Client irgendwie eine Anfrage raus,
sondern man sammelt alle Queries, dann packt man die in eine große Querie
und die man dann rausschickt
und kriegt dann die Antwort und dann kann man halt dafür sorgen, dass
zum Beispiel nur
in bestimmten Intervallen irgendwie Sachen in den Server
geschickt werden, was halt dann die Anzahl der Requests
auf dem Server reduziert und so. Also da sind
einige sehr nette Optimierungen drin
und
für Django gibt es
eine Bibliothek, die nennt sich Graphene,
die man da verwenden
kann und das ist tatsächlich
ziemlich nett
und dann hat man
sozusagen GraphQL
Protokoll-Unterstützung
auf Django-Seite und
da gibt es noch ein sehr schönes Frontend,
das man da auch verwenden kann, das nennt sich
Graphical.
Das ist sozusagen
so ein grafischer Browser für, dann kann man dann halt,
das macht er auch so
TabCompletion auf den
Queries und so
EQL
mit Q
naja, egal, genau.
es ist halt dieses Frontend.
Und genau, ich habe eigentlich
so die letzten Jahre meistens Rest gemacht,
aber
und GraphQL mache ich jetzt noch nicht
so lange, aber ich muss sagen, es ist
doch sehr, sehr nett. Was teilweise
so ein bisschen ätzend ist, ja, es macht
es halt alles komplizierter, es ist halt mächtiger
oft und das macht es halt auch
kompliziert, was auch komisch ist,
für jemanden, der aus dem Rest,
aus der Restwelt kommt, sozusagen,
ist auch, dass HTTP-Werben keine große Rolle mehr spielen.
Das heißt, man schickt immer Posts an den Server
und man bekommt eigentlich fast immer 200 zurück.
Und das war am Anfang immer so beim Debuggen.
Wenn irgendwas nicht funktioniert hat,
dann gucke ich so in den Network-Tab im Browser
und dann halt so, kommt 200 vom Server zurück.
Und ich denke mir, da kommt noch ein 200 zurück.
Warum ist denn das ein Fehler?
Dann so, ja, okay, man muss die Antwort erst aufmachen.
Dann steht da drin so, ja, also hier ist dein 200
und hier ist der Body deiner Response.
da steht halt drin, ja, jetzt ist ein Fehler passiert.
Wenn man aufs Rest kommt, dann rechnet man nicht damit,
weil da ist halt ein Fehler.
Das ist halt schon was anderes, das ist halt nicht 200.
Ja, aber
wenn man sich dann dran mal so ein bisschen gewöhnt hat,
dann ist das auch nicht mehr so schlimm.
Und da gibt es auch
tolle Debug-Geschichten
für den Browser, wo man das dann halt auch wieder
ordentlich sehen kann.
Da muss man sich allerdings dann als Browser-Extension
installieren. Also zum Beispiel für, ich verwende
als Client Apollo, der Apollo-Client.
Und da gibt es dann so eine
Extension für Chrome.
Es gibt
einen Client von
Facebook selber, Relay-Client.
Der ist
ja, den habe ich nicht ausprobiert.
Der ist relativ vollständig, soll sehr mächtig
sein, aber
es gilt auch als nicht so ganz
einfach zu bedienen. Und ich fand ehrlich gesagt Apollo
schon ziemlich schwer zu bedienen.
Wenn der Jochen das sagt, dann lege ich mir den Finger auf.
Nein, nein, das Ding ist eigentlich gar nicht
schlecht. Es kann wirklich coole Sachen, aber
das ist schon so
wirklich, also es kann auch daran
liegen, dass ich halt mit JavaScript noch nicht so richtig
super viel Erfahrung habe, aber die
API davon fand ich schon teilweise
boah, so. Schon wirk.
Nö, das ist einfach schwierig,
aber was halt auch damit zusammenhängt, dass es eine komplexe
Geschichte ist. Also es
cached halt auch ganz viel intern und
wenn man jetzt irgendwie zum Beispiel, wenn der User
irgendwie eine neue
Entität von irgendwas erzeugt,
dann muss man ja dafür sorgen, dass der Cache geupdatet wird,
jetzt kann man einfach dieses Query nochmal ausführen
Und dann hat man ja Latenz im Frontend,
das will man auch nicht. Und dann kann man
quasi dem Cache sagen,
also hier, ich bin mal
optimistisch, das ist das Ergebnis,
was wahrscheinlich demnächst vom Server zurückkommt.
Ich zeige das dem User doch schon mal an.
Oder man kann
den Cache direkt manipulieren
und dann wird das halt automatisch ersetzt,
wenn dann die richtige Antwort vom Server kommt
und so. Aber wenn dann irgendwie
eine Fehlermeldung passiert, dann muss die ja natürlich auch wieder hochbabbeln.
Also,
ja. Nee, ihr müsst die babbeln.
dem muss ja dann auch
der User wieder angezeigt werden.
Das ist alles so ein bisschen...
Aber nee, es ist schon
nett. Und ich glaube, wenn ich jetzt
nochmal die Wahl hätte, wenn ich bei einem neuen
Projekt, ob ich da jetzt Rest nehme oder
GraphQL, würde
ich wahrscheinlich tatsächlich zu GraphQL trainieren.
Weil das halt doch einige
sehr nette Vorteile hat.
Und ja, also
insofern, das ist
halt vielleicht ganz
interessant zu wissen, dass man nicht unbedingt auf
Node.js-Server umsteigen muss,
wenn man GraphQL machen will, sondern dass das mit Django
und Graphene halt auch eigentlich ziemlich gut geht.
Okay. Ja.
Werden wir unbedingt in den Show-Notes erwähnen.
Ich würde sagen, jetzt haben wir ja so ein bisschen das Server-Thema weg.
Vielleicht kommen wir jetzt noch ein bisschen weiter, wieder in die Python-Welt
zurück, schlagen uns auf einen Bogen,
was alles nicht so funktioniert. Wir hatten am Anfang
erwähnt, Pandas-Requests,
Respy mit Hass.
Was ist am nächsten?
Ja,
die Pandas-Geschichte ist eigentlich auch ganz
Das ist ganz interessant.
Das ist ja eine superpopuläre
Bibliothek.
Die kenne nur ich.
Es ist halt quasi
so ein bisschen Excel für
Python, für Programmierer.
Und ja, ist auch alles
sehr nett und so, aber
man stößt
halt irgendwann auch irgendwie an die Grenzen
und da hatte ich halt auch schon
irgendwie Ärger mit.
ich habe irgendwie, das ist jetzt
auch schon ein bisschen was her, aber
viel
mit Pandas gemacht
und vor allen Dingen viel mit Pandas und Hadoop
irgendwie Sachen,
Datenstrukturen aus Hadoop irgendwie in Pandas
verwenden wollen und
ja,
tatsächlich
waren da nicht alle Dinge nur
die Schuld von Hadoop.
Was man ja denken könnte, ja.
Ja, was auch, also
Hadoop ist schon
auch speziell und
da gibt es viele Geschichten, die da nicht so gut
funktionieren, aber eben bei Pandas gibt es
auch Probleme und
das ist auch schon ganz
alt, der
Gründer des Pandas-Projektes
Wes McKinney hat irgendwann mal
einen Vortrag, glaube ich, gehalten
10 Things I Hate
About Pandas und das hat er
jetzt nochmal aktualisiert
das ist jetzt aber auch schon über ein Jahr her,
in einem Blogartikel,
den er, glaube ich,
betitelt hat mit 10 Things I Hate About Pandas
und das Apache Arrow
Projekt,
was halt so ein bisschen diesem ganzen Kram Abhilfen
schaffen soll.
ja, also Pandas kann so diverse
grundlegende Geschichten nicht. Also wie zum Beispiel
so ein Problem ist halt, oder
sagen wir mal so, das ist sogar eher ein Problem
von NumPy, was unten drunter liegt.
So Null-Werte
gehen halt nur wirklich schön mit
Float.
Wenn man jetzt Integer-Spalten hat
und hat dann Null-Werte drin.
Aber NumPy kann auch Nullen.
Also fehlende Werte irgendwie.
Also nicht definierte
Werte sozusagen. Dann hat man
ein Problem, wenn man das nicht
quasi... Das gibt's halt
nicht.
Und das ist ja so ein bisschen schlecht, weil es gibt die ja schon.
Kann man sich überlegen, wie man das irgendwie
kondiert. Schreibt man da vielleicht minus 1 rein
oder so. Aber wenn minus 1
irgendwas bedeutet, dann ist das halt doof unter Umständen.
Oder man kann sich eine beliebige
andere Zahl ausdenken, die man dann da reinschreibt.
Aber man kann halt eben nicht none
reinschreiben. Das geht halt nicht.
Aber gibt es da nicht dieses
none, also dieses, ich meine dieses
numpy none? Ja, das geht nur bei float.
Das geht nur bei float? Ja.
Okay. Und ja,
das ist halt so ein bisschen doof.
Ja, dann...
Das geht nur bei Float?
Ja.
Ich muss einfach kurz in das Nampai-Kapitel reinschauen.
Ich will gerade nämlich so ein Nampai-Buch liegen.
Ja, aber bitte erzähl weiter, warum das doof ist.
Ja, also vor allen Dingen, wenn man jetzt zum Beispiel in Hadoop irgendwie Daten hat,
die das können und wo man halt irgendwie Datenformate hat, die das halt unterstützen,
und dann hat man halt fehlende
Werte irgendwie und möchte das jetzt
in den Dataframe pumpen, dann
kriegt man halt Probleme, wenn das halt nicht funktioniert.
Und dann
ist das halt auch alles so ein bisschen
schwierig.
Es gibt halt dieses
Apache Arrow-Projekt, das ist halt vielleicht auch ganz interessant,
wo es darum geht, quasi diese
ein einheitlichen
Datencontainer zu haben,
den man halt dann von unterschiedlichen Sprachen aus benutzen kann,
also auch von R oder von C++ oder halt eben auch von Java aus.
Und das geht halt mit NumPy so nicht.
Und ja, also insofern hat man da, wenn man heutzutage Pandas verwendet,
noch eine ganze Menge Probleme.
Apache Arrow.
Arrow ist halt sozusagen das Projekt,
das diese Geschichten mittelfristig mal so alle irgendwie in den Griff kriegen soll.
Und damit könnten dann so wirklich coole Sachen gehen,
du hast halt die Daten
tatsächlich nur einmal, also das ist auch sowas
zum Beispiel, was in Pandas eigentlich nicht geht.
Du kannst halt nicht so
Daten
memory mapped in einem DataFrame haben.
Also nehmen wir an, du hast halt Daten, die sind
zu groß für deinen Hauptspeicher.
Jetzt
möchtest du dir möglicherweise
teilweise immer nur so in den Hauptspeicher mappen,
dann darauf irgendwas machen
und dann irgendwas anderes in den Hauptspeicher mappen.
Aber du kannst halt nicht ein komplettes
Pfeil, weil es einfach zu groß ist oder so in den Hauptspeicher lesen
Wenn mein Hauptreich jetzt nicht groß genug ist,
dann geht das denn heute.
Ja, doch, da gibt es das tatsächlich.
Oder es ist halt so,
es gibt auch andere Gründe,
weswegen man das jetzt nicht unbedingt
in den Hauptspeicher laden möchte.
Ja.
Trink noch einen Schluck.
Oh ja.
Aber so kann man sich das
vielleicht ganz gut vorstellen, dass das halt
ein Problem ist. Und das kann man mit
Pandas auch nicht machen.
Und also
in Zukunft, was so richtig schön wäre,
ist halt,
du hast
jetzt nehmen wir an die Daten,
die in so einem Hadoop
Pocket-File
irgendwie liegen.
sozusagen
in einem Container
drin, den du halt von allen Sprachen aus
ansprechen kannst. Dann kannst du halt irgendwie mit
A deine Analysen drüber fahren
und halt mit
Python und Pandas,
beziehungsweise halt irgendwelchen
Machine Learning Bibliotheken
kannst du es aber auch
irgendwie von Java aus
ansprechen oder so. Und du musst
dieses Ding nur einmal im Hauptsprecher halten und nicht
für jede Sprache neu.
Weil das ist halt das, was man momentan macht. Man liest es halt dann
Pandas irgendwie in den DataFrame ein,
transformiert dann auch irgendwelche Geschichten, weil
halt solche Dinge wie
None für
Integer gibt es halt nicht. Und dann machst du
das halt in jeder Sprache nochmal. Das heißt, du
hast den Speicheraufwand für jede Sprache,
die du dann benutzt, weil du das in den Hauptspeicher laden musst.
Und die Repräsentationen sind dann auch noch
leicht unterschiedlich,
weil halt bestimmte Sachen nicht gehen.
Und dann kommen halt bei Analysen irgendwie unterschiedliche
Sachen raus und das ist alles schrecklich.
Und dann sagen Leute sowas wie, ja, halten kann das halt nicht
oder keine Ahnung.
R ist halt irgendwie doof
oder Java hat es wieder verlockt.
Aber eigentlich, genau,
wenn man jetzt eine gemeinsame Infrastruktur
darunter hätte, die sich darum kümmert,
dann wäre das alles deutlich einfacher.
Und das soll
Apache Arrow mal werden.
Das ist jetzt schon eine ganze Zeit,
ich habe das halt im Zuge meiner
Hadoop-Geschichten
halt auch mal kennengelernt,
weil ich hatte halt das Problem, also mein Hauptproblem war,
dass ich Daten nicht schnell aus dem Cluster rausgekriegt habe.
Und da mit Apache Arrow konnte ich halt diese HDFS-Files halt direkt lesen.
Und das war, ich weiß nicht, na gut, da musste man auch noch Bibliotheken verwenden, die das dann halt konnten.
Aber ich kriegte das halt irgendwie in eine Arrow-Datenstruktur und daraus dann wieder in DataFrame.
Und dann ging es halbwegs.
Aber da wird aktiv dran entwickelt.
Ich glaube, das ist auch mittlerweile so Wes McKinney's Hauptprojekt, denke ich mal.
Und das wird
eine super interessante Geschichte in der Zukunft.
Ja, und das soll
halt sozusagen einige der Hauptschmerzen,
die man mit Pandas so heutzutage hat,
irgendwie in den Griff kriegen.
Ja, das
ist vielleicht ganz interessant,
sich das mal anzugucken.
Okay, Apache Arrow als Lösung für Pandas-Probleme.
Ja, gehen wir vielleicht zum nächsten
Punkt.
Ja, genau, so Web-Parsing.
Also vielleicht, da sollen wir auch mal irgendwann eine komplette
Episode zu machen oder so.
aber es ist ja so ein Problem, was man immer wieder hat,
dass man irgendwelche Seiten scrappen möchte oder so.
Wie machst du das so generell?
Nimmst du eine wundervolle Suppe?
Beautiful Soup.
Ja, das kommt auch immer noch mal vor,
dass man das für irgendwas verwendet.
Aber nee, meistens benutze ich jetzt tatsächlich
eine Bibliothek namens Requests.html.
Das ist von dem gleichen Autor wie auch Requests.
Also die Standard-Bibliothek.
Nee, ist nicht Standard.
Also nein, Request ist die Standard.
Ja, genau.
Kenneth Wrights.
Und
das
Ding macht halt
über Requests
selbst hinausgehend ein paar Sachen,
die ganz interessant sind und die man vor allen Dingen
halt dann braucht, wenn man irgendwie so
Seiten scrapt.
Jetzt habe ich das einfach schon ein bisschen leerer gemacht.
Ja, das war super.
gesehen. Die Flasche war so dunkel. Zum Wohl. Prost. Toll. Ja, und zwar hat man halt mal so
Probleme wie, naja, man möchte jetzt irgendwelche Dinge aus dieser Seite, die man irgendwie geladen
hat, rausselektieren. Man möchte irgendwie, naja, manchmal sind die Seiten dann so ein bisschen
unterschiedlich oder dann geht das nicht so gut. Mit Beautiful Soup kann man da ein bisschen was
bauen. Das Problem ist halt,
dass sobald das nicht mehr
so die Seiten nicht
komplett gleich sind, dann wird das mit Beautiful Soup
auch schon irgendwie so ein bisschen schwierig.
dann muss man jeweils ein eigenes Skript
schreiben für jede einzelne Seite. Ja, kann man natürlich machen
für jede einzelne Seite oder für, machen wir einfach
Faltunterscheidungen oder so.
Es gibt eine saukoole Geschichte,
das ist
tatsächlich auch ein
Packmodul, das
wirklich cool ist, nennt sich Path.
Und das kann man auch noch für andere Sachen verwenden,
aber in diesem Web-Scraping-Umfeld kann man es für eine Geschichte verwenden.
Das hatte ich früher als Idee auch schon immer mal.
Also wenn man sich vorstellt, wie eine Webseite generiert wird,
dann hat man ja irgendwie so ein Template und dann eine Datenbank.
Und dann wird dieses Template ausgefüllt, meistens mit Werten aus der Datenbank.
Und selbst wenn man jetzt
Seiten hat, die so ein bisschen unterschiedlich sind,
dann ist das doch meistens irgendwie dasselbe
Template.
Und
ja, jetzt
dachte ich früher immer schon so,
und dann habe ich dann auch gemerkt, das haben Leute
schon implementiert, Leute haben sich überlegt, okay, wenn ich jetzt mehrere
Seiten habe, dann kann ich doch vielleicht, kann ich das
Template daraus extrahieren, kann ich es sozusagen
im umgekehrten Prozess machen.
Wenn ich das Template habe, dann möchte ich einfach nur alle
Werte haben, sozusagen, die aus der Datenbank kommen,
wenn ich die Datenbank wieder zurückbekomme.
Und
da gab es
einige, da gab es auch auf dem ursprünglichen
Auto von Django
irgendwie eine Bibliothek zu,
die aber schon lange nicht mehr gepflegt wird,
die sozusagen
automatisch rausfinden soll, was das Template ist
und so.
Und diese
Path-Bibliothek ist aber jetzt eigentlich, das ist
sau cool, da schreibt man im Grunde
sozusagen sein Template irgendwie rein.
Man kann auch damit relativ leicht rausfinden, wie
das Template denn eigentlich aussieht.
Und dann gibt einem das sozusagen die Werte wieder zurück, sozusagen.
Und das muss man sich mal, also kann man sich mal angucken, wie das genau funktioniert.
In dem Request.html-Paket gibt es dann so ein Search-Kommando, wo man das dann halt verwenden kann.
Und das löst dieses Problem zum großen Teil, Sachen aus einer Seite rauszuparsen, irgendwie.
Ja, und dann kann es halt, das ist ein Teil, man möchte halt irgendwie sozusagen da irgendwelche Werte aus einer Seite rauslesen und eine andere Geschichte, die man halt auch immer wieder hat, ist, wenn jetzt da JavaScript drin steht, dann möchte man eigentlich eine gerenderte Version der Seite sehen.
Man möchte halt nicht das HTML sehen, weil oft kriegt man dann halt nur so Grundgerüst an HTML, irgendwie einen Haufen JavaScript und JSON-Daten und dann weiß man aber nicht, was man damit irgendwie machen soll, weil man eigentlich die Daten haben möchte, die dann hinterher, wenn der Browser das rennt, in der Tabelle angezeigt werden oder so, weil die Tabelle ist dann nirgendwo mehr.
Und dafür gibt es bei Requests.html auch so eine relativ schöne Geschichte,
nämlich, also das ist noch so ein bisschen hakelig manchmal,
aber da ist so ein Headless-Browser mit drin.
Also gab es auch früher alles schon.
Es gibt irgendwie, na, wie heißt das Ding?
Diese Java Selenium als Interface.
Es gibt PhantomJS.
Es gibt ja diverse Geschichten, die man benutzen kann,
die halt alle so eine leicht andere API haben und so.
Das ist immer ein bisschen schwierig.
Chromium hat eine ganz schöne API die man benutzen kann, aber es ist alles irgendwie, naja, nicht so doll.
Für JavaScript gab es eine Bibliothek namens Puppeteer und dafür gibt es eine Python Adaption namens Pipeeteer
und das ist eingebaut in Request-HTML und das ist halt alles relativ schön verbastelt, sodass man davon nichts mitkriegt.
Also was das Ding dann tatsächlich tut, man sagt so, führ doch mal JavaScript auf dieser Seite aus und rendere mir das
das und man kann halt über eine API sagen,
gib mir einfach ein Bild
dieser Seite oder man kann sagen, gib mir
irgendwie den gerenderten DOM dieser Seite
oder gib, hier ist ein Stück Schnipsel-JavaScript,
führe das mal im Kontext dieser Seite
aus
und dann, was
Requests.html macht, ist, es lädt halt ein Chromium
runter und es bastelt
das alles so zusammen, dass es irgendwie funktioniert
und es rendert halt dann
die Seite und gibt einem das Ergebnis zurück und das Ganze
sogar mit einer asynchronen
API, sodass man das halt alles so
ein SNGIO-Umfeld
verwenden kann.
Und man hat mit diesem ganzen Stress, den man
normalerweise dann so hat, hat man nicht mehr viel zu tun,
was sehr nett ist.
Und das funktioniert tatsächlich sehr gut.
Also früher habe ich, ich habe mich damit
so oft mit irgendwelchen Kramen
rumgeschlagen.
Teilweise muss man dann
ein Webkit kompilieren und
dann
gab es da diverse Geschichten. Es gab noch Splash
früher mal. Es gibt eine ganze
die Leute, die auch Scrapey bauen.
Da gibt es eine Firma dahinter, die haben da diverse Services, die sie anbieten.
Da kann man auch irgendwie
Scraper irgendwie erstellen. Ich glaube, ein Tool heißt Porter,
wo man dann auch sagen kann, was auf einer Seite wo ist und so.
Die haben auch so einen Proxy namens Splash, wo man dann halt quasi über so einen Proxy
einen Headless-Browser hat, mit dem man dann irgendwas machen kann. Da kann man dann auch irgendwie
JavaScript in der Seite injizieren oder irgendwelche Sachen
rausparsen. Aber das war alles immer
ziemlich ätzend. Kannst du noch mal ganz kurz
erklären, was Scrappy denn genau macht im Vergleich?
Ja, Scrappy ist
im Grunde so eine
Komplettlösung mehr oder weniger.
Da kommt es dann auch noch mehr auf
den Crawling-Teil im Sinne von
ich habe hier ganz viele
URLs, die ich abfragen möchte und dann
muss man daraus irgendwie
durchgehen, muss halt irgendwie
mehrere Prozesse haben, die halt da
irgendwie
die die Seiten holen und so, dafür ist das halt
eher gedacht, halt, dass man
quasi wirklich eine komplette
Seite halt irgendwie mal so da drüber
läuft, über alle Unterseiten, die es da so gibt.
Ja,
da ist aber nicht so viel, also wenn es
darum geht, da Informationen aus einer Seite zu holen, das muss
man dann alles mehr oder weniger selber schreiben
und dann, das kann man dann per Beautiful Soup
tun oder LXML irgendwie,
also das ist auch sowas bei RequestHTML,
das ist der Standardweg,
wie man da Elemente selektiert oder so,
ist über CSS-Selektoren.
Das ist auch sehr angenehm, weil das macht man ja im Browser normalerweise auch so.
Auch im JavaScript-Bereich.
Ja, und
Scrapey gibt
eine ganze Menge Infrastruktur,
wenn man jetzt so einen Scraper bauen möchte.
Aber
vom Inhalt her hilft einem das gar nicht so viel.
Wenn man jetzt eine konkrete Seite hat und da irgendwelche Sachen
rausziehen möchte, dann
hilft einem Scrapey da nicht.
Wenn man jetzt rausgefunden hat, wie man das tut,
Möchte das jetzt skalieren auf, keine Ahnung,
100.000 Seiten und möchte das mit 5 Prozessen
auf irgendeinem Server irgendwie, dann
ist Scrappy auch wieder eine sinnvolle Geschichte.
Ja, und
es gibt halt irgendwie eine Firma, die ganz eine Menge
Services um diesen Kram herum baut.
Ja, habe ich jetzt
auch wieder vergessen, aber sagen wir mal so.
Ich habe schon für diverse
Firmen Sachen gemacht oder auch schon für Firmen
gearbeitet, die halt auch damit immer wieder Probleme hatten.
Scrapping
ist halt so ein Ding, was immer wieder auftaucht, was man
immer mal wieder machen muss.
Und request.html ist tatsächlich so die angenehmste Lösung für dieses Problem,
das mir bisher über den Weg gelaufen ist.
Deswegen wollte ich das mal erwähnen, dass es das gibt und dass es halt nett ist.
Und genau, wenn man halt das Problem hat, das Template zu extrahieren,
aus solchen Seiten Sachen rauszuparsen,
dann sollte man sich diese Parse- und Search-Funktion in request.html mal angucken,
weil das ist echt sehr nett.
Ja, genau, das war es im Grunde schon.
Ja, dann würde ich sagen,
kam mir ein Request mit Pass.
Nächstes Thema war
der Hass mit dem Raspberry.
Was ist da passiert? Ist was kaputt gegangen?
Chaos vor Weihnachten.
Ja, genau, das ist irgendwie schade.
Das Grundproblem war
irgendwie, das habe ich auch schon
seit über einem Jahr
habe ich das Problem, dass
ab und zu das Vectoring auf meinem
DSL-Anschluss ausfällt.
Aha, das liegt an dem DSL-Anbieter?
Ich weiß ehrlich gesagt nicht so genau, woran das liegt, aber ich sehe halt, dass es passiert. Ich habe so eine Fritzbox, da kann man dann sehen, quasi da steht dann irgendwie, G-Vektor ist irgendwie aus oder so, da kann man irgendwie nachgucken, was das bedeutet und dann so, ja, das Vectoring ist aus.
Kurz für unsere unwissenden Hörer, was ist Vectoring?
Ach Gott, Vectoring, das ist so ein Kuppel.
Wir haben ja in Deutschland
diese
unvergleichliche Klingeldrahtkupfer
irgendwie
Telefoninfrastruktur.
Vielleicht nicht mehr so ganz zeitgemäß ist,
aber liebevoll auch ins 21.
Jahrhundert irgendwie gerettet wurde.
Weil, ja,
dass es natürlich für die Telekom
irgendwie angenehmer ist,
Gewinn zu machen mit Dingen,
die der Bund mal investiert hat, mit Geld, das der Bund mal
investiert hat und dann mit der Endversorgung weiter Geld zu verdienen.
Eine Kupferleitung und nicht irgendwelche neuen Glasfaser.
Wenn man da selber was investiert, wäre das nicht so.
Naja, auf jeden Fall, das Problem ist,
dass bei Kupfer
ist halt irgendwie relativ schnell Schluss,
so mit das aktuelle DSL.
DSL-Technik zieht da schon so alles,
was man so an
Tricks machen kann, um da mehr Daten drüber zu kriegen,
wird halt gemacht.
Also alles Kabel, was man da in die Erde verlegt hat,
ist quasi voll.
Ja, also da geht einfach nicht mehr drüber.
Dass man einfach an den physikalischen Grenzen, was man da machen kann.
Und naja, das Einzige, was dann halt noch blieb, ist sozusagen sich Frequenzen irgendwie mit anderen zu teilen, so ein bisschen.
Solange die nicht benutzt werden, benutzt man die halt dann mit.
Was dann aber dazu führt, dass man auf der Seite, wo man einen Anschluss hat, das muss halt alles aus einer Hand kommen.
Wenn jetzt sozusagen
man zwei unterschiedliche Provider hat,
ja, also man hat
immer, das Telefonkabel
geht so von dieser TAE-Dose, die man an der Wand
hat, geht halt zu irgendeinem
Gerät von dem Provider
sozusagen in so einem...
Zum HVT oder zum
Hausanschluss und dann zum HVT.
Ich weiß gar nicht, wie man das nennt.
Das ist halt irgendwie so ein grauer Kasten auf der Straße.
Wenn die brummen und da Lüfter drin sind,
dann ist das gut. Dann ist das wahrscheinlich irgendwie so schnelleres DSL,
als wenn das nicht brummt.
Da ist irgendwie so eine Art Switch oder weißer Teufel
irgendwie sowas drin, wo halt
das Telefon-Dings da ankommt.
Und
wenn man jetzt Vectoring macht, dann
bedeutet das halt sozusagen, wenn
auf der anderen Leitung sozusagen niemand
gerade irgendwie Daten überträgt,
dann
gehe ich in einen Modus, den ich eigentlich normalerweise
nicht nehmen darf, weil ich
ansonsten quasi dem
in die Daten reinfunke.
Also wenn beide das machen würden, würde das schief gehen.
Das heißt, man muss sich irgendwie absprechen.
ist halt sagen, okay, solange niemand anders irgendwie Daten sendet,
kann ich das halt machen, dann wird es halt schneller.
Und ja, so kriege ich dann halt über diese Kupferleitung
dann doch noch wieder mal ein bisschen mehr rüber.
Das Problem ist halt dann aber,
dass quasi ich nicht mehr sozusagen ein Endgerät
von unterschiedlichen Providern haben kann,
sondern da das ja koordiniert werden muss,
dass ich das sozusagen nur machen kann,
wenn ich alle Leitungen unter einer Kontrolle habe,
Bedeutet, die Hardware muss aus einer Hand kommen
und es muss eine Stelle geben, die das kontrolliert.
Das ist üblicherweise die Telekom.
Und das heißt, ich habe meinen Vertrag bei O2,
aber mein Anschluss läuft über die Telekom-Hardware,
weil sich das ja mit allen anderen Anschlüssen
irgendwie koordinieren muss jetzt.
Ja, alles ein bisschen furchtbar.
Ich meine, es stört mich auch nicht weiter.
Es funktioniert halt irgendwie.
Es ist auch tatsächlich schneller.
Insofern ist alles gut.
Aber bei mir war es halt so,
das fiel halt so alle paar Wochen aus
und war dann halt weg und fiel dann halt nicht
zurück auf VDSL, was so
50 MBit down, 10 MBit up ist,
sondern auf 16 MBit
oder 14 MBit down
und 768 KBit up.
Also auf 2002 oder so.
Ja, was für mich jetzt echt blöd ist,
weil ich das ja, das brauche
ja, ich brauche ja die
Bits, ich brauche ja die Bandbreite.
Precious Bandbreite brauche ich doch
eigentlich. Ich mache da ja auch Backups
drüber und so. Ja, Liter, Liter, ja.
Nee, nee, das ist alles
seriöse
Datenverarbeitung.
Und
ja,
das ist für mich total nervig. Und dann rufe ich
dann halt immer an und wenn die sagen, okay,
sie haben ein Ticket aufgemacht bei der Telekom,
dann geht da irgendwie so ein Diagnoserequest raus,
der halt
meinen Port irgendwie da resetet.
Und dann geht's wieder.
Kannst du nicht automatisieren, diesen Port?
Genau, das habe ich mir auch schon überlegt, ob man das nicht irgendwie automatisieren kann.
Manchmal ist es voll gut, dann rufe ich
da an und fünf Minuten später geht wieder alles.
Und manchmal machen sie irgendwie dieses Ticket nicht
oder sagen nur, dass sie es tun, tun es aber nicht
oder weiß ich nicht. Und dann kann es
auch mal sein, dass ich eine Woche schlechtes Internet habe.
Und das ist halt echt kacke.
Aber das ist halt durch so viele
Iterationen gelaufen mittlerweile, dass
ich hatte da auch schon irgendwie zwei Stunden lang Gespräch
mit irgendwie einem Techniker, die konnten
das dann auch ausmessen, irgendwie meine lokalen
Leitungen, wie das denn mit denen aussieht.
Haben rausgefunden
irgendwo, dass ich eine Reflektion in irgendeinem
Kabel bei mir habe. Dann habe ich das Kabel
ausgetauscht. Satt-TV, Satt-TV,
ich sag's dir, irgendjemand, der rennt da über dir,
der guckt Satt-TV gerne und die
strahlen in dein Vectoring oder so.
Ich weiß es nicht, auf jeden Fall, das fand ich schon beeindruckend,
da hat sich jemand auch wirklich Zeit genommen,
das hat leider das Problem nicht gelöst,
das Vectoring ist noch später wieder ausgefallen.
Und inzwischen
ist es soweit, es war auch ein Telekom-Techniker da
und das war auch alle sehr nett und der war
dann auch im Keller, hat sich das alles mal angeguckt
und dann bei uns in der Wohnung auch und so
und
ja, der meinte dann so,
ja, ich weiß nicht, es geht irgendwie nicht so richtig gut
oder manchmal passiert halt, geht's halt schief.
Weißt du, wie die bei kurzer Exkurs,
wie die bei mir den Upload gefixt haben?
Die haben in der Tiefgarage an dem Kabel
einen Limiter entdeckt, den sie wieder ausbauen mussten.
Oh Gott.
Nein, toll, da können die eine stundenlange Geschichte erzählen
über Kabel und Netze und ja.
Ja, das wäre vielleicht auch mal, genau.
Ja, warum eigentlich nicht?
Und, naja, jedenfalls
hieß es dann, okay, wir haben sie einfach mal
so auf ein anderes
Kabelpaar umgeswitcht. Mal gucken,
Und wenn es dann geht, dann ist ja gut.
Aber im Verlauf dieser ganzen Prozedur
musste ich halt alle meine Geräte irgendwie ausstecken
und alles neu starten und irgendwie diverse Dinge.
Wir sind jetzt übrigens vom Raspberry Pi auf Vectoring gekommen.
Ach so, Mist. Ja, richtig.
Ja, aber das Problem dabei ist halt,
dass sich bei dieser Aktion halt der Raspberry Pi rebooted hat.
Und ich hinterher festgestellt habe,
nachdem das Ding wieder hochgefahren ist,
dass ich mich nicht mehr drauf einloggen konnte.
Ja, mein Passwort war ja gestern.
Nein, nein, ja, das kann ich
alles, aber ich kann halt nicht mehr,
der SH-Demon ist da irgendwie nicht hochgefahren,
ich kann das Ding noch anpingen, aber ich komme nicht mehr drauf.
Blöd. Und dann habe ich halt
irgendwie gemerkt, so, verdammt,
ich habe auch keinen Monitor mehr, den ich da anschließen kann.
Weil die habe ich inzwischen alle
verschenkt oder
irgendwie verschrottet.
Bring den mal mit, dann können wir dich nicht mehr anschließen.
Naja, das können wir mal probieren.
Und jetzt weiß ich nicht so richtig, wie ich das Ding wieder
ins Laufen kriege.
Ich habe da noch diverse...
Mein Freifunkruder hat es auch erwischt.
Seit dieser Aktion läuft der
irgendwie nicht mehr richtig.
Überhaupt. Also in diesem Schrank, in dem man ganze
Elektronik-Bastelkram sich befindet,
ist der Wurm drin.
Das Weihnachtschaos ist ausgebrochen.
Das ist halt echt blöd.
Jetzt habe ich keine Temperaturdaten mehr.
Meine Heimatomatisierung
funktioniert nur noch so rudimentär.
Das lief ja alles über Home Assistant.
Aber du kannst jetzt schon noch die...
Ich kann schon Lichter ein- und auswählen.
Wasser, Licht, Suche, funktioniert noch?
Ja.
Okay.
Ja, aber ich muss dafür diese Philips U-App benutzen.
Oh.
Wie so ein Tier.
Du kommst auch noch in deine Wohnung rein zum Beispiel.
Ja, das geht alles, ja.
Ja, aber man weiß ja immer nicht genau,
also wo das dann immer gesteuert wird,
wenn das dann so einem Gerät zentral...
Ja.
Ja, Raumautomatisierung mit Raspberry Pi ist ausgefallen,
weil tatsächlich dein Vectoring nicht funktionierte
und deswegen die Geräte neu gestartet wurden
und du nicht mehr PSS haken kannst, weil
du kein Monitor mehr hast und so nicht mehr auf das
System zugreifst. Ja. Okay, ja.
Ja. Schlimm, ne? Ja,
katastrophal. Ja.
Also ein kleines Externs-Display, ja, mal
mitbringen oder so. Ja, also ich kriege dieses
Problem wahrscheinlich schon irgendwie in den Griff. Ich muss halt bloß...
Also halt irgendwie so... Wie viel Zeit der Jochen für seine
Home-Automatisierung hat, wenn er seit einem Jahr sich nicht mehr darum
gekümmert hat, dass der Wespi bootet. Ja.
Das hat ja funktioniert. Ja.
Ja, und dann ist auch nochmal der
Verstärker, das ist auch so in der Ecke,
der ist super laut, der lüftet
immer so rum und zwar nicht ein bisschen, sondern der ist
so richtig fies laut, da muss ich mir auch noch irgendwas einfallen
lassen. Vielleicht kann ich das
ja auch
mit dieser ganzen
Automatisierungsgeschichte so ein bisschen
mehr
besser
Ich weiß noch nicht genau,
wie man das
Da gibt es ja dann halt einige Optionen,
die man irgendwie nehmen könnte. Ich könnte zum Beispiel
mehrere Raspberry-Piles
nehmen und da irgendwie Boxen dran hängen.
Weil ich hätte ja zum Beispiel auch sowas gerne,
wie, dass die Musik in unterschiedlichen Räumen
irgendwie
die gleiche Musik
abgespielt werden könnte zum Beispiel.
Theoretisch jetzt auch könnte,
aber einmal brummt der Verstärker so, dass ich ihn nicht mehr benutze.
Und dann müsste ich halt Kabel
durch die ganze Wohnung ziehen, was ich eigentlich auch nicht will.
Und ich glaube, das kann man
mit Raspberry-Piles auch hinkriegen.
Oder man nimmt halt irgendwie eine kommerzielle Lösung,
man könnte auch diese Apple HomePods oder so
verwenden, aber
das ist schon ein bisschen teuer,
dass man das irgendwie in jeden Raum stellen kann.
Du hast, glaube ich, das Protokoll umgestellt,
also nicht per Bluetooth, sondern per
Funk. Und zwar
hast du die alten terrestrischen Frequenzen genommen,
die man jetzt abgeschaltet hat.
Das war das für die
Temperatursensoren, ja.
Aber so für Audio würde ich halt wahrscheinlich ganz normal
das WLAN nehmen, nur
ja,
das könnte man
wahrscheinlich auch irgendwie so ein Python-Projekt draus machen.
Also die Frage ist, gibt es Boxen, die das können,
WLAN vernünftig?
Nee, nicht so richtig.
Außer diese Fertiggeschichten von Apple
oder
es gibt halt noch so eine Spezial-Propietär-Lösung
von Sonos. Waren die nicht mal pleite?
Sonos? Nö, ich glaube, denen geht es ganz gut.
Dann habe ich mich verguckt.
Aber ja, also
man hat da auch so einen blöden Login-Effekt
bei Sonos.
Ein Login?
Ach, du bist wieder auf das System gebunden.
Ja, genau.
Nö, die gibt's noch.
Die gibt's noch.
Oh.
Na?
Das 14.09., okay.
Naja.
Naja, gut.
Ein bisschen eingebrochen.
Ja.
Aber im Grunde könnte man da auch mal
so ein bisschen was, weil man kann ja
von dem Raspberry Pi auch irgendwie den könnte man sozusagen als Endpunkt
für WLAN verwenden und dann halt das Audio über ganz normalen Verstärker
und dann eine Box oder halt eine Aktivbox wiedergeben. Ja, das wäre halt noch
so eine Idee. Ich muss da, ich muss noch mal irgendwas machen. Ich muss auch
diesen Verstärker loswerden. Ja, wir müssen mal so ein Display für dich
organisieren, dann irgendwie mal Monitor hinschleppen und das kriegen wir jetzt
alles schon wieder zum Laufen. Ja, ja, ja. Heute haben wir gar nicht so viel
über Python geredet tatsächlich, so ein kleines bisschen
Exkurs mäßig, was man mit Pandas macht.
Sehr viel über Web, sehr viel Chaos. Ich hoffe, ihr seht uns
das heute nach, obwohl wir der Python-Podcast sind.
Wenn ihr keine Lust habt, dann hört
einfach nicht zu. Ja, ich glaube, das ist ja zu spät.
Wir sind ja schon am Ende der Sendung.
Ja, schreibt uns doch, was ihr
davon gehalten habt, ob ihr mehr von solchen Folgen
auch haben möchtet, also ob ihr viel mehr über Python
milchen möchtet, wie immer an
Python-Podcast.de.
Ich hoffe, ihr hattet Spaß auch mit Pandas,
mit Request.html, mit dem
kleinen Einflug über den Recipe und mit ganz viel
Browser und Rust und
Safari ByteRange
Radar und was
man alles so machen kann.
Wie man Manface Cloud auch von der CeBIT.
Ja.
Ja, GrafQL mit Django haben wir noch, glaube ich,
erwähnt heute. Ja.
Wir würden uns freuen, wenn ihr das nächste Mal auf jeden Fall wieder zuhört.
Genau. Und dann, denke ich,
melden wir uns wieder im nächsten
Jahr und mit der nächsten
Folge. In die Weihnachtspause, wobei
jetzt ja eigentlich zum Hören gar nicht Pause ist, sondern
nur vom... Ja, vielleicht
Der ist ja auch erst zwischen den Jahren.
Dafür ist die Folge eigentlich auch gedacht.
Na, genau.
Was zu hören hat auch.
Ja, uns hat es wieder Spaß gemacht.
Ich hoffe, euch auch.
Und dann bis zum nächsten Mal.
Bis zum nächsten Mal.
Kommt gut rein, kommt gut raus, kommt gut wo auch immer hin,
ihr wollt.
Tschüss.
Tschüss.