Transkript: PP03 - Weihnachtsfolge
Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.
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 über 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 ein sehr schöner.
Das sieht ein bisschen aus wie eine Raumschiff-Zentrale, ehrlich gesagt.
Das ist eine ganze Menge Monitore und Elektronikdinge.
Ich bin 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 das probieren wir erstmal 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 Biodynamics-Headset verwendet.
Das war eigentlich ziemlich cool und es war auch vor allen Dingen schön, dass ich dann hören konnte, dass alles immer noch funktioniert und nicht irgendwie der Audiostream 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.
Wahrscheinlich ist es nicht.
Ja doch,
also wenn wir die jetzt ausstrahlen, dann ist die schon ausgestrahlt.
Ja?
Also wir machen zuerst die Dango-Folge und dann die Weihnachtsfolge.
Denke ich schon, ja.
Ja, das finde ich super.
Okay.
Also da sind wir sogar in der dritten Episode offiziell.
Ja, genau.
Wobei das 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 0 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 Computeraffinen.
Also es gibt Mathematiker, die auch bei 1 anfangen zu zählen, aber das ist alles Unsinn.
Nee, dann muss man
bei 0 anfangen.
Natürlich ist jetzt die Frage, wenn wir jetzt bei Null anfangen zu zählen, haben wir ja trotzdem drei Episoden drin.
Denn die Länge des Arrays wäre ja irgendwie.
Es ist immer noch drei, aber wir werden erstmal in Nummer zwei.
Ja, okay.
Aber ich glaube, darüber müssen wir uns nochmal drüber.
Ja, ich glaube, man kann mit einer in der Datenbank, das sind momentan tatsächlich die IDs der Datenbank, man kann in der ID, in der Datenbank, die fängt auch mit 1 an, 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 allen Dingen, was der Jochen immer so im Web macht und was dann da nicht klappt.
So an Pandas mit Request HTML, Paars mit seinem RaspPi, 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 karakter.
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 so?
Ja, erstmal für immer, als ihr Fragen, Anmerkungen, Kommentare, Lob hast, alles mögliche habt, 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 querbet, alles mögliche.
Genau.
Und ja, aber genau, wie, wie, wie, wie.
Wie geht's uns?
Wie geht's dir auch?
Ja, besser.
Nachdem wir irgendwie letzten Monat bei einem Ausflug irgendwie in den Taunus einen Hund in die rechte Hand gebissen.
Ich dachte mal, 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 gemacht wird, dann.
War erst wenigstens ein süßer Hund.
Nee, nee.
Oder herzlicher großer.
Ja, ja.
Und das ist natürlich auch ein bisschen blöd, wenn man die Hand gebissen wird.
Das ist einfach echt muss das sein.
Aber da sind jetzt die Verbände ab und das sieht alles super aus.
Wie hast du denn jetzt halt die Maus gescheut mit dem Fuß?
Nee, 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.
Nein, ein Trackpad, genau.
Und 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 nennt man sich eine Maus mit, ja.
Und dann ist es halt sozusagen wenig Umstieg.
Also das ist sozusagen die Idee, dass man da halt einen fließenden Übergang hat.
Genau, und ich habe auch die gleiche Tastatur, sozusagen die gleiche Bluetooth-Tastatur am Desktop wie die Tastatur, die ich im Laptop habe.
Und das hat eigentlich immer ganz gut funktioniert.
Ich habe letztens umstellen müssen, 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 funktionieren halt dann irgendwann nicht mehr, wenn der Krümel sich zwischen den Tasten und dem Mechanik da irgendwie verhaken.
Oh, das ist natürlich nicht so cool.
Also, guck mal hier, also dann sowas.
Ich kann jetzt eine Werbung machen.
Ja, das sieht.
Ich habe eine Cherry-Tastatur mit so Keks, die macht man einfach hier abmachen.
Wow.
Und dann kann man die saubern und das kann man ja mit einem Caps so machen.
Das ist
ganz cool.
Das sieht auch super aus.
Also die leuchtet auch und dann hat verschiedenfarbige Tasten und es sieht sehr robust aus alles.
Das ist echt gut.
Ich habe ganz lange so eine alte IWM in den Kreisen der Benutzer dieser Tastatur, hieß 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 die in ihrer.
Genau, sowas habe ich ganz lange verwendet.
Also das ist halt, das hat ein Metallplatte unten drin, damit kann man wirklich Leute.
Also das 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, das kommt aus einer Zeit, so die wurden Anfang der 80er irgendwie hergestellt.
Und da hat noch jemand von Hand.
Also ich hatte immer ein bisschen Schwierigkeiten, ich konnte die nicht, oder ich habe versucht, die nicht zu waschen zu sehr, weil die hat da 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 nicht mehr 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 auf meinen Laptop nicht einfach so weggeben.
Also der Service hat dir gesagt, oh, schicken Sie doch das Gerät bitte einfach mal ein.
Kommt es in etwa sechs bis acht Wochen wieder repariert zurück.
Genau, ja.
Dummerweise, ja, ich benutze es jetzt aber so für Sachen, mit denen ich mich einfach mal so eine Zeit lang aussetzen kann.
Hast du keine zwei Ersatzgeräte?
Ja, das war dann halt so meine Option.
Da dachte ich dann so, okay, wenn das jetzt irgendwie, selbst wenn das halt nur ist, es dauert 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 Apple Care 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 nix.
Ja, die sechs Tage kriege ich nicht weg, ich krieg auch kein Austauschgerät.
Super, das heißt nächstes Mal keine Apple-Care mehr.
Ja, also Leute, wir sind übrigens im Python-Podcast, in der Weihnachtsfäude.
Leute eigentlich noch ein Grünwein anbieten oder sowas.
Ja, genau.
Wir sollten uns einfach.
Das habe ich übrigens, das habe ich mir tatsächlich mal überlegt, ob wir das nicht mehr machen könnten und vielleicht irgendwo in eine Bar setzen oder so.
Ja.
Und von da aus vollcasten.
Ziemlich gut.
Weil, ja, man müsste halt blöderweise, also ich denke, man müsste die Leute vorher fragen, weil Tonaufnahmen in der Wahrheit ist ja vielleicht jetzt nicht so.
Ja, ich glaube, man müsste einfach 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 Scare Bar, kann man sich vorne draußen hinsetzen.
Da würde man jetzt nicht so stören und auch keine anderen Gäste aufnehmen.
Die ist schon klar, dass es gerade geschneit hat, also vorgestern.
Ja.
Also draußen hinsetzen, also wir machen ja noch ein paar Folgen.
Also wir werden noch draußen.
Wir fallen noch draußen, fallen mir jede Menge tolle Orte ein.
Ja.
Ja, aber müssen wir mal gucken.
Also das stelle ich mir eigentlich auch ganz interessant vor.
Irgendwie gucken, wie sich so die Qualität irgendwie über die Zeit verändert, so mit zunehmend.
Ja, also dann tatsächlich Bescheid, wenn ihr irgendwelche Anregungen, Anmerkungen habt, wenn ihr zu euch kommen sollen oder sowas, schreibt uns deine 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.
Was funktioniert alles nicht?
Und du hast gesagt, was machst du die ganze Zeit?
Und mit Web irgendwelchen Sachen und so.
Das 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.
Immerhin.
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 verteidig 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, so ähnlich schaden.
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 keinen Seite quasi so programmieren, wie man das halt auf Serverseite auch gewohnt ist.
Mit allem drum und dran.
Aber was, ähm, 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 musste.
Es gibt keinen Browser mehr, für den man Ausnahmen machen muss.
Ja, doch, leider schon.
Es gibt, es gibt, ja, also alle Browser sind irgendwie benutzbar.
Nein, es gibt einen Browser, der sich standhaft wert, irgendwie benutzt werden zu können.
Und das ist heutzutage erstaunlicherweise Safari.
Safari ist echt so.
Das ist schon wieder.
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 oder wie wir.
Oh, 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 als aus Nutzerperspektive finde ich, es ist ja eigentlich toll, wenn es da Konkurrenz gibt und unterschiedliche Rendering-Engines.
Also ich würde mir wünschen, dass sie sich alle, sie alle die gleichen APIs implementieren und dass sie halt 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?
Bing ist die Microsoft-Suchmaschine?
Ne, nicht, ja, genau, nicht, nicht Bing.
Blink.
Blink heißt die, ja.
Und das Ding von WebKit von Safari.
Aber das ist eigentlich basiert auf dem gleichen Code.
Das ist basiert auf KHTML aus dem KDE-Projekt.
Ganz früher.
Da kommt das her und dann war.
Oh, wieder
was zu lernen, KDE-Koder.
Dann hat Apple das quasi in WebKit eingebaut und dann war Chrome basierte ganz lange auf WebKit.
Auch und dann haben sie WebKit irgendwie weggeforgt, 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.
Glaub ich.
Und insofern war WebKit und Chrome, das war immer ziemlich ähnlich.
Und dann gab es halt noch Firefox, hat ja irgendwie eine eigene Engine noch.
Und Opera hatte damals auch eine eigene Engine oder war das Operation?
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 in der Stadt.
Vor drei Jahren sind sie auch mal 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, haben 20, 20% des Traffics geht über Opera.
Und man sagt, hä, warum das denn?
Und der Grund ist, dass die so einen 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 runterkomprimieren 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, was 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, sozusagen auf Rust, auf eine neue Sprache und auch eine neue Render-Engine.
Das ist übrigens auch, wenn man das längere Zeit nicht, wenn man längere Zeit Firefox nicht ausprobiert hat, sollte man das vielleicht mal tun.
So seit einem Jahr oder etwas mehr, weiß nicht genau.
Gibt es da, basiert das jetzt auf einer Rust-Engine.
Und die ist schnell, schick, toll, das ist irgendwie echt super und auch sehr, also das Ding ist halt tatsächlich konkurrenzfähig.
Und ja, so im letzten Jahr hatte man dann quasi so drei unterschiedliche Rendering-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.
Mit was browst du persönlich gerne?
Tatsächlich benutze ich Chrome Safari und Firefox.
Mit welchem Anteil so?
Also für privates Surfen, für die Arbeit?
Privates Surfen meistens Safari, weil da 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 oder.
Ich glaube, bei Firefox kann man das auch machen, das synchronisieren und auch bei Chrome.
Ja, bei Chrome ist so Chrome ist 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 das habe ich letztens, habe ich das gehört?
Keine Ahnung, hat sich jemand darüber aufgeregt, dass Chrome da schon so 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.
Okay, ich glaube, man muss das halt einstellen in der Privatsphere-Einstellung, ob das MRO das ist.
Genau, aber da steht halt auch nur irgendwo, 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 irgendwo steht irgendwie, du lädst jetzt deine Browser-History zu Google hoch.
Und das ist schon sehr, sehr hinterfragt.
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 drauf zu klicken, auf das man eigentlich gar nicht draufklicken wollte, das ist schon sehr ganz fertig.
Und damit hat Google jetzt, also das war jetzt nur eine Geschichte, wir haben Chrome hat dann noch eine andere Geschichte, wo man dann, wo sie das nochmal gemacht haben.
Und sagen wir mal so, also ich meine, ich weiß jetzt nicht, aber es gibt halt diverse Leute im Netz, die jetzt so sagen, so, jetzt ist es halt Chrome und Google ist so endgültig an der dunklen Seite angekommen.
So weiter 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 das, was ich zum Entwickeln tatsächlich Chrome verwende.
Also ich verwende Chrome tatsächlich auch privat.
Selbst mal in Firefox, also eigentlich nur, um mal anderes zu machen.
Aber normalerweise eigentlich mal Chrome.
Ich habe auch nicht so viele Bedenken mit den 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, dass ich dann irgendwann mal so einen Sonderrabatt bekomme wahrscheinlich.
Ja, vielleicht.
Vielleicht wird alles gut.
Irgendwann stehen irgendwelche Männer mit irgendwelchen Anzügen von euch gesagt.
Man weiß es nicht
so genau.
Man sind sie in Amerika und nicht hier, also das ist ja schon mal gar nicht so schlecht.
Also, ja klar, also ne, ich benutze Chrome auch.
Ich finde auch, das ist ein echt guter Browser und so, aber ja, das erfahre ich wegen der Leseliste, vor allen Dingen, weil ich dann halt sozusagen halt auf allen sich was.
Die haben nur gerade ihre Datenschutzeinstellungen umgestellt in Europa, haben ihre Server geändert und ihre Rechtsformen geändert.
Die sitzen jetzt in Irland von der, weiß ich 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 identisch ist.
Obwohl eigentlich habe ich nicht so wirklich Lust, das nachzugucken.
Also wenn ich das interessieren könnte, dann selber mal gucken.
Und informiert uns doch gerne bitte in einer E-Mail, was ihr da herausgefunden habt.
Ja.
Also ansonsten Firefox versuche ich immer mal wieder zu verwendig ist.
Für so Casual Browsing-Geschichten.
Und dafür ist das eigentlich, also so, ja, ist das Ding schnell und
tatsächlich toll an, wenn ich auch in der Casual Browsing.
Ja, wo ich halt jetzt nicht unbedingt sozusagen irgendwie Bookmarks gerade mache oder so.
Halt einfach so ein bisschen rumbrause.
Und das Ding ist auch super, sollte man auf jeden Fall nochmal ausprobieren, wenn man das halt längere Zeit nicht gemacht hat.
Das kann dann schon überraschende überraschend gut vorkommen dann.
Muss man auch so ein bisschen aufpassen.
Also die haben alle so ihre Haken und Ösen.
Chrome ist so 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, wo man sagt, so Privacy jedenfalls nicht so super optimal.
Also die verwenden jetzt statt normalen Name-Servern, 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.
Also 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, zu welcher Domain quasi dein Request geht und das reicht ja dann oft schon, sozusagen als Information.
Er sieht vor allen Dingen halt den Name-Server-Request, also den Request zur Namensauflösung, wenn dein Name-Server beim Provider steht, was bei den meisten Leuten so ist, weil das der Default ist.
Kann man natürlich auch selber umstellen.
Google zum Beispiel.
Google, ja, 8.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 und so.
Toll.
Ich kann über die letzten Jahre im Standort jeden Tag nachverfolgen, wo genau ich rumgelaufen bin.
Das ist hervorragend.
Ja, ich will gar nicht beschreiben, dass das durchaus praktisch sein kann.
Genau, ich habe auch bei mir jetzt in meiner Fritzbox irgendwie als Name-Server eben nicht mehr den vom 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 einem von diesen CDN-Dingern und dann vielleicht einen von Google oder irgendwie, dass es halt nicht, dass man die Daten so ein bisschen aufteilt.
Das ist ein CDN-Ding, das ist ein Content-Delivery-Network.
Genau, genau.
Was macht das?
Das sorgt dafür, dass wenn du jetzt statische Dateien irgendwie sehen möchtest, wie jetzt zum Beispiel ein Video oder halt auch Bilder.
Und warum ist denn ein Video statisch?
Weil der sich nicht verändert, weil das Video das einmal aufgenommen worden ist, was als Datei auf dem Server liegt.
Weil das dann halt eine Datei ist, die sich nicht mehr ändert.
Und dynamisch ist es dann, wenn ich eine individuell angezeigte Weboberfläche habe, die in meinem Profil oder irgendwelche anderen Informationen beinhaltet.
Genau, also ein Applikationsserver liefert halt irgendwas aus, was sozusagen auf dem Kontext der Session oder sonst irgendwie basiert.
Und die sind übrigens auf den Python geschrieben, Entschuldigung.
Ja, genau.
Also eben, natürlich.
Also ich denke, dass die Infrastruktur, mit der man irgendwie so CDMs hochzieht, halt auch wahrscheinlich häufig in Python geschrieben sein wird.
Aber die Server, die das ausliefern, sind halt eher nicht Python, sondern das ist dann halt irgendwas Schnelles.
Also so möglichst nah am Metall, weil 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 Leiterwaren, an die ich da viel.
Bei Python hat man immer noch eine virtuelle 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 drin stehen, 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 Applikationsserver, sondern gibt es halt spezialisierte Dinger, die das halt ausliefern.
Und wenn ich jetzt auf der anderen Seite der Welt jemanden habe, der das angucken möchte, dann ist es halt irgendwie so ein bisschen sinnlos, dass einmal irgendwie durch drei unterschiedliche Unterseekabels quetschen, irgendwie, 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 Club-Szene wird mein Okulelen-Video plötzlich zu, äh, geht viral und.
Welcher Plattform auf YouTube vielleicht?
Nee, habt ihr nichts.
Ja, sehr schön, sehr schön.
Genau, aber nehmen wir an, dass das jetzt in Hongkong wird das jetzt super populär, ne?
Und dann wollen das irgendwie 10.000 Leute angucken.
Kennst du
Tiny Tim?
Äh, nee.
Wegen der Ukulele, natürlich und keine Expos.
Ach, ist das diese britische, dieser britische, das ist schon ein bisschen her, ne?
Ist das ein bisschen Komedienmusiker?
Ja, doch, doch, dann habe ich es schon mal, mir war gerade nicht klar, ich konnte das nicht verknüpfen.
Aber ja, ja, doch, hab ich, glaube ich, auch schon mal gesehen.
Aber noch nicht so wirklich.
Ja, ist großartig.
Ja, okay, muss ich mal reingucken.
Genau.
Und wenn ich jetzt hier halt mein Webserver irgendwo, meiner steht tatsächlich bei Hetzner in Nürnberg, ja.
Wenn 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.
Da findet ein Content Delivery Network, der an einem Kontinent steht und da ist ein großes Rechenfahren.
Genau, die haben halt in allen Punkten, wo es irgendwie eine 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.
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 State-Helm, was halt gesagt wird.
Schön.
Wer oder was ist Pets, ne?
Ach, das ist auch so ein Hoster, wo man, das ist ein relativ günstiger Hoster, wo man so Server irgendwie in einem Rack mieten kann und dann da, wo halt unter anderem halt auch zum Beispiel python-podcast.de läuft.
Oh, so eine Seite gibt es, das ist ja toll, da muss ich mal rein.
Und genau, also diese, 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 halt im Grunde das gleiche Problem.
Und 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, das ist so publiches DSL.
Fast Wien LAN.
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.
Ich würde sagen, also alles unter 20 schon fast lokal irgendwie, ja.
Ja, und das sind dann halt, weil die Namen müssen ja erst aufgelöst werden, bevor überhaupt ein Request zum Applikationsserver 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, ist oder nicht bei jedem, manchmal wird es auch gecached, wenn die Antworten, 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?
Ne, das geht halt nicht unbedingt.
Ja, der 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 Python-Podcast.de.
Das heißt, wenn ich die IP habe, ich kann jetzt einen HTTP-Request zu dieser IP hinschicken, aber dann weiß der Server nicht so richtig, für wen ist denn das jetzt gedacht?
Ist das für Python-Podcast.de gedacht oder ist das für werswerfer.de gedacht?
Und was sagt das Request dann?
404, 403.
Wenn das nicht eindeutig ist, dann kommt dann halt ein 4.04 wahrscheinlich zurück.
Und ja, dann funktioniert das nicht.
Insofern muss halt die Domain im Host-Header mitgeschickt werden.
Und ja, aber wenn man das jetzt mit dem Browser macht, dann muss es halt, dann passiert halt zuerst ein Namenauflö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, keine Ahnung, Namen.
Ja, ja, also man kann mit Domains natürlich auch zusammenbauen, aber meistens verwendet man ja einen 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 Applikationsservern ist, gibt es dann halt einfach eine Tabelle.
Dann 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 Domain geht, geht halt an denen.
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.
Ich habe schon erzählt, was alles nicht so funktioniert.
Also da hatten wir einmal kurz den Safari erwähnt.
Ja, du hast auch gesagt, was machst du so eigentlich die ganze Zeit und hast irgendwas erzählt?
Du hast viel mit Audio gemacht im Browser und so.
Ja, 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, Annotations-Front-ends gebaut und so.
Aber das war nie so wirklich toll.
Und inzwischen, ja, ich dachte 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 Webquatsch.
Deswegen ist es alles Quatsch und ja, gut wie alles nicht.
Genau, aber so schlimm ist es auch nicht.
Also es ist schon eigentlich ganz gut.
Es ist wirklich viel besser als früher.
Und insofern würde ich sagen, es ist auch momentan ein ganz interessanter Zeitpunkt, um damit anzufangen, weil es geht halt schon eine ganze Menge.
Aber immer ab und zu stürzt man halt dann noch schon so 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 API, die Browser implementieren können.
Zum Beispiel zum Media Capture API, wo man halt einfach vom Browser halt sowas bekommt wie Video oder Bilddaten.
Also das halt kennt man vielleicht, wie 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 einer Mediathek auswählen oder so.
Also du meinst, wenn ich auf Time klicke, hast du mich kurz abgehängt, wenn ich was machen möchte?
Wenn du auf einer Webseite bist und möchtest jetzt beispielsweise musst du da halt irgendwie ein Profilbild hochladen oder so.
Dann gibt es meistens so einen Button oder so, was wo man drauf drückt und dann wird man halt gefragt, irgendwie so Foto-Video aufnehmen oder irgendwie ein bestehendes Foto benutzen oder so.
Genau, und das ist eigentlich so ein File-Input, also so ein Input-Element, was man halt da verwendet.
Also ein Input-Tat-File.
Und da gibt es auch eine Standardtü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.
Und die Browser können das auch.
Oh, da geht's ab.
Ich glaube, das ist die Waschmaschine.
Waschmaschine.
Ja, ich glaube, Auphonic wird das hinterher alles rausfiltern.
Na gut, ich bin da sehr zuversichtlich, mal gucken.
Bei dem Schleudergang nur an.
Ja, genau.
Und also eigentlich wäre das ideal, wenn man einfach irgendwo ein Element hin machen würde, Input-Element-Type-File und dann halt sagt man noch, 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 Safari und das funktioniert auch nicht.
Also das wäre halt das, was man 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.
Meinst du, die patchen das oder sind die dazu 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 es halt, warum sollten sie es jetzt tun?
Das 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-Rekorder-Objekt irgendwie an Window dranhängen.
Und 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.
Das kannst du versuchen, kannst du halt nicht nachmachen mit dem Blopp.
Ja.
Und das ist eigentlich auch eine, das ist ein easy.
Da dachte ich, 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.
Okay, 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 im Chrome kriegt man dann halt 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 diesen Ocvorbis-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.
So, die nehmen ja keinen von, die unterstützen ja keinen freien Codec, sondern dann müsste das dann irgendwie MP4 sein oder sowas.
Hurra!
Und das ist halt alles, 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 ein Firefox ist das dann, dem schickt man dann halt auch wieder ein Opus-Codec im Og-Container.
Und ähm.
Das war super, danke.
Was zu trinken.
Dankeschön.
Das ist einfach so nebenbei, Entschuldigung, wir haben euch gerade nicht stehen lassen.
Ja, Entschuldigung, du wolltest dann die Container.
Genau, genau, genau.
Und dem Chrome wird man halt irgendwie dann WebM und auch Opus schicken.
Naja, wie auch immer.
Also Safari kann halt diese blöde Media Rekorder API nicht.
Das lässt sich dann überbrücken, indem man halt ein Pullifill halt verwendet, was dann die Media Catcher-API benutzt, um irgendwie diesen Media-Rekorder zu emulieren.
Aber so richtig schön ist das alles nicht, weil dann kann man nur noch
Waffen Ich habe mir gerade einen Fleck auf die Hose geschüttet.
Oh nein.
Entschuldigung.
Oh, vielen Dank.
Ja, bitteschön.
Es ist ein Spätbohnen Rotwein.
Ja, auf die Weihnachtsfolge.
Das ist ja sowieso alles ein bisschen chaotisch heute, deswegen.
Ja.
Das war lecker.
Wow.
Ja, also klasse.
Wir waren gerade stehen geblieben, ja.
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 Ruheaufnahme dann halt kriegt in diesem Binärblob mit Datenblob, den man dann halt in JavaScript.
Unkomprimiert als WAF-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 WAF-File zum Server und der kodiert das dann halt um in die unterschiedlichen Formate und Containertypen.
Aber es halt dann einfach mehr, man braucht natürlich deutlich mehr Bandbreite, wenn man das halt unkomprimiert an den Server schickt.
Safari, wir gehen halt davon aus, wir haben alle genug Bandbreite, ist ja auch Apple, ne?
Naja, und so richtig, so richtig dolle ist das, ist das irgendwie nicht.
Ja, und dann, genau, wenn man es dann beim Servat, dann kann man das zwar in alle Formate umkodieren, ist aber auch manchmal, manchmal hat man dann so komische Effekte.
Ich benutze da FFM-Pack als Library.
Die kann das irgendwie alles ineinander konvertieren.
Und manchmal, bei manchem, wenn man von dem einen Format, also man nimmt irgendwas in Firefox auf, spielt es dann im Safari ab oder so, ich weiß es nicht mehr genau, wie es war, sondern plötzlich dann irgendwie alles nur halb so schnell oder so.
Und da muss man dann in den Flex von FFM-Pack-Aufruf, den man gemacht hat, irgendwie so lange drehen, bis es 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.
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.
Sorry.
Als hättest du eben noch eine größere Zigarre geraucht.
Und das geht mal wieder weg hier.
Naja, genau.
Aber abspielen sollte es das ja können.
Man kann das ja auch irgendwie in ein Format kodieren, das halt Safari abspielen können müsste, wie zum Beispiel MP4, ja, ist ja sozusagen das Hausformat.
Und dann geht das aber irgendwie nicht.
Dann fragen man sich so, 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.
Und dann 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 Codex 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 Byterange-Request an den Server.
Das muss der Server dann können, er muss dann irgendwie mit einem 206 antworten, schatt 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.
So, der Entwicklungsserver, auf dem ich entwickle, der kann sowas halt nicht.
Der kann keine White-Range-Requests, der kann überhaupt keine statischen Dateien eigentlich so richtig.
Das ist ein Python-Entwicklungsserver.
Da wirst du ja nicht gedacht.
Also antwortet er halt auf diesen White-Range-Request, glaube ich, ich weiß gar nicht, womit er dann antwortet, aber irgendwie im normalen 200, glaube ich.
Und da frage ich 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 also 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 einen Header-Teil in der Datei, wo drin steht, also dieser Soundschnipsel ist so und so lang und wenn du halt zu der Zeit, 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 spring jetzt irgendwie zu dieser Kapitelmarke oder ich spring 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, Byte Range-Requests gehen mit MP3 dann halt nicht und das kann ich alles ähnlich machen.
Daher mache ich da was anderes und tue so, als wäre das eine Live-Übertragung und spiel 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.
Dann werden halt irgendwie so die Audio-Controls dunkel und das war's.
Das ist halt also, oh nein, was.
Ja, es gibt da einen sehr lustigen.
Apple verwendet für all diese Sachen so ein Radar, heißt das Ding, so ein Bugtrecker.
Kind of Radare, aber das war was auch.
Zu diesem Problem, das habe ich dann irgendwie so nach ein bisschen suchen.
Das Hauptproblem war rauszufinden, was passiert hier eigentlich?
Als ich das rausgefunden hatte, war es dann relativ leicht, dann auch die entsprechenden Geschichten im Web zu finden.
Kann man sich immer raussuchen.
Man danach sucht irgendwie Safari-Audio ByteRange Radar, dann findet man da auch den entsprechenden Bug bei Apple und da haben solche lustige Sachen reingeschrieben.
Safari Byte Range Radar.
Ja.
Und ja.
Naja, auf jeden Fall ist es 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 mich da.
Das ist so ein bisschen.
Ja.
Also das ist alles noch nicht so, es ist nicht so, nicht so ein total smoothes Smooth-Experience, sondern es 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 das, äh, 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 die ganzen Sensoren dabei, da hat man ein Mikrofon 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 Test-Server 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, mach eine Audioaufnahme, dann sagt er in der Browser halt so: Nee, das ist eine Unsafe Origin, weil das ist nicht HTTPS.
Und deswegen, nee, keine Audioaufnahme.
Kann man das so wie vorher umwandeln oder sowas, dass das über einen sicheren Kanal schickt?
Ja, du brauchst es auch einfach, macht er nicht.
Hatte der Safari jetzt nur oder 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 meine, ich kann mir schon vorstellen, woran es liegt.
Ich meine, das Problem ist halt tatsächlich, dass jemand möglicherweise irgendwie ein Telefon, irgendwie ein Meeting 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 irgendwann schicken.
Keine Ahnung.
Auf jeden Fall.
Der macht einen Livestream irgendwo hin, das wird ja auch funktionieren.
Ja, oder man hat dann eben einen HTTPS irgendwie fähigen Server, an dem 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 irgendwie HTTPS-fähig machen, das geht ja einfach nicht.
Also den kann ich natürlich ein Zertifikat verpassen und ich kann halt irgendwie so einen Reverse-HTTPS-Proxy davor schalten, das geht ja alles.
Nein, einen Reverse-HTPS-Proxy, was macht der?
Wer halt sozusagen das HTTPS terminiert, also HTTPS mit dem Telefon spricht und dann die Requests weiterleitet an meinen Entwicklungsserver.
Das ging ja.
Okay, okay.
Das Problem ist nur, mit einem validen Zertifikat geht das alles nicht so richtig.
Und ja, ohne valides Zertifikat ist natürlich auch wieder nichts.
Also es ist einfach doof.
Aber wir müssen nochmal vielleicht kurz erklären, was validen und was invalidere Karte sind, aber vielleicht in Short kriegen wir das irgendwie in The Box oder?
Ja, also man, ähm ja, dieser ganze Teil von hat, wäre es auch so ein bisschen kaputt, aber also.
Wir sind ja heute bei der Chaos-Weihnachtsfolge, liebe Leute.
Im Python-Podcast wollte ich nur einmal kurz erwähnen.
Es ist halt so, dass ich im Grunde ja der, 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.
Dein Computer ist nicht infiltriert, die Verbindung ist nicht infiltriert und der Zielcomputer ist nicht infiltriert.
Ja, aber naja, es gibt noch mehr Dinge.
Noch mehr, mehr als drei.
Drei Dinger, aber ich würde das jetzt eher auf so einer abstrakten Ebene heben wollen.
Und zwar brauchst du halt irgendwie Authentifizierung.
Ja, also.
Ich bin der richtige Nutzer, der da auch rein darf.
Ich bin der richtige Nutzer, der da reinladen darf.
Das macht man halt per Username und Passwort üblicherweise.
Oder Banken nennen das irgendwie Pinnen und machen komische Beschränkungen, aber im Grunde zeigt man da mit der Bank, dass man derjenige ist, für den man sich ausgibt.
Zumindest, dass ich derjenige bin, der die, ja, dass die Benutzer ein Passwort kennt von demjenigen, als den ich mich ausgebe.
Ja.
Dann umgekehrt muss das aber auch gelten, ja.
Also auch die Bank muss sich mir gegenüber ausweisen, weil ich möchte natürlich schon wissen, dass ich sozusagen mit der richtigen, äh, 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.
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 dann im Browser ist dann, also 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 den Certification Authority.
Aber im Grunde, also 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.
Ja, und wenn der halt auf der, der, der.
Ein Python-Server?
Nee, der ist ein 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 und es 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 er 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
dir das durchzuführen, was du möchtest.
Genau, aber ich sollte jetzt nicht irgendwie, keine Ahnung, von anderen Leuten sozusagen konnten irgendwas überweisen dürfen oder so.
Und das wäre halt Autorisierung.
Ich wäre jetzt 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 einem irgendeinem anderen Konto was zu machen.
Hast du die Privilegien, das zu tun, was du
tun darfst?
Da gab es ein schönes Beispiel mal bei der CBIT.
Also CBIT, oh, die gibt es ja auch nicht mehr.
Hat es jetzt auch irgendwie zugelaufen?
In den 90ern war CBIT, äh, die Hochzeit der CBIT und da.
Das war eine Computermesse.
Es war eine Computermesse.
In Hannover, genau, also gibt es ein schönes YouTube-Video irgendwie von Nixdorf, glaube ich, selbst, der irgendwie zu Beginn der Zebit gesagt hat, ich verstehe das gar nicht.
Was soll denn das?
Warum hat man das irgendwie die Hannover-Messe und die Zebit 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, auch auf der Zebit tatsächlich an den Herzantrag geschorben.
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, Zebedesign einfach, die hat das nicht mehr funktioniert.
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 LKW stand IBM drauf, die Leute, die reinkamen, das waren alles so IBM IBM-Arbeitsuniform ausgestattete Leute, die hatten irgendwie die richtigen Formulare dabei und so, das war halt, das hat halt alles gepasst.
Haben dann den Kram mitgenommen und ja, dann war er halt weg und dann irgendwann kamen nochmal die IBM-Abbau-Leute, die sich dann gewundert haben, dass nichts mehr zum Abbauen war.
Ja, einmal den richtigen Anstrich, einmal die richtige.
Das Problem da ist halt so, Autorisierung war richtig.
Also sie haben halt das schon überprüft.
Also es waren schon die Leute, die den Job hätten machen sollen.
Sie haben halt nur nicht authentifiziert.
Das ist der Köpenikheck.
Die haben das autorisiert, aber nicht authentiisiert.
Aber nicht authentifiziert.
Aber man muss wirklich beides haben.
Also wenn es eins davon fehlt, ist halt schlecht.
Und dann gibt es noch ein drittes, was auch sein muss, Integrität.
Na egal.
Ja, genau.
Integrität ist auch wichtig, weil ansonsten kann jemand das manipulieren.
Also sozusagen
setzen und winken oder.
Ja, also dafür hat man halt Verschlüsselungen und dafür hat man halt sind auch die Zertifikate zuständig, damit man sozusagen weiß, dass man auch tatsächlich mit den Leuten redet, die das vorgeben zu sein.
Sagen, wenn man Integrität nicht hat, dann funktioniert das auch alles nicht.
Ja, es ist ja, 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, man kann immer so tun, als wäre er irgendjemand.
Und wenn er sich dann authentifizieren kann und autorisiert wirkt, dann kriegt ihr 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.
Genau, das sollte dann nochmal eine getante 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 Crypt-Zeugs halt nicht, weil man dieses Web-Challenge-Response-Ding nicht machen kann.
Müsste sie selber schreiben.
Äh, also man kann auch, natürlich kann man sich selber ein Zertifikat erstellen, aber das Problem ist halt, dass man dann nicht sozusagen als offizielle Zertifikate sozusagen, die im Browser akzeptiert sind, halt mit einem Route-Zertifikat unterschrieben, einer entsprechenden Certification Authority.
Was ist ein Root-Zertifikat?
Ja, das ist halt das, was im Browser hinterlegt ist, sozusagen, womit der Browser überprüfen kann, ob die Signatur, die eine Certification Authority, einem Zertifikat, mit dem sie einen 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 Browsern vorinstalliert.
Also 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.
Aha.
Und das sind halt einmal sowas wie VerySign 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, es da reinzuschmuggeln, teilweise erfolgreich.
Ich glaube, da der, das war super.
Vor allen Dingen ist man halt, ich glaube, ein Provider ist irgendwie pleite gegangen, hat halt so ein Ruhzertifikat in den Browsern drin, was natürlich eine.
So, und dann hat versucht jemanden oder haben irgendwelche anderen Institutionen diesen Platte gegangen, dann einen Provider aufgekauft und dann lustige Sachen gemacht.
Einer hat versucht, in diesen Browser reinzukommen, auch sehr lustig, das war eine Spaßaktion, aber ich glaube, der hat sich genannt irgendwie Honest Ali und war Gebrauchtwarnhändler und wollte halt auch sein Zertifikat in den Browsern haben.
Oder Honest Achmed, ich weiß nicht mehr genau.
Es war also super lustig.
Ja, in den Browsern sind teilweise komische Root-Zertifikate drin.
Aber das, also ja, das Problem ist halt, wie kriegt man sozusagen, der Browser muss halt irgendwo sein Vertrauen Bootstrappen und normalerweise passiert das ja eben so, dass die Sachen schon dabei sind.
Also wenn man einen Browser installiert, dann sind die Dinger halt schon drin.
Und 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 Bootstrappen heißt alles selber einstellen.
Du kannst das auch alles selber einstellen, aber das sind so.
Das ist aber das heißt Bootstrappen.
Bootstrappen 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.
Ist das ja auch die, mit der unterschrieben hat, passiert ja ein komischer Ausgrund, der 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 einen haben, der man schon vertraut.
Und die Art, wie man halt zu diesem sicheren Vertrauen kommt, ist, dass halt schon einfach mit dem Browser mit ausgeliefert wird.
Was natürlich, ja, jetzt muss man halt dann auch sicher sein, dass man den richtigen Browser bekommen hat.
Dafür kann man ja eine Hash-Summe prüfen bei dem Runterladen von der Seite.
Genau.
Ja.
Ja, alles nicht so einfach, alles nicht so einfach wird.
Also 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 im Browser haben wir irgendwie versucht zu erklären und ein bisschen, was für Probleme der Safari die ganze Zeit macht und was da alles nicht so funktioniert.
Es sind aber noch einige andere Sachen, haben nicht funktioniert, die auch mit Python zu tun hatten.
Ja.
Wobei, na, vielleicht zuerst mal noch eine Sache, die dann tatsächlich funktioniert hat.
Also der Serverteil quasi in, das ist dann auch tatsächlich Python.
Ja.
Django, das hat eigentlich alles ziemlich gut funktioniert.
Ihr habt die letzte Folge von dich gehört.
Und ja, was ich da mache, ist ein Protokoll nennt sich GraphQL.
Das ist eine Geschichte, die hat Facebook irgendwann 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 irgendwie 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 es ist halt REST an der Stelle.
Das ist halt so, ja, wofür steht REST eigentlich?
Das ist ein Rahmen, um JSON irgendwie zu verstehen oder zu verstanden.
Nö, 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.
Also man kann das auch, man kann auch REST-Protokoll oder ein 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 es gibt auch Binär-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 teilmacht, 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-Verben 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 verwendet man 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 einen Delete-Request.
Die meisten Leute kennen ja wahrscheinlich nur Get und Flex-Tost, 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, man, 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 und 15, ich weiß es nicht genau, das ist halt irgendwie eine Fehlermeldung, heißt eine T-Pot.
Es gibt manchmal so.
Ja, ja, ja.
402 kennen wir noch einen, ja.
Ja, den kenne ich gar nicht.
Was macht 402?
Payment required.
Ah, ja, genau.
Also es gibt da diverse.
Wurden nie benutzt, aber ich habe ein T-Shirt, habe ich mir jetzt drauf geschrieben.
Das ist eine gute Idee.
Ja, und das ist im Grunde, äh.
Das ist auch eine sehr schöne Sache.
Ein bisschen Nachteil bei Rest ist halt, dass man manchmal so das Problem kriegt, wenn man jetzt so genäte Daten, also Datenstrukturen, die so ineinander verschachtelt sind, abfragen möchte, dass es dann manchmal etwas schwierig wird und wenn man oft dann halt mehrere Requests braucht.
Und also wenn man jetzt, weil oft so diese Reste-APIs direkt auf Tabellen mappen, die halt irgendwie in der Datenbank sind.
Und 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.
Dann muss man sich immer die Deep Links dann besorgen für den neuen Requests, 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 drin stehen, sozusagen.
Man möchte aber eigentlich die gesamten Daten haben und 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 genästet da drin die Datenstruktur, die du eigentlich haben möchtest.
Das nehmen wir an, du hältst gerne eine Liste der aller Alben, die du hast.
Und jetzt hältst du aber nicht nur die Track-IDs da drin, sondern halt auch Interpret und Dauer oder sowas.
Der Vorteil, der das natürlich hat, wenn man die nicht direkt alle mitschickt, ist das 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 AP-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 nochmal einen Roundtrip hast pro Album.
Pro Interpret, ja.
Du kannst auch vielleicht alle Gleichzeitig, die kriegen oder so, aber du hast auf jeden Fall nochmal einen, und das 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 halt auf diesem Endpunkt halt bekommst an Daten.
Und bei GraphQL kannst du in die Quer reinschreiben, ich hätte gern diese Spalten und ich hätte gern, das soll jetzt genähtet 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 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, also 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 der Press kommt hier nicht weiter und dann haben sich 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.
Man nimmt halt, das heißt, man macht zum Beispiel solche Sachen wie alle 10 Millisekunden sendet man halt irgendwie eine Query raus.
Das heißt, man sendet nicht jedes Mal, wenn eine Query gestellt wird im Client, irgendwie eine Anfrage raus, sondern man sammelt alle Querys.
Dann packt man die in eine große Query, 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 an den Server geschickt werden, was halt dann die Anzahl der Requests auf dem Server reduziert und so.
Also da sind einige sehr, 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-Protokollunterstützung auf Django-Seite.
Und da gibt es noch ein sehr schönes Frontend, das man da auch verwenden kann.
Das nennt sich Graphical.
Graphical.
Das ist sozusagen so ein grafischer Browser für.
Und dann kann man dann halt, es macht auch so Tab Completion auf den Queries und so.
IQL heißt mit Q.
Ja, 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, wenn es mehr kann, ist es 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 dann war das war am Anfang immer so beim Debuggen, wenn irgendwas nicht funktioniert hat, und dann gucke ich so ins Network-Tab auf im Browser, sehe dann halt so, kommt ein 200 vom Server zurück, denke mir, da kommt noch ein 200 zurück.
Warum ist denn das ein Fehler?
Dann so, ja, okay, dann muss man die Antwort erst aufmachen, dann steht da drin so, ja, also hier ist dann 200 und hier ist der Body, deiner Response und da steht halt drin, ja, jetzt ist ein Fehler passiert, ja.
Wenn man aufs Rest kommt, dann rechnet man nicht damit, weil da ist es halt nicht.
Das ist halt schon was anderes, ist halt nicht 200.
Ja, aber wenn man sich dann daran 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 einen 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 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 halt auch, gilt auch als nicht so ganz einfach zu bedienen.
Und ich fand ehrlich gesagt Apollo schon ziemlich schwer zu bedienen.
Wenn Jochen es sagt, dann finger.
Nein, nein, nein, nein, nein, das Ding ist eigentlich gar nicht schlecht, das 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 so.
Schon wirk.
Nö, das ist einfach schwierig, aber was halt auch damit zusammenhängt, dass es eine komplexe Geschichte ist.
Das cacht 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 die Query nochmal ausführen.
Aber 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.
Zeigt 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.
Und aber dann, wenn dann irgendwie eine Fehlermeldung passiert, dann muss die ja natürlich auch wieder hochbabbeln.
Also ja.
Ihr muss sie babbeln.
Die muss ja dann auf dem User wieder angezeigt werden irgendwie.
Stimmt, ja, ja.
Das ist alles so ein bisschen.
Aber nee, es ist schon nett.
Und ich glaube, wenn ich jetzt irgendwie nochmal die Wahl hätte, wenn ich bei irgendeinem neuen Projekt, ob ich da jetzt Rest nehme oder GraphQL, würde ich wahrscheinlich tatsächlich zu GraphQL tendieren.
Weil es halt doch einige sehr nette Vorteile hat.
Und ja, also insofern, das ist halt vielleicht ganz interessant zu wissen, dass man nicht unbedingt auf NodeJazz-Server umsteigen muss, wenn man GraphQL machen will, sondern dass es mit Django und Graphene halt auch eigentlich ziemlich gut geht.
Okay.
Werden wir unbedingt in den Showness erwähnen?
Ich würde sagen, jetzt haben wir so ein bisschen dieses Server-Thema weg, vielleicht kommen wir jetzt noch ein bisschen weiter wieder in die Python-Welt zurück.
Schlagen wir so einen kleinen Bogen, was alles nicht so funktioniert.
Wir hatten am Anfang erwähnt, Pandas-Requests, Resp mit Hass.
Was möchte ich am nächsten?
Ja, die Pandas-Geschichte ist eigentlich auch ganz interessant.
Ist ja eine super populäre Bibliothek und
kennen wir ich.
Nee, das ist halt quasi so ein bisschen ein Excel für Python.
So für Programmierer.
Und ja, ist auch alles sehr nett und so, aber da hat man stößt halt irgendwann dann auch irgendwie an die Grenzen und da hatte ich halt auch schon irgendwie Ärger mit.
Ich habe irgendwie, das natürlich 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.
Ja, ja, was auch, also ich, 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 auch, das ist auch schon ganz alt.
Der Gründer dieses des Pandas-Projektes, Wes McKinney, hat irgendwann mal einen Vortrag, glaube ich, gehalten, geschrieben hat, 10 Things I Hate About Pandas.
Und das hat er jetzt nochmal aktualisiert.
Das jetzt aber auch schon über ein Jahr her in einem Blogartikel, den er, glaube ich, betitelt hat mit Ten Things I Hate About Pandas und das Apache Arrow-Projekt.
Was halt so ein bisschen diesen ganzen Kram abhilfen schaffen soll.
Und 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 schwinden mit Float.
So, wenn jetzt Integer-Spalten hat und hat dann Null-Werte drin.
Aber Nummer kann auch nun
also fehlende Werte irgendwie.
Also nicht definierte Werte, sozusagen, dann hat man da ein Problem, wenn man das nicht quasi, das gibt es halt nicht.
Und das ist ja so ein bisschen schlecht, weil es gibt die ja schon.
Kann man sich überlegen, wenn man das irgendwie kodiert und dann schreibt man dann vielleicht minus 1 rein oder so.
Aber wenn minus 1 irgendwas bedeutet, dann ist es halt doof unter Umständen.
Oder wenn 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 du gibst ja nicht dieses None, also dieses NumPy-None.
Ja, das geht nur bei Float.
Das geht nur bei Float.
Ja.
Und ja, das ist halt so ein bisschen doof.
Ja, dann.
Es geht nur bei Float?
Ja.
Ich will gerade nämlich so ein Numpe-Buch liegen.
Ja, aber bitte erzähl weiter, warum das doof ist, ja.
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, dann hat man halt fehlende Werte irgendwie und möchte das jetzt in den Data Frame pumpen, dann kriegt man halt Probleme, wenn das halt nicht funktioniert.
Und dann ist das halt auch alles so ein bisschen schwierig.
Man kann zwar, und dann, also es gibt halt dieses Apache Arrow-Projekt, das ist halt vielleicht auch ganz interessant, wo es darum geht, quasi diese einheitlichen Datencontainer zu haben, den man halt dann von unterschiedlichen Sprachen aus benutzen kann, also auch von R oder von C<unk> 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.
Patchy 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, wie du hast halt die Daten tatsächlich nur einmal, also das ist auch sowas zum Beispiel, was in den Pandas eigentlich nicht geht.
Du kannst halt nicht so Daten gememory-mapped in einem Data Frame haben.
Also nehmen wir an, du hast halt Daten, die sind zu groß für deinen Hauptspeichern.
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, den Hauptspeicher lesen.
Mein Hauptspeicher ist nicht groß genug, dann geht das denn heute drin.
Ja, ja doch, gibt es das tatsächlich.
Also, ja.
Oder ist es halt so, es ist, ja.
Ja, oder vielleicht will man das.
Es gibt auch andere Gründe, weswegen man das jetzt nicht unbedingt in den Hauptspeicher laden möchte.
Trinken 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-Parket-File irgendwie liegen, sozusagen in einem Container drin, den du halt von allen Sprachen aus ansprechen kannst.
Du kannst halt halt irgendwie mit A da irgendwie deine Analysen drüber fahren und halt mit irgendwie Python und Pandas bzw.
halt irgendwelchen Machine Learning-Bibliotheken.
Du kannst 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 in Pandas irgendwie in den DataFrame ein, transformiert dann auch irgendwelche Geschichten, weil halt irgendwie solche Dinge wie None für Integer gibt es halt nicht.
Ja, 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, Python kann das halt nicht oder keine Ahnung.
R ist halt irgendwie doof oder Java hat es wieder verbockt.
Weil eigentlich, genau, wenn man jetzt eine gemeinsame Infrastruktur drunter 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 da 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, beziehungsweise na gut, da musste man halt auch noch Bibliotheken verwenden, die das dann halt konnten, aber ich kriegte das halt irgendwie in der Arrow-Datenstruktur und daraus dann wieder in den Data Frame und dann ging es halbwegs.
Aber da wird aktiv dran entwickelt.
Ich weiß, es gab das auch mittlerweile so, was man kenne, das 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, da sich das mal anzugucken.
Okay, Apache Arrow als Lösung für Pandas-Probleme.
Ja, gehen wir gleich zum nächsten Punkt.
Genau, so, so Webparsing.
Also vielleicht, da sollen wir auch mal irgendwann eine komplette Episode zu machen oder so, aber ist ja so ein Problem, was man immer wieder hat, dass man irgendwelche Seiten scrapen möchte oder so.
Wie machst du das so generell?
Nimmst du eine wundervolle Suppe oder?
Beautiful Soup.
Ja, also das kommt auch immer nochmal hervor, dass man das für irgendwas verwendet.
Aber nee, meistens benutze ich jetzt tatsächlich eine Bibliothek namens Requests.html.
Ist von dem gleichen Autor wie auch Requests.
Also die Standardbibliothek von T.
Ne, ist nicht Standard.
Also nein, Requests ist die Standard.
Ja, ja, genau.
Kennis Rights ist das irgendwie.
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.
War nicht gesehen, ich war so wenig drin.
Die Flasche war so dunkel, genau.
Zum Wohl.
Ja, dann.
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 und 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.
Und dann.
Hier muss man jeweils eigenes Skript schreiben für jede einzelne Seiten.
Kann man natürlich machen, für jede einzelne Seite oder für einfach Fallunterscheidungen oder so.
Es gibt eine saukuole Geschichte, das ist tatsächlich auch ein Pikemodul, das wirklich cool ist, nennt sich Path.
Und das kann man auch noch für andere Sachen verwenden, aber in diesem Webscrap-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 irgendwie.
Und selbst wenn man jetzt Seiten hat, die so ein bisschen unterschiedlich sind, dann ist das doch meistens irgendwie dasselbe Template irgendwie.
Und ja, jetzt dachte ich früher immer schon so, 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 das Template daraus extrahieren.
Dann kann ich sozusagen einen umgekehrten Prozess machen.
Wenn ich das Template habe, dann möchte ich einfach nur alle Werte haben, sozusagen, die aus der Daten bekommen, damit 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 auch cool.
Da schreibt man im Grunde sozusagen sein Template irgendwie rein.
Man kann auch damit relativ leicht rausfinden, wie das Template dann 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 ist, 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 raus zu parsen.
Ja.
Und dann kann es halt, kann das, 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 man kriegt man dann halt nur so Grundgerüst an einer 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 rendert, in der Tabelle angezeigt werden oder so, weil die Tabelle ist dann irgendwo 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 Phantom.js, 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 nicht so dolle.
Für JavaScript gibt es eine Bibliothek namens Puppeteer.
Und davor gibt es eine Python-Adaption namens Pipeteer und das ist eingebaut in Requests, 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 rendert mir das und dann kann man 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 dann 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 dann das Ergebnis zurück und das Ganze sogar mit einer asynchronen API, sodass man das halt alles so im AsyncIO-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 mich damit so oft unter mich ein Kram 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, ja, ein ganzes, diese, die Leute, die auch Scrapie bauen, da gibt es eine Firma dahinter, die haben da diverse Services, die sie anbieten.
Da gibt es noch, da kann 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.
Und die haben auch so ein Proxy namens Splash, wo man dann halt quasi über so ein Proxy einen Hapless-Browser hat, mit dem man da irgendwas Dinge machen kann.
Da kann man auch irgendwie JavaScript in der Seite injizieren oder irgendwelche Sachen rauspassen.
Aber das war alles immer ziemlich ätzend.
Kannst du nochmal ganz kurz erkennen, dass du Scrapie denn genau machst im Vergleich?
Ja, Scrapie ist auch im Grunde so eine Komplettlösung, mehr oder weniger.
Also 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, muss man die halt durchgehen, muss halt irgendwie mehrere Prozesse haben, die halt da irgendwie die Seiten holen und so.
Dafür ist das halt eher gedacht, halt, dass man quasi wirklich eine komplette Seite halt irgendwie mal so darüber läuft, über alle Unterseiten, die es ja 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 Zub tun oder Alex ML irgendwie, also das ist auch sowas bei Request-Satmil, 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 Scrapy da nicht.
Wenn man jetzt rausgefunden hat, wie man das tut und möchte das jetzt skalieren auf, keine Ahnung, 100.000 Seiten und möchte das mit fünf Prozessen auf irgendeiner Server irgendwie, dann ist Scrapey 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, also es gibt, wir haben, ich habe schon für diverse Firmen Sachen gemacht oder auch schon für Firmen gearbeitet, die halt auch damit immer wieder Probleme hatten.
Scraping ist halt so ein Ding, was immer wieder auftaucht, was man immer mal wieder machen muss.
Und Requests.html ist tatsächlich so die angenehmste Lösung für dieses Problem, die mir bisher über den Weg gelaufen ist.
Deswegen wollte ich das mal erwähnen, dass das gibt und dass es halt nett ist.
Und genau wenn man halt das Problem hat, das Template zu extrahieren aus solchen Seiten und da Sachen rauszuparsen, dann ist es halt, sollte man sich die Pars und Search-Funktionen mit Requests hat mir einmal angucken, weil das ist echt sehr nett.
Ja.
Okay.
Genau, das war's.
Das war's im Grunde schon.
Ja, dann würde ich sagen, kann man ja Request hat mit Pars.
Ja.
Kurz.
Nächstes Thema war der Hass mit dem Raspi.
Was ist da passiert?
Ist was kaputt gegangen.
Ja, ja, mein Raspi.
Chaos vor Weihnachten immer dafür.
Ja, genau, das ist irgendwie schade.
Ich hätte, oh, das Grundproblem war irgendwie, dass, das habe ich auch schon seit seit über einem Jahr, habe ich das Problem, dass ab und zu das Factoring auf meinem DSL-Anschluss ausfällt.
Aha, das liegt an dem DSL-Anbieter.
Ich weiß ehrlich gesagt nicht so genau, woran das liegt.
Aber ja, ich sehe halt, dass es passiert.
Ich habe so eine Fritzbox, da kann man dann sehen.
Quasi, da steht dann irgendwie, G-Vector ist irgendwie aus oder so.
Da kann man irgendwie nachgucken, was das bedeutet und dann so, oh ja, das Vectoring ist auch.
Das Gott für unsere unwissenden Hörer, was ist Vectoring?
Ach Gott, Vectoring, das ist so ein Kuppel.
Also wir haben ja in Deutschland diese unvergleichliche Klingel-Drahtkupfer irgendwie Telefoninfrastruktur.
Vielleicht nicht mehr so ganz zeitgemäß ist, aber liebevoll auch ins 21.
Jahrhundert irgendwie gerettet wurde.
Weil, ja, was 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 damit der Infrastruktur weiter Geld zu retten.
Und nicht irgendwelchen neuen Glasfall an.
Wenn man selber was 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 an, 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 er einfach nicht mehr drüber.
Da ist man halt einfach an den physikalischen Grenzen, was man da machen kann.
Und naja, da 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 auf der Seite, wo man, wo man einen Anschluss hat, das muss halt alles aus einer Hand kommen.
Wenn jetzt sozusagen man zwei unterschiedliche Provider hat, ja, an einem, also man hat immer, das Telefonkabel geht so von der TAE-Dose, die man an der Wand hat, geht halt zu irgendeinem Gerät von dem Provider sozusagen in einem.
Zum HVT oder zum erst zum Hausanschluss und dann zum HVT-Hauptverteilern, ja.
Ich weiß gar nicht, wie man das nennt.
Das ist halt irgendwie so ein grauer Kasten auf der Straße, so wenn die, 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 brubst.
Da ist irgendwie so eine Art Switch oder weißer Teufel irgendwie irgendwie sowas drin, wo halt der 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, es muss 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 sozusagen das nur machen kann, wenn ich alle Leitungen unter einer Kontrolle habe, bedeutet das, 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, also ich finde, ich habe halt meinen Vertrag bei U2, aber mein Anschluss läuft über die Telekom-Hardware, weil sich das ja mit allen anderen Anschlüssen irgendwie koordinieren muss.
Ja, alles ein bisschen furchtbar.
Ich meine, es stört mich auch nicht weiter.
Es funktioniert halt irgendwie, es ist auch tatsächlich schneller, also insofern ist alles gut.
Aber bei mir war es halt so, das fällt halt so, 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 Kilobit up oder so.
So auf 2002 oder so.
Ja, was für mich jetzt echt blöd ist, weil ich ja das brauche ja die Mits, ich brauche ja die Wandbreite.
Precious Bandbreite brauche ich doch eigentlich.
Ich mach da ja auch Backups drüber und so.
Literal, ja.
Nee, nee, das ist alles seriöse Datenverarbeitung.
Und ja, das ist für mich total nervig.
Und dann rufe ich da halt immer an und dann, 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 automatisiert, diesen Port.
Genau, das habe ich auch schon überlegt, ob man das nicht irgendwie automatisieren kann oder so.
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 Küke.
Und ja, aber das ist halt durch so viele Iterationen gelaufen mittlerweile.
Ich hatte da auch schon irgendwie zwei Stunden lang ein Gespräch mit irgendwie einem Techniker, die konnten das dann auch ausmessen, irgendwie meine lokalen Leitungen, wie das dann mit denen aussieht.
Haben herausgefunden, irgendwo, dass ich eine Reflexion, irgendein Kabel bei mir habe, dann habe ich das Kabel ausgetauscht.
Satt TV, Satt TV, ich sag's dir, der irgendjemand, der rennt nah über dir, der guckt SackTV gerne und die strahlen in dein Vectoring oder so.
Ich weiß es nicht.
Auf jeden Fall, das war fand ich schon beeindruckend, da hat sich jemand auch wirklich Zeit genommen, das hat mir leider das Problem nicht gelöst.
Das Vectoring ist doch später wieder ausgefallen.
Und inzwischen ist soweit, es war auch ein Telekom-Techniker da.
Und das war auch alles sehr nett und der war dann noch im Keller, hat sich das erstmal angeguckt und dann bei uns in der Wohnung auch und so.
Und ja, der hat dann meinte dann so, hm, ja, ich weiß nicht, es geht irgendwie nicht so richtig gut oder manchmal passiert halt, geht es halt schief.
Weil wir die bei kurzer Exkurs, wie die bei 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önnt ihr stundenlang Geschichte erzählen über Kabel und Netze und ja.
Ja, vielleicht auch mal, genau, ja, warum eigentlich nicht?
Und naja, jedenfalls hieß es dann so, okay, wir haben sie einfach mal so auf ein anderes Kabelpaar umgeswitcht.
Mal gucken, wenn es dann geht, dann ist ja gut.
Aber im Verlauf dieser ganzen Prozedur muss ich halt alle meine Geräte irgendwie ausstecken und alles neu starten und irgendwie diverse Dinge, ja, und
wir sind jetzt übrigens vom Raspberry Pi auf Vectoring gekommen.
Achso ist, ja, richtig, wir waren ja nur Raspberry.
Ja, aber das ist das Problem dabei ist halt, dass ich bei dieser Aktion halt der Raspberry Pi gemootet hat.
Und ich hätte halt festgestellt habe, nachdem das Ding wieder hochgefahren ist, dass ich mich nicht mehr drauf einloggen konnte.
Yeah, mein Passwort war ja gestern.
Yeah, das kann ich alles, aber ich kann halt nicht mehr 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 dir mal mit, da können wir mich nicht anschließen.
Naja, das können wir mal probieren.
Und jetzt weiß ich nicht so richtig, wie ich das Ding wieder ins Laufen kriege.
Und ja, ich habe da noch diverse, mein Freitrunkrouter hat es auch erwischt, denn das ist auch irgendwie, seit dieser Aktion hat, der läuft der irgendwie nicht mehr richtig überhaupt.
Also in diesem Schrank, in dem mein ganzer Elektronik-Bastelkraben sich befindet, dass irgendwie, das ist selber oben drin.
Ein Weihnachtschaos, das ist ausgebrochen.
Oh, also ein Jahr, ja.
Also und was das ist halt echt blöd, weil jetzt habe ich keine Temperaturdaten mehr.
Ich habe irgendwie meine Heimautomatisierung funktioniert nur noch so rudimentär quasi, weil das lief ja alles über Home Assistant.
Aber du kannst jetzt schon noch die, also richtig.
Ich kann schon Lichter an die Dusche funktioniert noch.
Ja.
Okay.
Ja, aber ich muss ja für diese Philips EU-App benutzen.
Oh.
Wie so ein Tier.
Du kommst auch noch in deine Wohnung rein zum Beispiel.
Das geht alles, ja.
Ja, man weiß ja immer nicht genau, also wo das dann immer gesteuert wird, wenn das dann so einem Gerät zentral.
Ja.
Ja, der Raum-Authematisierung mit Raspberry Pi ist ausgefallen, weil tatsächlich dein Vectoring nicht funktionierte und deswegen ein Geräte neu gestanden wurde und du nicht mehr per SSH konden kannst, weil du keinen Monitor mehr hast und so nicht mehr auf das System zugreifst.
Ja.
Okay, ja.
Stimmt, ne?
Ja, katastrophal.
Also ein kleines Exzellenz-Display, ja, mal mitbringen oder so.
Also ich kriege dieses Problem wahrscheinlich schon irgendwie in den Griff.
Ich muss halt plus.
Also halt irgendwie.
Wie viel Zeit der Jochen für seine Home-Automatisierung hat, wenn seit einem Jahr sich nicht mehr darum gekümmert hat, dass der Respi bootet.
Der funktioniert.
Ja, ja, und dann ist auch nochmal der Verstärker ist irgendwie, das ist auch so der Erklärung, der ist super laut, der lüftet immer so rum und zwar nicht ein bisschen, sondern der ist so richtig fieslaut, da muss ich auch noch irgendwas einfallen lassen.
Vielleicht kann ich das ja auch mit dieser ganzen Home-Automatisierungsgeschichte so ein bisschen mehr besser.
Ich weiß noch nicht genau, wie man das.
Also da gibt es ja dann halt einige Optionen, die man irgendwie nehmen könnte.
Ich könnte zum Beispiel mehrere Raspberry Pis nehmen und da irgendwie Boxen dranhä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.
Was ich theoretisch jetzt auch könnte, aber einmal pumpt 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.
Ja.
Und ich glaube, das kann man mit Raspberry Pis auch hinkriegen.
Oder man nimmt halt irgendwie eine kommerzielle Lösung.
Ich könnte auch diese Apple Homepots oder so verwenden, aber das ist schon ein bisschen teuer, dass man das irgendwie in die Hinraum stellt.
Du hast, glaube ich, das Protokoll umgestellt, also nicht per Bluetooth, sondern per Funk.
Ja.
Und zwar hast du die alten terrestrischen Frequenzen genommen, die man jetzt abgeschaltet hat, wenn ich mich
recht hätte.
Das war das, das für die Temperatursensoren, ja.
Ja, ja.
Aber so für Audio würde ich halt wahrscheinlich ganz normales WLAN nehmen.
Nur ja, muss man auch mal, also 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.
Also außer diese Fertiggeschichten von Apple oder Sonos, es gibt halt noch so eine spezialproprietäre Lösung von Sonos.
Waren die nicht mal pleite?
Sonos?
Nö, ich glaube, denen gibt es ganz gut.
Dann habe ich mich verguckt.
Aber ja, also man hatte also auch so einen blöden Login-Effekt bei Sonos und
Login, Login?
Ach, du bist wieder auf das System gebunden.
Ja, genau.
Nö, die gibt's noch.
Die gibt's noch.
Oh.
14.9.
Okay.
Naja, gut, ein bisschen eingebrochen.
Ja.
Aber im Grunde könnte man da auch mal so ein bisschen was automatisch, weil man kann ja von dem Raspberry Pi auch irgendwie, den könnte man sozusagen als Endpunkt für WLAN irgendwie verwenden und dann halt das Audiosignal über einen ganz normalen Verstärker und dann eine Box oder halt eine Aktivbox irgendwie wiedergeben.
Ja, das wäre halt noch so eine Idee.
Ich muss da mal irgendwas machen.
Ich muss auch diesen Verstärker loswerden, ich weiß nicht.
Ja, wir müssen mal so ein Display für dich organisieren, dann irgendwie mal einen Monitor hinschleppen und deswegen kriegen wir das alles schon wieder zum Laufen.
Ja.
Heute haben wir ja gar nicht so viel über Python geredet tatsächlich.
So ein kleines bisschen exkursmäßig, was machen kann das machen.
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 schon am Ende der Sendung.
Ja, schreibt uns doch, was ihr davon gehalten habt, ob ihr mehr von solchen Folgen auch haben möchtet.
So, ob ihr viel mehr über Python mischen möchtet.
Wie immer anhalle Python-Podcast.de Ich hoffe, ihr hättet Spaß, auch mit Pandas, mit Request.html, mit dem kleinen Einschwung über den Respi und mit ganz viel Browser und Rust und Safari-Bytranchradar und was man alles so machen kann.
Wie mein Mainface Cloud, auch von der C-Bit.
Ja.
Ja, GrafQL mit Django haben wir noch, glaube ich, erwähnt heute.
Ja.
Ich würde 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.
Mit der nächsten Folge.
In die Weihnachtspause, wobei jetzt ja eigentlich zum Hören gar nicht Pause ist, sondern nur vom
Jahr vielleicht hört er es ja auch erst zwischen den Jahren oder schon.
Dafür ist die Folge eigentlich auch gedacht, dass man dann was zu hören hat auch.
Ja.
Ja, für uns hat es viel 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 immerhin ihr wollt.
Ja.
Tschüss.
Tschüss.