Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, diesmal in der Weihnachtsepisode.
Ja, was machen wir hier eigentlich? Wir sind diesmal bei Dominik unterm Dach.
Ja, ich bin der Dominik und dabei ist natürlich wieder Jochen. Hallo Jochen.
Ja, hallo, ich bin Jochen, genau. Und ja, das ist irgendwie eine sehr schöne, das sieht ein bisschen aus wie eine Raumschiffzentrale, ehrlich gesagt.
Das sind eine ganze Menge Monitore und Elektronikdinge. Ich bin da ein wenig neidisch, muss ich sagen.
Ja, das hört sich super an. Also ich bin auch immer neidisch auf deinen schönen Wintergarten, aber probieren wir es mal hier aus.
Mal gucken, wie der Ton ist und wie unsere Hörer den finden.
Ja, das wird auch interessant. Das ist einfach jetzt ein anderes System, mit dem wir das aufnehmen.
Und genau, wir nehmen wieder auf mit den beiden drahtlosen Mikrofonen.
Letztes Mal hatte ich halt irgendwie so ein Beyerdynamics-Headset verwendet.
Das war eigentlich ziemlich cool und das war auch vor allen Dingen schön, dass ich dann hören konnte, dass alles immer noch funktioniert und nicht irgendwie der Audio-Stream plötzlich weg ist.
Ja, aber es ist auch so ein bisschen, es isoliert einen.
Du meinst mit letztes Mal die Django-Folge, die noch gar nicht ausgestrahlt worden ist?
Ja doch, also wenn wir die jetzt ausstrahlen, dann ist die schon ausgestrahlt.
Ja? Also wir machen zuerst die Django-Folge und dann die Weihnachts-Folge?
Denke ich schon, ja.
Ja, das finde ich super, okay. Also 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 Null anfangen, genau.
So, wir sind ja nicht bei Fortran hier.
So, bei Eins anfangen.
Bei Eins anfangen zu zählen ist ja im Grunde irgendwie falsch, so für mich als Computer-Affinim.
Also es gibt Mathematiker, die auch bei Eins anfangen zu zählen, aber das ist alles Unsinn.
Nee, dann muss man bei Null anfangen.
Ja, aber natürlich ist jetzt die Frage, wenn wir jetzt bei Null anfangen zu zählen, haben wir ja trotzdem drei Episoden drin.
Die Länge des Arrays wäre ja irgendwie...
Es ist immer noch drei, aber wir wären erst bei Nummer zwei.
Ja, okay.
Aber ich glaube...
Ja, darüber müssen wir uns nochmal drüber sprechen.
Ja, ich glaube, man kann in der Datenbank...
Es sind momentan tatsächlich die IDs der Datenbank.
Man kann in der Datenbank, die fängt auch mit Eins an und nicht mit Null.
Naja, ach, alles kaputt.
Alle tolle Sachen werden dann nur mal kaputt gemacht.
Ja, 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 Respy.
Passt und muss weg.
Und mit dem Verstärker von Jochen.
Ja, da wollten wir am Ende ein bisschen euch über eigene Podcasts erzählen.
Was es so für interessante Dinge noch gibt.
Ja, und diesmal so ein bisschen durcheinander.
Ist ja die Weihnachtsfolge ein bisschen Chaos.
Genau, wir haben nicht wirklich was vorbereitet, sondern wir erzählen jetzt einfach mal so, was so passiert.
Was vielleicht auch ganz interessant sein kann.
Und ich denke, vielleicht ist es sogar am besten einfach mal so, ja, wie geht es uns eigentlich so?
Ja, wir erzählen Fragen, Anmerkungen, Kommentare, Lob, Hass, alles Mögliche.
Schreibt an...
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 quasi querbeet, alles Mögliche.
Genau.
Und ja, aber genau, wie geht es uns?
Wie geht es dir, Jochen?
Ja, besser.
Nachdem wir irgendwie letzten Monat bei einem Ausflug irgendwie in den Taunus...
Wir haben ja einen Hund in die rechte Hand gebissen.
Ich dachte immer so ein bisschen, bin ich eher so der Hundetyp statt Kapstentyp.
Aber das muss wohl auf Gegenseitigkeit beruhen.
Und wenn man von Hunden nicht so gemocht wird, dann...
War ja erst wenigstens ein süßer Hund.
Nee, nee.
Sogar ein hässlicher Kleiner.
Oder ein hässlicher Großartiger.
Ja, ja.
Schön.
Und das ist natürlich auch ein bisschen blöd, wenn man die Hand gebissen wird.
Das ist echt...
Muss das sein?
Und ähm...
Aber da sind jetzt die Verwenderer ab und das sieht alles super aus.
Ja, kann alles bewegen und deshalb...
Wie hast du in der Zeit die Maus gesteuert? Mit dem Fuß?
Nee, tatsächlich mit der gleichen Hand.
Ich habe keine Maus, ich habe ein Trackpad.
Ah, ein Trackpad.
Ja.
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 auf dem Laptop hat man ja meistens auch ein Trackpad.
Oder also in meinem Laptop habe ich ein Trackpad.
Oder man nimmt sich eine Maus mit, ja.
Ja.
Und dann ist es halt sozusagen wenig Umstieg.
Also das ist sozusagen die Idee, dass man da halt einen fließenden Übergang hat.
Dass man seine Routinen mitnehmen kann.
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, ah, ja, jetzt sind wir schon mal wieder bei der Idee.
Ja.
Weil blöderweise irgendwie die Tastatur an meinem Laptop nicht mehr so richtig geht,
was ein bekanntes Problem ist.
Ich habe so ein 2016er Gurken-Macbook.
Und da ist die Tastatur, die funktioniert halt dann irgendwann nicht mehr,
wenn der Krümel sich zwischen den Tasten und der Mechanik da irgendwie verhaken.
Oh, das ist natürlich nicht so cool.
Also guck mal hier, also dann sowas.
Ich kann jetzt Werbung machen.
Ich mache mir Werbung.
Ja, das geht.
Jetzt machen wir Werbung.
Ich habe eine Cherry-Tastatur mit so Caps.
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, genau, hat es verschiedenfarbige Tasten.
Und es sieht sehr robust aus alles.
Das ist echt gut.
Ich habe ganz lange so eine alte IBM.
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.
Ja, 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 in ihr...
Genau, sowas habe ich ganz lange verwendet.
Also das ist halt...
Das hat eine 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.
Die wurden Anfang der 80er irgendwie hergestellt.
Und da hat noch jemand von Hand...
Ich hatte mal ein bisschen Schwierigkeiten.
Ich konnte die nicht...
Oder ich habe versucht, die nicht zu waschen zu sehr,
weil die hatten hinten halt noch so einen Aufkleber drauf,
wo jemand von Hand unterschrieben hat,
dass die Qualitätskontrolle durch war und so.
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 auch mein Laptop
nicht einfach so wegheben.
Also der Service hat ja gesagt,
schicken Sie doch das Gerät bitte einfach mal ein.
Dann kommen es in etwa sechs bis acht Wochen wieder repariert zurück.
Also genau, ja, dummerweise ich, ja, ich benutze es jetzt aber
so für Sachen, mit denen ich mich einfach mal so eine Zeit lang aussetzen kann.
Es wäre schneller gegangen.
Also keine zwei Ersatzgeräte.
Ja, das war dann halt so meine Option.
Da dachte ich dann so, okay, wenn das jetzt irgendwie setzt,
aber selbst wenn das halt nur, 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.
Habe dann feststellen müssen, es nützt alles nichts.
Ja, die sechs Tage kriege ich nicht weg.
Ich kriege auch kein Austauschgerät.
Super, das heißt, nächstes Mal kein Apple Care mehr.
Ja, also Leute, wir sind übrigens im Python-Podcast,
in der Weihnachtsfolge.
Wollte eigentlich noch einen Grillwein anbieten oder sowas.
Ja, genau, wir sollten uns einfach...
Das habe ich mir tatsächlich mal überlegt,
ob wir das nicht mal machen könnten und
vielleicht irgendwo in eine Bar setzen oder so.
Ja.
Und von da aus verkasten.
Find ich gut.
Weil, ja, man müsste halt blöder...
Also ich denke, man müsste die Leute
vorher fragen, weil Tonaufnahmen
in der Bar ist ja vielleicht jetzt nicht so...
Ja, ich glaube, man müsste einfach
die Leute vorher alle anderen rausschmeißen, damit die ganzen
Nebengeräusche nicht mehr da sind.
Ja, das wäre auch schwierig, aber es gibt so ein paar, wo man eventuell
nicht stört.
Also wenn man sich zum Beispiel in der Scarebar kann man sich
vorne draußen hinsetzen.
Da würde man jetzt nicht so stören und
auch keine anderen Gäste aufnehmen.
Ist ja schon klar, dass es gerade geschneit hat.
Also vorgestern.
Ja.
Wir machen ja noch ein paar Folgen.
Wir werden noch draußen.
Wir fallen noch draußen, fallen mir jede Menge tolle Orte ein.
Ja.
Ja, das müssen wir mal gucken.
Das stelle ich mir eigentlich auch ganz interessant vor.
Irgendwie
gucken, wie sich so die Qualität
irgendwie über die Zeit verändert, so mit zunehmend
krummeln Pegeln.
Ja, also sagen wir tatsächlich Bescheid.
Wenn ihr irgendwelche Anregungen, Anmerkungen
habt, wenn ihr zu euch kommen sollen oder sowas,
dann schreibt uns eine E-Mail.
Die E-Mail habe ich ja schon eben genannt.
Findet ihr auch in den Shownotes.
Ja, fangen wir doch an mit Python jetzt,
lieber Jochen.
Was funktioniert alles nicht?
Und du hast gesagt, was machst du die ganze Zeit?
Und mit Web irgendwelche Sachen und so.
Mit Web mache ich momentan viel.
Und tatsächlich ist es auch nicht so.
Es ist halt nur so ein bisschen Python.
Also das Backend ist alles Python.
Aber
ich mache
momentan auch viel auf der kleinen Seite.
Und da halt vor allen Dingen mit Java.
JavaScript.
Was eigentlich auch inzwischen ganz gut geht.
Das ist so.
Also ich habe immer mal wieder irgendwie bei
JavaScript reingeschaut, ob das jetzt irgendwie inzwischen
okay ist.
Und fand eigentlich immer furchtbar.
Aber so inzwischen
ist das eigentlich gar nicht
mehr so furchtbar schlimm. Also ich mache jetzt
einen
JavaScript Dialekt, der nennt sich TypeScript.
Und mit so einer IDE,
das ist zwar alles nicht so
snappy, schnell,
wie ich das eigentlich gerne 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.
Das ist quasi auch IntelliJ-basiert.
Aha, okay. Habe ich auch ja schon einige Male
gehört.
Das ist eigentlich tatsächlich ganz gut.
ja,
das macht eigentlich, man kann so richtig
auf der kleinen Seite quasi so
programmieren, wie man das halt auf der Server-Seite auch gewohnt ist.
Mit allem drum und dran.
Aber was, und
vor allen Dingen, also inzwischen sind ja auch die Browser so gut
geworden, also die können halt eine ganze Menge
und 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.
Alle Browser
sind irgendwie benutzbar? Nein, es gibt
einen Browser, der sich standhaft
wehrt, irgendwie
benutzt werden zu können und das ist heutzutage
erstaunlicherweise
Safari.
Safari ist echt so...
Schon wieder Apple. Apple ist das neue Microsoft, oder?
Bisschen schon, ja. Also Safari
ist irgendwie so ein bisschen der neue Internet-Explorer.
Also ein Internet-Explorer gibt es ja jetzt
irgendwie nicht mehr so richtig.
Edge ist jetzt Chromium-Engine, oder?
Edge war eigentlich gar nicht so schlecht.
Edge hatte, glaube ich, eine eigene Engine.
Ich weiß nicht, ob sie die vom IE übernommen haben, aber
Edge war
quasi so ein Neustart.
Und soweit ich das gehört habe,
war das eigentlich ganz gut, war brauchbar.
Und so aus Nutzerperspektive
finde ich, ist es ja eigentlich toll, wenn es da Konkurrenz gibt
und unterschiedliche Rendering-Engines.
Ich würde mir wünschen, dass
sie alle die gleichen APIs implementieren
und dass sie kompatibel untereinander sind.
Aber wenn es unterschiedliche Implementationen
gibt, dann ist das eigentlich eine sehr gute Sache.
Und von da aus gesehen war das
eigentlich immer toll, dass es mit Edge halt da noch
eine dritte Geschichte neben halt
ja,
wie heißt die von
von Chrome?
Bing?
Ist die Microsoft-Suchmaschine?
Nee, genau, nicht Bing.
Oh, wie heißt die?
Blink.
Blink heißt die, ja.
Und das Ding von WebKit
von Safari. Aber das ist eigentlich basiert
auf dem gleichen Code. Das basiert auf
K-HTML
aus dem KDE-Projekt.
Ganz früher. Da kommt das her und
Oh, wieder was zu lernen.
Ja, und dann hat Apple das
quasi in WebKit eingebaut und dann
war Chrome basierte ganz lange auf
WebKit. Auch.
Und dann haben sie WebKit irgendwie weggeforgt,
weil ihnen die Entwicklung da nicht mehr schnell genug ging
und haben da ihre eigene Engine draus geborgen.
Die heißt jetzt Blink irgendwie.
Glaube ich. Ja. Und
insofern war
WebKit und Chrome, das war immer
ziemlich ähnlich. Und dann gab es
halt noch Firefox. Hatte ja irgendwie
eine eigene Engine noch.
Und Opera hatte damals auch eine eigene Engine, oder war das?
Äh, ja doch. Ganz am Anfang.
Aber wir sind relativ schnell auf irgendwas anderes
umgestiegen. Ich weiß aber nicht mehr was.
Ja, aber Opera spielt leider nicht mehr so eine große Rolle.
Ja, vor drei Jahren haben sie auch mal auf Chromium umgestellt.
Ja, ja.
Opera hat ein Feature, was andere Browser nicht haben.
Und das führt dazu, dass Opera teilweise
in so Ländern wie Indien
oder teilweise auch Südostasien
manchen, also von Indien weiß ich es relativ
sicher, gibt es irgendwie noch
20 Prozent des
Traffics geht über Opera. Und man fragt sich,
hä, warum das denn? Und der Grund ist,
dass die so einen
ähm, ja quasi
grafischen Browser betreiben.
Also man hat auf dem Handy halt
sozusagen, sieht man nur ein Bild.
Also es wird einem nur das gerenderte
Bild geschickt, was man halt so 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 zugeschickt, dass man da draufgeklickt hat.
Und das ist halt eine ganz interessante Geschichte.
Äh, 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, ähm, ja, Firefox
hat ja jetzt auch umgestellt, ähm,
sozusagen auf Rust, äh,
auf eine neue Sprache und auch eine neue Rendering Engine.
Äh, die, 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.
Ähm, gibt's da, äh, basiert das jetzt auf einer, äh,
Rust, äh, Engine.
Äh, und die ist schnell,
schick, toll. Das ist irgendwie echt super.
Und auch sehr, also das Ding ist halt tatsächlich konkurrenzfähig.
Und, ähm,
ja, so im letzten Jahr hatte man dann
quasi so drei unterschiedliche, äh,
Rendering Engines.
Sozusagen halt die von Firefox, die von, äh,
Chrome und, und, und, und die von
Microsoft. Und inzwischen
gibt's jetzt dann halt nur noch, ähm,
zwei. Ja, und das ist natürlich echt wenig.
Zwei ist schon fast nur noch eine.
Zumal der Marktanteil von, von Firefox
ja auch irgendwie so ein bisschen im Sinkflug
begriffen ist leider. Ja.
Äh. Mit was brauchst du persönlich
gerne? Ähm,
tatsächlich benutze ich, äh,
benutze ich Chrome, äh,
Safari und Firefox.
Ähm. Mit welchem
Anteil so? Also für private Surfen, für die
Arbeit? Private Surfen, meistens Safari.
Weil da, Safari hat halt
so dieses Feature der, der Leseliste, das, das ich
ganz praktisch finde. Mhm. Weil das halt über alle die
Devices hinweg synchronisiert. Das heißt, wenn man
sich eh im Apple, äh,
äh, Universum sozusagen
mit seinen Geräten aufhält, äh, oder. Ich glaub,
bei Firefox kann man das auch machen, das synchronisieren. Und auch
bei Chrome. Ja, bei, bei
Chrome ist so, Chrome ist so ein bisschen evil an der
Stelle. Weil, ähm,
man halt
nicht so richtig gefragt wird, ob man da jetzt
mitmachen möchte oder nicht. Wenn man da selber, also ich war,
mich hat's erwischt, ja, also, äh,
das hab ich letztens, hab ich das gehört? Keine Ahnung.
Hat sich jemand darüber aufgeregt, dass Chrome da
schon so, äh, böse,
böse, böse GUI-Geschichten macht, um die Leute
dazu zu verleiten, äh, irgendwie
die Browser-History mit ihrem Profil, äh,
sozusagen auf die Geräte zu übertragen.
Was ich jetzt an sich noch nicht schlimm fände,
wenn, wenn einfach nur das irgendwie
übertragen würde, aber das wird halt auch bei Google
gespeichert. Und Google kann das halt sehen, was da drinsteht.
Und das ist natürlich, ich möchte eigentlich nicht wirklich
meine Browser-History zu Google hochladen.
Also das. Okay, ich glaub, man muss
das halt einstellen in Privatsphäre-Einstellung, ob das, äh,
überhaupt ist. Genau, aber da steht halt auch nirgendwo,
du lädst hier deine, deine Browser-History
zu Google hoch, sondern da steht, äh,
da ist irgendwie sowas wie, das sind so,
so Button-Tricks, ja, wo man dann
irgendwie, wenn man, wenn man halt, äh,
da ist irgendwie so ein Okay-Button, der sieht irgendwie harmlos aus
und wenn man da drauf drückt, dann passiert das automatisch, ja.
Und nirgendwo steht irgendwie, du lädst jetzt deine Browser-History
zu Google hoch. Und das ist schon sehr, sehr,
äh, äh,
hinterforschtig. Das passt nicht der Church auf Google.
Also ich finde, Google hat
eigentlich bisher noch nichts Böses damit getan. Insofern
hat das 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 grenzwertig. Und damit hat Google
jetzt ein, äh, also das war jetzt nur eine Geschichte.
Wir haben, Chrome hat dann noch eine andere Geschichte,
äh, wo man dann,
wo sie das nochmal gemacht haben und,
ähm, sagen wir mal so,
also ich meine, ich weiß jetzt nicht, aber es gibt jetzt diverse
Leute, äh, im Netz, die jetzt so sagen,
so, jetzt ist halt Chrome und Google so
endgültig an der Google-Seite angekommen.
Äh, 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, äh, zu verwenden,
wenn ich irgendwie nicht muss.
Es gibt Dinge, für die ich muss, also zum Beispiel zum Entwickeln,
ähm, ist Chrome tatsächlich irgendwie
ein praktischsten, es gibt da für,
äh, React und so, wenn man das baut,
äh, auch so Extensions,
die einem dann helfen, das zu debuggen und so,
und das ist so praktisch, dass ich das,
dass ich zum Entwickeln tatsächlich Chrome verwende.
Ähm, ansonsten...
Also ich verwende Chrome tatsächlich auch privat.
Selten mal in Firefox, also eigentlich nur,
um mal, weiß nicht, was anderes zu machen,
aber normalerweise eigentlich immer Chrome. Ich hab
auch nicht so viele Bedenken mit den Daten,
äh,
also ich muss sagen, äh, ich bin doof und, äh,
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, äh.
Ja, ja, vielleicht, äh.
Ja, bitte.
Vielleicht wird alles gut. Irgendwann stehen
irgendwelche Männer mit irgendwelchen Anzügen vor der Schule,
dass man weiß, dass man das so genau...
Ja, aber das ist in Amerika und nicht hier, also
das ist ja schon mal gar nicht so schlecht.
Hahaha. Also,
ja, klar. Also, nee, ich benutze
Chrome auch. Ich finde auch, das ist ein echt guter Browser
und so, aber, ähm,
ja, das war völlig wegen der Leseliste, vor allen Dingen,
weil ich dann halt, äh, sozusagen
halt auf allen... Hört mir ein, die haben nur gerade ihre
Datenschutzeinstellungen gestellt in
Europa, haben ihre Server geändert und ihre Rechtsform
geändert. Die sitzen jetzt in Irland
von der, weiß nicht, Google LLC auf
irgendeine irische Limited oder sowas.
Ähm, ich hab noch nicht da reingeguckt, vielleicht, äh,
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...
Obwohl, ähm, eigentlich hab ich
nicht so wirklich Lust, das nachzuholen. Also, wenn euch das interessiert,
dann selber mal gucken und informiert uns doch gerne
bitte in einer E-Mail, was da rausgefunden wird.
Ja. Also, ansonsten
Firefox versuche ich immer mal wieder zu verwenden,
ähm, wenn,
für so Casual-Browsing-Geschichten,
ähm, und, ähm,
dafür ist das eigentlich, also, so,
ja,
ähm, ist das Ding, das Ding ist schnell
und, ähm... Das hört sich toll an, wenn die Jochen
sagt Casual-Browsing. Ja, wo ich halt jetzt
nicht unbedingt, äh,
sozusagen irgendwie ein Bookmarks-Grad
mache oder so, ja, also,
weil ich halt einfach so ein bisschen rum
brause. Äh, und das Ding
ist auch super, sollte man auf jeden Fall noch mal ausprobieren,
wenn man das halt längere Zeit nicht gemacht hat. Das kann
einem schon überraschende, äh,
äh, es kann einem überraschend
gut vorkommen dann.
Ähm, muss man auch
aber auch so ein bisschen aufpassen. Also, die haben alle so ihre
Haken und Ösen, ne, so, äh,
äh, Chrome ist so Privacy-mäßig
ein bisschen schwierig, äh,
Safari ist irgendwie technisch leider,
da kommen wir nachher auch noch mal drauf,
äh, zu sprechen, ist halt technisch so ein bisschen
kaputt. Und Firefox
hat halt jetzt auch so ein Ding eingebaut,
so ein Privacy,
jedenfalls nicht so super optimal. Also, die verwenden
jetzt statt, ähm,
normalen Nameservern,
äh, gehen die, äh,
DNS-Requests auch per HTTP
irgendwie an eine von diesen,
ich weiß gar nicht an wen, CloudFront
oder weiß ich nicht, auf jeden Fall einer von
diesen CDN-Betreibern,
äh, was
Vorteile hat. Also, dein Provider sieht halt nicht mehr,
äh, wo du rumsorgst. Also, ich meine,
verharrte TPS, äh, was ja die meisten
Seiten mittlerweile dann halt tatsächlich sind,
sieht natürlich, äh, irgendwie dein Provider auch
nicht mehr die Inhalte, aber sieht halt immer noch,
zu welcher, äh, zu welcher Domain quasi
dein Request geht und, ähm,
da, das reicht ja dann oft schon, äh,
sozusagen als Information, äh, äh,
sieht vor allen Dingen, äh, sieht vor allen Dingen,
halt den, den Nameserver-Request, also
den, den, äh,
äh, Request zur Namensauflösung, wenn
dein Nameserver
beim Provider steht, was bei den meisten Leuten
so ist, weil das ja der Default ist,
kann man natürlich auch selber umstellen.
Google zum Beispiel. Google, ja, äh,
8.8.8.8. Google weiß dann alles.
Google weiß dann noch mehr, ja,
weil man so viel wie Provider und
Suchmaschine kombiniert, ja.
Google Home Assistant, alles integriert und dann mit dem
Auto verknüpft und so. Toll, ich kann
über die letzten Jahre mit dem Standort jeden Tag
verfolgen, wo genau ich rumgelaufen bin, das ist ja vorrangig.
Ja, ja, also ich will gar nicht
beschreiben, dass das durchaus praktisch sein kann.
Äh, genau, ich hab auch, äh, äh,
bei mir jetzt, äh, in meiner
Fritzbox, äh, irgendwie als Nameserver
eben nicht mehr den vom Provider eingestellt, sondern
äh, 1.1.1.1
und 1.1.1.0.
Äh, weiß ich nicht genau. Äh, vielleicht sollte man
da auch unterschiedliche nehmen, vielleicht den einen
von, von, äh, auch einen von diesen
CDN-Dingern und dann vielleicht einen von, äh,
von Google oder irgendwie, das ist halt
halt nicht, dass man die Daten so ein bisschen aufteilt.
Das ist ein CDN-Ding, das ist ein Content
Delivery Network. Ja, genau, genau.
Und, ähm. Was macht das?
Äh, das sorgt, äh,
dafür, dass
wenn du jetzt statische
Dateien, äh, irgendwie,
äh, äh, sehen möchtest,
wie jetzt zum Beispiel ein Video oder halt
auch Bilder. Und warum ist denn ein Video
statisch? Weil es sich nicht verändert, weil das das Video
ist, das einmal aufgenommen worden ist. Genau.
Und das als Datei auf dem Server liegt. Weil das halt eine Datei
ist, die sich nicht mehr ändert. Und dynamisch
ist es dann, wenn ich ein individuell
angezeigte Web-Oberfläche habe, die
mein Profil oder irgendwelche anderen Informationen beinhaltet.
Genau. Also, ein Applikations-
Server liefert halt irgendwas aus, was, äh,
sozusagen auf dem
Kontext der Session oder sonst irgendwie basiert.
Also zum Beispiel auch so was. Und die sind übrigens auf den
Python geschrieben, entschuldige mich.
Ja, genau. Also,
eben, natürlich. Also, ich denke, dass
die Infrastruktur, mit der man, äh,
irgendwie, äh, so CDNs 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. Äh, also, so
möglichst nah an der, äh,
am, am, am Metall, weil
das darauf kommt, da kommt's dann halt wirklich
drauf an, auf, äh, die letzten Millisekunden und
so, weil... Nah am Metall, hab ich auch
zum ersten Mal gehört, ja. Ach so, ja, nah an, an,
an, an, ja, an der CPU quasi, an den
Leiterwaren halt, ne? Ah, okay, okay, ja.
Bei Python hat man ja immer noch eine virtuelle Maschine dazwischen und so.
Und, ähm,
äh, genau.
Also, die Dinge sind eigentlich dafür da, dass, wenn ich jetzt
äh, sozusagen, eine Webseite
habe, wo halt ganz viele, äh,
äh, Dinge drinstehen, wie
Tag-Image und dann Source
und dann ist das halt eine Referenz auf
eine, auf eine, auf ein Bild oder
auf ein Video, halt je nach, je nach
Tag, dann kommt
das halt nicht von dem Applikations-Server, sondern gibt's halt
spezialisierte Dinger, die das halt ausliefern. Und
wenn ich jetzt auf der anderen Seite der Welt, äh, jemanden
habe, der das angucken möchte, dann ist es halt irgendwie so
ein bisschen sinnlos, dass einmal irgendwie
durch, äh, durch drei unterschiedliche
Untersieg-Kabel scratchen, irgendwie, wenn das ein Video
ist und das ist halt irgendwie ein Gigabyte groß,
ähm, sondern,
und, nehmen wir an, auf der anderen Seite der Welt
wollen das plötzlich, weil es irgendwie in, in,
in der Hongkonger
Club-Szene wird mein, äh, mein, mein
Ukulelen-Video plötzlich zu, äh, geht, geht
viral und, äh,
Welche Plattform? Auf YouTube vielleicht?
Nee, hab da nix.
Äh.
Ja, sehr schön, sehr schön. Genau, aber
nehmen wir an, das wird jetzt, in Hongkong wird das jetzt superpopulär,
ne, und dann, äh, wollen das irgendwie
10.000 Leute angucken. Kennst du das eigentlich, Tim?
Äh, nee.
Wegen der Ukulele, Entschuldigung, keiner Exkurs.
Ach, ist das diese britische, diese britische,
das ist schon ein bisschen her, ne?
Ist das ein bisschen Comedian-Musiker, ja, ja, ja, ja, doch, doch, doch,
dann hab ich's schon mal, mir war grad nicht klar,
ich konnte das nicht verknüpfen, aber ja, ja,
doch, hab ich, glaub ich, auch schon mal gesehen, ja,
aber noch nicht so wirklich, äh. Ja, ist großartig, ja.
Ja, okay, muss ich mal reingucken. Ähm,
genau, und wenn ich jetzt hier halt mein, mein,
mein, äh, mein Webserver irgendwo
nehme, meiner steht tatsächlich bei
Hetzner in Nürnberg, ja,
und jetzt halt die ganzen,
die ganzen Bits da von Nürnberg nach Hongkong
irgendwie durch alle möglichen, äh,
Kabel sich kretschen müssen, ist ja eigentlich irgendwie
Quatsch. Und dafür nur ein Content-Delivery-Network?
der an einem Kontinent steht
und da ist es ein großes Rechenfarm.
Genau, und die haben halt in allen Punkten, wo es irgendwie
eine Nachfrage gibt, halt entsprechend Rechenzentren stehen
und dann 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
ein deutlich breiter Zentrum und irgendwie sinnvoll.
Nur für dynamischen Content nicht?
Ja, da geht es halt nicht,
weil die können halt dynamisch,
muss dann halt die Stelle, die halt
den State-Helm ist halt gefragt werden.
Gut, schön.
Wer oder was ist das jetzt?
Das ist auch so ein Hoster,
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.
Ja, ja, ja.
Und
genau, also
die haben halt die Infrastruktur, um
jetzt Dateien quasi global
irgendwie lokal auszubilden.
Also ihre eigene
Verteilungsinfrastruktur sozusagen.
Und das ist halt naheliegend, auch DNS darüber zu machen,
weil da hat man im Grunde das gleiche Problem.
Und
ja, deswegen sind die halt sehr schnell,
wenn man jetzt zum Beispiel, ich weiß nicht,
1.1.1.1
oder so, dass ich jetzt bei mir,
das Ding, was ich jetzt bei mir eingestellt habe, da habe ich
sieben Millisekunden Latenz hin
bei mir
zu Hause, so publik ist
DSL. Und das ist fast
Wien lang. Und das ist aber trotzdem, also ich meine,
sieben Millisekunden ist schon echt schnell.
Und ich glaube, der
DNS-Server
von meinem Provider antwortet
so mit 40 Millisekunden
Latenz oder so.
Also alles unter 20 schon fast lokal.
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
fahren kann, bei jedem Request, der
irgendwie gemacht wird, oder nicht bei jedem, manchmal wird es
auch gecached, sind 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?
Das geht halt nicht unbedingt.
Weil?
Ja, der
die Domain oft auch benutzt wird,
um rauszubekommen,
an welchen Applikationsserver das fehlen soll.
Also nehmen wir zum Beispiel mal
meine private Webseite, liegt auf dem
gleichen Server
wie pythonpodcast.de.
Das heißt, wenn ich die
IP habe, ich kann jetzt ein HTTP-Request
zu dieser IP hinschicken,
dann weiß das aber nicht so richtig,
für wen ist mir das jetzt gedacht? Ist das für python-podcast.de
gedacht, oder ist das für
wer-ist-das-server.de gedacht?
Und was hat das Request dann? 404?
403?
Wenn das nicht eindeutig ist, dann
kommt dann halt ein 404 wahrscheinlich
zurück.
Dann funktioniert das nicht.
Insofern muss halt
die Domain im Host-Header mitgeschickt werden.
Aber wenn man das
mit dem Browser macht, dann passiert jetzt der erste
Namens-Auflösungs-Request.
Der könnte ja lokal routen, kann der das?
Also irgendwelche Anfragen musst du dann
versehen mit der IP und einem
Namen?
Ja, also man kann solche Requests natürlich auch
zusammenbauen, aber meistens verwendet man ja Browser
und dann passiert das halt alles automatisch.
Und da braucht man die Domains dann halt schon.
Weil in meinem statischen Web-Server
der halt sozusagen der Reverse-Proxy
von den Applikations-Servern ist, gibt es dann halt einfach
eine Tabelle. Da steht halt so, alles was irgendwie mit
Python-Podcast.de anfängt,
geht halt an den
lokalen Applikations-Server,
der auf dem Port läuft.
Und alles was halt auf die Domain geht,
geht halt an den.
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, so was.
Ja, also wir wollen ja erzählen, was alles nicht so funktioniert.
Also da hatten wir ja auch kurz den Safari erwähnt.
Ja, du hast auch gesagt,
was machst du so eigentlich die ganze Zeit?
Du hast irgendwas erzählt, du hast ein bisschen mit Audio gemacht
im Browser und so.
Ja, letzte Woche.
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,
Annotationsfronten eins gebaut und so, aber das war nie
so wirklich toll und
inzwischen
habe ich ein Projekt,
wo ich es auch mit selber mache und eigentlich bin ich ganz glücklich
drüber, weil jetzt kann ich das halt mal so bauen, wie
ich das gerne hätte und das ist eigentlich
ganz praktisch und nebenbei lerne ich
halt auch mal diesen ganzen Web-Quatsch.
Ja, Quatsch.
Deswegen, das ist alles
Quatsch.
Quatsch und ja, gut geht alles nicht.
Genau, aber so schlimm ist es auch nicht.
Es ist schon eigentlich ganz gut.
Es ist wirklich viel besser als früher
und insofern würde ich sagen, ist es auch momentan ein ganz
interessanter Zeitpunkt, um damit anzufangen, weil
es geht halt schon eine ganze Menge.
Aber immer ab und zu stößt man halt dann noch schon
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 EE, weil der hängt halt
in der Entwicklung hinterher und
da gibt es dann so unterschiedliche APIs, die Browser implementieren
können, zum Beispiel so die Media Capture API,
wo man halt einfach vom
Browser halt sowas bekommt, wie
Video oder Bild
Daten, also das kennt man
vielleicht, wenn man, ja,
also eigentlich kennt man das eher so, dass man
auf dem Smartphone dann so einen Dialog
bekommt, so möchtest du ein Foto oder Video
aufnehmen oder halt
quasi eins aus deiner Mediathek
auswählen oder so. Ah, du meinst, wenn ich auf Time klicke,
hat mich kurz abgehängt, wenn ich was mache,
was ich machen möchte? Wenn du auf einer Webseite bist
und du möchtest jetzt beispielsweise, du musst da halt
irgendwie ein Profilbild hochladen oder so,
dann gibt es meistens so einen Button oder sowas,
wo man draufdrückt und dann wird man halt gefragt,
irgendwie so Fotovideo aufnehmen
oder irgendwie ein bestehendes Foto benutzen
oder so.
Genau, und
das ist eigentlich so ein File
Input, so ein Input-Element,
was man halt da verwendet, also ein
Input-Type-File und da gibt es auch einen Standard
für, wie man da ranschreiben kann, okay, ich hätte
gern jetzt aber nur ein Foto oder
nur Audio
und zwar in dem und dem Codec und so. Das geht
eigentlich alles. Ja.
Und die Browser können das auch.
Oh, da geht's ab.
Ich glaube, das ist die Waschmaschine.
Ja, ich glaube,
auch vorhin wird das hinterher alles rausfiltern.
Na gut. Bin ja sehr zuversichtlich, mal gucken.
Bei dem Schleudergang, du warst da hinten.
Ja,
genau.
Also eigentlich wäre das ideal, wenn man
einfach irgendwo ein Element hinmachen würde,
Input-Element-Type-File
und dann halt sagt man auch, was man da gerne hätte
und dann wird der User halt gefragt, okay,
dann nimm doch halt mal diese App
zum Audio aufnehmen oder die
Fotografie-App auf deinem Telefon
und mach damit irgendwas, denn dann wird
das, was man aufgenommen hat, in der lokalen Mediathek
und quasi auch
im Browser
und im JavaScript, sodass man damit irgendwas machen kann.
Das wäre voll gut.
Das funktioniert auch in den neuesten Chromes, glaube ich,
aber das funktioniert nicht
mit dem Safari und das funktioniert auch nicht
Also es wäre halt das, was man gerne hätte,
aber das funktioniert halt mit dem Safari nicht und damit ist
iOS komplett raus und damit kann man es eigentlich nicht mehr verwenden,
weil geht halt nicht.
Genau.
Meinst du, die patchen das
oder sind die da zu
anders strategisch
aufgestellt?
Ich meine, das gibt es ja schon lange und so und andere haben
das auch schon lange implementiert und da sie das
schon seit quasi Jahren nicht gemacht haben, ist halt
warum sollten sie es jetzt tun?
Weiß ich auch nicht.
Also es könnte sein, dass es auch kommt, man weiß es halt nicht.
Aber ja, also das wäre am schönsten.
Und dann, wenn das nicht geht, gut, es gibt halt
die die Media Recorder API.
Die ist auch ziemlich schick.
Das ist halt ein bisschen mehr Aufwand.
Da muss man halt von der JavaScript-Seite aus halt hat man dann so ein Media Recorder-Objekt
irgendwie an ein 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 muss.
Sondern man kriegt halt dann ja irgendwie so ein ja Blob, so ein Binary-Objekt, das man
dann auch quasi irgendwie wieder an den Server schicken kann und so, aber so ein bisschen
ätzender.
Kannst leider nicht nachmachen mit dem Blob.
Ja, und das ist eigentlich auch nicht, das ist eigentlich, das ist auch alles easy.
Da dachte ich so, oh gut, dann könnte man ja das nehmen.
Aber das können auch tatsächlich alle Browser, bis auf.
Ja, das ist echt, echt schwierig.
Wobei man sagen muss, auch die anderen, die Formate sind halt alle total unterschiedlich.
Und das unterstützen das zwar, aber im Chrome kriegt man dann halt, ja, diese, 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 ein anderes Container, nimmt dann halt diesen, diesen Aquavis-Container.
Und aber ich glaube, sie packen da, sie packen da auch, 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 müsste das dann irgendwie MP4 sein oder so.
So was.
Hurra.
Und das ist halt alles, was das halt auch wieder schwierig macht, weil dann muss man halt auf dem Server das alles nochmal ineinander umcodieren,
weil man möchte ja auch den Browsern dann das Format schicken, was sie halt irgendwie problemlos wieder ausgeben können und so.
Und ja, für den Firefox ist das dann, dem schickt man dann halt auch wieder ein Opus-Codec im Ogg-Container.
Und das war super, danke.
Ja, war was zu trinken.
Dankeschön.
Das ist einfach so nebenbei.
Entschuldigung, wir haben euch ja auch nicht stehen lassen.
Ja, Entschuldigung, du wolltest gerade in den 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-Recorder-API nicht.
Das lässt sich dann überbrücken, indem man halt ein Polyfill halt verwendet, was dann die Media-Catcher-API benutzt, um irgendwie diesen Media-Recorder zu emulieren.
aber so richtig schön ist das alles nicht, weil dann kann man nur noch
Waff. Ich habe mir gerade einen Fleck
auf die Hose geschüttelt. Oh nein.
Entschuldigung.
Oh, vielen Dank. Ja, bitteschön.
Prost.
Das ist ein Spittbrunnen-Rotwein.
Das ist so spät der Stunde.
Ja, auch mal hier auf die Weihnachtsfolge.
Ist ja sowieso alles ein bisschen chaotisch heute,
deswegen. Ja.
Oh.
Das war lecker. Na gut.
Wow.
Mjam, mjam.
Ja, also.
Klasse.
Wir waren gerade stehen geblieben.
Ja, ja, 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 rohe Aufnahme
dann halt kriegt in diesem
Binär-Blob,
mit einem Daten-Blob, den man halt
unkomprimiert,
unkomprimiert als Waff-File.
Jetzt kann man natürlich anfangen,
in JavaScript das irgendwie nach
P4 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.
Ähm,
was ich dann mache, ist, ich schicke dann halt das Waff-File
zum Server und der kodiert das dann halt um
in die unterschiedlichen Formate und Container-Typen.
Aber ist halt dann einfach
mehr, braucht natürlich deutlich mehr Bandbreite,
wenn man das halt unkomprimiert
an den Server schickt.
Safari, die gehen halt davon aus, sie haben alle genug Bandbreite.
Ist ja auch Apple, ne?
Naja, und so richtig
dolle ist das irgendwie nicht.
Ja, und dann, genau.
Wenn man es dann beim Server hat, dann kann man das zwar
in alle Formate umkodieren, ist aber auch
manchmal, manchmal hat man dann so komische Effekte.
Ich benutze da, ähm, na, FFM-Pack als Library.
Die kann das irgendwie alles
ineinander konvertieren. Und manchmal, bei manchen,
wenn man von dem einen Format, also man nimmt irgendwas in Firefox auf,
spielt es dann in Safari ab oder so.
Ich weiß es nicht mehr genau, wie es war, ne?
Sondern plötzlich ist dann irgendwie alles nur halb so schnell oder so.
Und dann muss man dann in den Flex
von FFM-Pack aufrufen, 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, ähm,
was halt auch total doof ist,
ist halt, äh,
mit diesem Problem habe ich mich
mehr als einen halben Tag rumgeschlagen,
bis ich überhaupt rausgekriegt habe, was da das Problem ist.
Ähm, das war auch wieder
Safari. Safari!
Das ist schon der dritte
Pain von Safari, na, von einer Woche.
Also wenn man das abspielt, dann denkt man sich,
okay, ich kann mit Safari leider kein Audio aufnehmen.
Okay, gut, naja, egal.
Wie ist das für ein Teil?
Sorry.
Schießen, husten.
Das ist ja irgendwie, als hättest du eben noch eine gewisse Zigarre geraucht.
Aber, äh, na,
mhm.
Und das geht mal wieder weg hier.
Ähm, naja, äh, genau.
Aber abspielen sollte es das ja können.
Man kann das ja auch irgendwie in Format kodieren,
dass es halt Safari, äh,
abspielen können müsste, wie zum Beispiel, äh,
MP4, ja, äh,
ist ja sozusagen das, äh,
äh, Hausformat.
Äh, und dann geht das aber irgendwie nicht.
Dann fragt man sich, hä, warum geht denn das nicht?
Und, ähm,
das Einzige, was geht, ist irgendwie
MP3.
Äh, aber, äh,
da geht das auch nur so, dass man das einmal
abspielen kann und dann nicht mehr.
Und dann steht in dem, in dem Audio
Teil, äh, den man halt
auf der Webseite sieht, steht da irgendwie so was Komisches wie
Live-Übertragung.
Und dann hab ich mich zuerst gefragt, so, was zur Hölle ist das denn?
Und, ähm, ja,
es ist, es ist halt so, dass, äh,
ähm, Safari erwartet,
wenn, wenn man jetzt Audio abspielen
möchte, das heißt, man hat einen Audio-Tag,
so ähnlich wie ein Image-Tag, bloß halt mit,
mit, mit Audiodaten drin, dann kann man halt die
unterschiedlichen Formate und Codecs halt auflisten,
was man da so alles hat, und der Browser kann dann entscheiden,
was er abspielen möchte.
Und, ähm, bei allem außer MP3
äh, schickt, ähm,
Safari halt irgendwie so ein Byte-Range-Request
an den Server.
Das muss der Server dann können, er muss dann irgendwie mit einem
206 antworten, statt einem 200er.
Den benutzt Safari aber nicht.
Er schickt den halt irgendwie dahin und
schmeißt das Ergebnis weg, aber wenn
irgendwie kein 206 zurückkommt, dann
es geht einfach gar nichts, spielt ja gar nichts ab.
Ja? Also,
es funktioniert einfach nicht.
So, äh, der Entwicklungs-Server, auf dem ich entwickle,
der kann sowas halt nicht, der kann keine Byte-Range-Requests,
der kann überhaupt keine statischen Dateien eigentlich so richtig,
das ist ein Python-Entwicklungs-Server,
das ist ja nicht gedacht. Also, ähm,
antwortet der halt auf diesen Byte-Range-Request,
glaub ich, ich weiß gar nicht, womit der dann antwortet,
äh, aber irgendwie im normalen 200,
glaub ich, und da sagt
Safari so, nö, dann halt nicht. Aber es gibt auch keine
Fehler, es gibt eine ganz komische
Fehlermeldung in der Konsole,
äh, ich hab das jetzt leider wieder vergessen,
was, aber irgendwie,
überhaupt nichts damit zu tun hat, was eigentlich passiert.
Ja, und, ähm,
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,
äh, was halt auch diverse Nachteile
hat, wie zum Beispiel, man kann halt nicht
irgendwo hinspringen in der MP3-Datei,
äh, es gibt kein,
kein separate Zeit oder sowas,
wo man sagen kann, äh, also man
hat halt nicht,
irgendwie ein Header-Teil, äh,
in der Datei, wo drinsteht, also dieses, diese,
dieses, dieser Sound-Schnitzel ist so und so lang,
und, äh, wenn du halt zu
der Zeit, äh, zu diesem Zeitpunkt willst,
dann musst du dieses, diesen Byte irgendwie
abspielen oder so. Deswegen ist das
natürlich total sinnvoll, diese Byte-Range-Equests zu haben,
weil dann kannst du halt in einem Player,
äh, äh, 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.
Ja, also er sagt dann halt sozusagen, okay,
Byte-Range-Equests gehen mit MP3 dann halt nicht,
und, äh, das kann ich alles eh nicht machen.
Ähm, daher mach ich
da was anderes und tu 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, und dann werden halt
irgendwie so die Audio-Controls dunkel,
und das war's.
Und das ist halt also, wie so,
oh nein, äh, was, äh,
äh.
Ja, es gibt da, es gibt da einen sehr lustigen,
äh, Apple verwendet
für all diese Sachen so ein Radar, äh,
heißt das Ding, so ein Bug-Tracker.
Ich kenne auch Radare, aber das war was anderes.
Zu diesem Problem, das hab ich dann irgendwie so nach ein bisschen suchen,
seh, ich hatte, das Problem war rauszufinden,
was ist, was soll, was passiert hier eigentlich?
Äh, äh, als ich das rausgefunden
hatte, war es dann relativ leicht,
dann auch den entsprechenden, die entsprechenden
Geschichten im Web zu finden. Kann man sich,
mal raussuchen, wenn man so danach sucht, irgendwie Safari-Audio,
äh, Byte-Range, äh, Radar,
dann findet man da auch den, den
entsprechenden Bug bei Apple, und da haben
so Leute lustige Sachen reingeschrieben.
Ähm. Safari
Byte-Range Radar.
Mhm. Ja.
Und, ähm,
ja.
Naja, auf jeden Fall, das ist alles
nicht so toll. Ich hoffe mal, dass es dann im Produktivbetrieb irgendwie
alles geht. Ähm,
und ich einfach MP4 abspielen kann im Safari,
aber momentan spiele ich dann halt MP3 und
lebe damit, dass man es nur einmal abspielen kann und dann nicht wieder.
Okay, gut.
Äh, ja. Ja, ja.
Also, das ist alles noch nicht so, es ist nicht so,
nicht so ein total smoothes, äh,
smoothes Experience,
sondern es ist mehr so,
man fragt sich ab und zu so,
oh, das darf doch nicht wahr sein.
Ähm, ja, dann, dann, äh,
auch schön, äh, 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, ich,
da die, die Geschichten, äh, die ich da
gerade brauche, sind halt vor allen Dingen für mobile,
mobile Endgeräte gedacht.
Ähm, ist ja auch eigentlich schön, da hat man dann die ganzen Sensoren
dabei, da hat man Mikrofone dabei und so,
das, das funktioniert ja auch alles, kann, sollte man eigentlich auch Audio
aufnehmen können.
So, wenn man, äh, Fotos
macht und so, funktioniert das auch alles, kann man halt einen Test-Server
im lokalen Netz haben, äh,
auf dem das läuft, also ich hab da so meinen Python-Entwicklungs-Server
und, ähm,
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 einem der Browser halt so,
mh, nee,
das ist eine unsafe origin,
weil das ist nicht HTTPS,
mhm,
und deswegen, nee,
keine Audioaufnahme.
Kann man das irgendwie vorher umwandeln oder sowas, dass das
über einen sicheren Kanal schickt, oder?
Ja, der Browser sagt einfach, das macht er nicht.
Hm, also,
wartet, jetzt fahr ich jetzt nur oder machen das diesmal alle nicht?
Das machen tatsächlich alle nicht. Ach, damn.
Ich meine, ja, okay, vielleicht ist Audio irgendwie super viel privat
als Film oder
Foto, ich weiß es nicht.
Äh, ja, ich meine, ich kann mir schon vorstellen,
woran es liegt, ja, ich meine, das Problem ist halt da tatsächlich, dass jemand
möglicherweise irgendwie ein Telefon,
äh, irgendwie ein Meeting auf den Meeting-Tisch
schlägt oder so und dann irgendwie Sachen mitschneidet und man
nicht möchte, dass es,
ehrlich gesagt, ich weiß nicht, kann man ja auch so machen, man kann es ja einfach
irgendwie aufnehmen und später irgendwo hinschicken.
Keine Ahnung, auf jeden Fall,
äh,
das wird ja auch funktionieren. Ja, oder man hat dann eben
einen HTTPS-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 Entwicklungs-Server geht halt nicht.
Und den kann ich ja auch nicht so leicht irgendwie HTTPS-fähig machen,
das geht ja einfach nicht. Also,
dem kann ich natürlich ein Zertifikat verpassen und ich kann halt
irgendwie so ein
Reverse-HTTPS-Proxy
davor schalten, das geht ja alles.
Ein Reverse-HTTP-Proxy,
was macht der? Der halt sozusagen
das HTTPS terminiert, also
HTTPS mit dem Telefon spricht und dann die Requests
weiterleitet an meinen Entwicklungs-Server, das ging ja.
Okay, okay. Das Problem ist nur, ja,
mit einem validen Zertifikat geht das alles nicht so richtig.
ja, ohne valides Zertifikat ist
natürlich auch wieder nichts. Also, es ist einfach
doof. Oder wir müssen nochmal vielleicht
kurz erklären, was valide und was invalidere Karten sind,
aber vielleicht in Short, kriegen wir das irgendwie in the Box?
Ja, also man,
ja, dieser ganze Teil von HTTPS ist auch so ein bisschen
kaputt, aber, also,
wir sind ja heute bei der Chaos-Weihnachts-Folge,
liebe Leute, im Python-Podcast,
wollte ich nur einmal erklären.
Es ist halt so, dass ich im Grunde ja der,
also man braucht eigentlich
drei Dinge damit, was sicher ist. Also, wenn ich jetzt zum Beispiel
mal das Beispiel nehme, Online-Banking,
und ich mache
jetzt Online-Banking auf einer Webseite,
dann müssen drei Sachen garantiert
sein, damit das wirklich sich sozusagen sicher ist.
Und das ist halt...
Dein Computer ist nicht infiltriert,
die Verbindung ist nicht infiltriert, und der
C-Computer ist nicht infiltriert. Ja, aber
es gibt noch mehr Dinge. Noch mehr, mehr Teil.
Drei Dinge, aber ich würde das jetzt
eher auf so eine abstrakte
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 rein darf. Das macht man halt per
Username und Passwort möglicherweise, oder Banken
nennen das irgendwie PIN, machen komische Beschränkungen,
aber im Grunde
zeigt man damit der Bank, dass man derjenige ist,
für den man sich ausgibt.
Zumindest, dass ich derjenige bin,
der die Benutzer an dem Passwort
kennt, von dem her, dass ich mich ausgebe.
Dann umgekehrt muss das aber auch
gelten. Also, auch die Bank muss sich mir gegenüber
ausweisen, weil
ich möchte ja natürlich schon wissen,
dass ich sozusagen mit der richtigen,
mit der Bank rede
und nicht mit irgendjemandem, der zwischen mir und der Bank sitzt,
dann meine Überweisung nimmt,
da irgendwie die IBAN auf seine ändert
und dann halt die Überweisung mit der richtigen Bank macht.
Tata! Das wäre irgendwie schlecht.
Das heißt, die Bank muss sich auch mir gegenüber
ausweisen und das macht sie üblicherweise
mit einem Zertifikat.
Und das ist halt sozusagen,
wenn 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 oder irgendwie, 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 das 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 Web-Server nehmen namens Caddy
und wenn der halt auch der...
Ein Python-Server?
Nee, der ist in Go geschrieben, aber...
Ach, das müsste.
Ja, der
macht sozusagen so ein Challenge-Response-Verfahren,
mit Let's Encrypt, mit dieser Certification Authority,
holt sich dann die
entsprechenden Zertifikate. Das funktioniert alles automatisch, man muss sich
um nichts mehr kümmern und das klappt einfach so.
Das ist ein sehr viel besserer Zustand
als früher, wo man das alles von Hand machen musste und
mit Passphrases
rumhantieren und OpenSSL-Kommandos
und keine Ahnung, war alles ziemlich furchtbar.
Aber also, die Aufgabe von
einem Zertifikat ist einfach nur, sozusagen
sicherzustellen für den Benutzer
im Browser, dass da angezeigt wird, dass er mit der
richtigen Institution redet.
Also, das ist halt authentisch.
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 überweisen darf.
Du hast die Rechte, das durchzuführen,
was du möchtest. Genau, aber
ich sollte jetzt nicht irgendwie
keine Ahnung,
von anderen Leuten sozusagen
Konten irgendwas überweisen dürfen.
Oder so. Und das wäre halt Autorisierung.
Ich wäre zwar authentifiziert, in dem Sinne,
dass die Bank wüsste, wer ich bin,
aber sie muss halt auch überprüfen,
bin ich jetzt autorisiert von irgendeinem anderen Konto?
Hast du die Privilegien, das zu tun, was du tun darfst?
Da gab es ein schönes Beispiel
mal bei der
CeBIT. Also, die CeBIT, oh, die gibt es ja auch nicht mehr.
in den 90ern war die Hochzeit der CeBIT eine Computermesse
es war eine Computermesse
in Hannover gibt es ein schönes YouTube-Video
von Nixdorf, glaube ich, selbst
der zu Beginn der CeBIT gesagt hat
ich verstehe das gar nicht, was soll denn das, warum hat man das
die Hannover Messe und die CeBIT auseinandergelegt, 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 für der CeBIT tatsächlich an einem Herzinfarkt gestorben
und jetzt sagen alle so, ja okay, stimmt, warum haben wir das
eigentlich mal auseinandergelegt, jetzt legen wir es wieder zusammen, also ist das alles
noch so gekommen, wie es hätte von Anfang an vielleicht sein sollen
naja, ich glaube, die CeBIT hat einfach
nicht mehr funktioniert
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, also auf den LKWs stand IBM drauf, die Leute, die reinkamen
das waren alles so IBM
äh
die IBM-Arbeitsuniform ausgestattete Leute
die hatten irgendwie die richtigen Formulare dabei
und so, das hat alles gepasst
ähm, haben dann den Kram mitgenommen
und ähm
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, ja
ja, immer die richtigen Anträge, immer 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 gemacht
was sie machen sollen
sie haben halt nur nicht authentifiziert
das ist der Köpenick-Hack
ja
ja, man ist autorisiert, aber nicht
aber nicht authentifiziert
aber man muss dann wirklich beides haben
also wenn eins davon fehlt, ist es halt schlecht
und dann gibt es noch ein drittes, was auch sein muss
Integrität
ja, egal
äh, ja, genau
äh, genau
Integrität ist auch wichtig
weil ansonsten kann jemand das manipulieren
also, sozusagen
in die Mitte setzen und winken, oder
ja, also dafür hat man halt Verschlüsselungen
und dafür hat man halt, äh, auch
sind auch die Zertifikate zuständig, damit man
sozusagen weiß, dass man auch tatsächlich mit den Leuten redet
die das vorgeben, äh, zu sein
sagen, wenn man Integrität nicht hat
dann funktioniert das auch alles nicht
ja, es ist ja, äh, 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, ähm
jemand kann immer so tun, als wäre er irgendjemand
und wenn er sich dann authentifizieren kann
und, äh, autorisiert wirkt
mhm
dann, ähm, kriegt er die Befugnis
und gilt auch irgendwie als Integer
also, viele Leute machen vielleicht den Fehler
dass sie Integrität abhängig machen
von Authentifizierung und Autorisierung
genau, das war, ähm, äh, das ist nochmal
eine getrennte Geschichte
und, ähm, ja, wenn man diese drei Sachen
so ganz abstrakt irgendwie auf die Reihe kriegt
dann ist es halt okay
und, ähm, ja
wenn nicht, dann halt irgendwie nicht
und, ähm, dafür sind halt Zertifikate da
und im lokalen Netz ist es aber blöd
da geht halt das ganze letzten Kripp-Zeugs halt nicht
weil man dieses, äh, Web-Challenge-Response-Ding nicht machen kann
Müsste ich selber schreiben
äh, ne, also man kann auch
natürlich kann man sich selber ein Zertifikat erstellen
aber das Problem ist halt, dass man dann nicht
äh, sozusagen
äh, also offizielle Zertifikate
sozusagen, die im Browser akzeptiert sind
halt mit einem
Root-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
ein Zertifikat, äh, äh, äh
mit dem sie ein Zertifikat unterschrieben hat
ob die stimmt, ob die von der richtigen
Certification Authority kommt
Also das, äh, das Root liegt dann wo auf dem Server?
Das Root-Zertifikat, äh, ist im Browser
Die sind im Browser vorinstalliert
Das heißt, die müssen bei den Browsern tatsächlich vorhanden sein
und jeder Browser bekommt sein eigenes Zertifikat?
Ne, Browser haben eine Liste von, äh, von
von Root-Zertifikaten, denen sie sozusagen vertrauen
Ah
Und das sind halt einmal sowas wie VeriSign
und da gibt's so diverse, äh, Firmen, die das halt irgendwie machen
äh, Telekom ist auch dabei
aber halt eben auch viele Provider
äh, teilweise ziemlich seltsame Organisationen
äh, es gab da auch Leute, die versucht haben, das da reinzuschmuggeln
teilweise erfolgreich
äh, äh, ich glaub da, äh
der, äh
ähm
einer, das war super, der, vor allen Dingen ist man halt
ich glaub, ein Provider ist irgendwie pleite gegangen
hatte halt so ein Root-Zertifikat in den Browsern drin
was natürlich ne, so, und dann, äh, hat versucht jemand den, äh
und dann haben irgendwelche anderen Institutionen diesen
pleite gegangen, einen Provider aufgekauft
und dann lustige Sachen damit gemacht
einer hat versucht in diesen, in die Browser reinzukommen
auch sehr lustig, das war, das war ne, ne Spaßaktion
aber ich glaub, der hat sich, äh, genannt
äh, äh, irgendwie Honest Ali
oder irgendwas, Gebrauchswarenhändler
und wollte halt auch sein Zertifikat in den Browsern haben
und, äh, das war
oder Honest Ahmed
ich weiß nicht mehr genau, es war, also, super lustig
ähm, ja, äh
in den Browsern sind teilweise komische Root-Zertifikate
drin
ähm
ähm, aber, äh, das, also
ja, das Problem ist halt, wie kriegt man
sagen wir, der Browser muss halt irgendwo
seinen, äh, seinen Vertrauen
bootstrappen, und normalerweise passiert das ja eben so, dass
die Sachen schon dabei sind, also wenn man einen Browser installiert
sind die Dinger halt auch schon drin, und das heißt
wenn, äh, äh, 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, äh, äh
äh, Root-CR unterschrieben hat, die er kennt
oder nicht. Also bootstrappen heißt alles selber einstellen?
Kannst das auch alles selber
einstellen, aber das sind so... Aber das heißt bootstrappen?
äh, bootstrappen heißt
dass man, man braucht halt irgendwie
äh, sozusagen, man muss
äh, äh, die Unterschrift, die man jetzt unter
einem Zertifikat, äh, äh, sieht
ja, zurückführen auf irgendwas, das man kennt
äh, sozusagen, also...
Wie ist das denn, wenn man ja
unterschrieben hat, dass die dann komische Ausgründe jetzt irgendwie auch...
Und, 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
von Unterschriften, aber die Frage ist halt
irgendwie muss man letztendlich
äh, äh, äh
ja, eine haben, der man schon vertraut
und die Art, wie man halt
zu dieser sicheren, zu diesem sicheren
Vertrauen kommt, ist das halt schon einfach mit dem Browser mit ausgeliefert
wird.
Was natürlich, ja, das muss man halt dann auch
sicher sein, dass man den richtigen Browser bekommen hat,
aber...
Und dafür kann man ja eine Hashsumme prüfen, bei dem Runterladen
von der Seite. Ja, genau.
Ähm, ja.
Äh, genau.
Ja, alles nicht so einfach, alles nicht so einfach wird, also, ähm, 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. Ähm,
ja, also, äh, Audi und Browser haben ja irgendwie, äh,
versucht zu erklären, und ein bisschen, was für Probleme der
Safari die ganze Zeit macht, und, äh, was da alles nicht so
funktioniert. Ähm, es sind aber noch einige andere
Sachen, die haben nicht funktioniert, die, ähm, auch mit Python zu tun hatten.
Ja. Ähm, wobei,
na, vielleicht zuerst mal, äh, noch eine Sache, die,
die dann tatsächlich funktioniert hat, also der, der,
der Server-Teil quasi in, das ist dann
auch tatsächlich Python. Ja.
Django, ähm, das hat eigentlich
alles ziemlich, ziemlich gut funktioniert.
Ihr habt die letzte Folge von nicht gehört. Mhm.
Und, ähm, ja, da, was ich da mache,
äh, ist, äh, ähm,
äh, ein Protokoll
nennt sich, äh, GraphQL, das ist
eine Geschichte, die hat Facebook irgendwann mal veröffentlicht.
Das ist tatsächlich ziemlich
nett. Also, das ist halt sozusagen eine Alternative zu,
vielleicht erkennt man das, äh, wie so
REST-basierte, äh, äh,
äh, APIs. Also,
zum Reden über JSON
Files, oder?
Ähm, ja, also, quasi,
wenn man nicht ne, ne Webseite haben möchte,
die man dem User präsentiert, wo halt,
äh, die gelandet werden soll von dem Browser,
sondern, wenn man jetzt irgendwie welche,
irgendwelche Daten haben möchte von einer API,
also, äh, heutzutage hat man
oft einfach ne, ne Web-Applikation,
die, äh, im Browser
läuft, äh, die einem angezeigt
wird, und von, von,
vom Server selber kommen eigentlich nur noch so
JSON-Daten. Ähm,
und, ähm,
die Art, wie man die vom Server holt, ist halt, man,
man, äh, spricht halt
irgendeinem Protokoll mit dem Server, ähm,
immer noch sehr beliebt,
und, äh, ich, es ist halt, äh,
äh, REST
an der Stelle, ähm,
das ist halt so, ähm,
ja, wofür steht REST eigentlich?
Das ist ein Rahmen, um
JSON irgendwie zu verstehen, oder?
Ne, das hat gar nicht, gar nicht unbedingt was mit JSON zu tun,
das kann halt auch ein anderes Format sein, äh,
das ist, ähm,
äh,
äh, Representational State
Transfer natürlich. Ja. Ja, ja, klar.
Ähm, also, man kann das auch,
äh, man kann auch REST, äh, äh,
äh, Protokoll, oder, ähm,
eine REST-API haben, wo man dann XML zurückbekommt,
oder halt irgendwas anderes,
äh, äh, so, äh,
irgendwie,
hm, na, wie heißt das, so eine Art
ähm, binäres JSON-Message-Pack,
oder, äh, äh, äh,
wie der JSON-Formate, äh,
äh, JSON wird meistens verwendet, aber
ist nicht unbedingt nötig, also,
zum Beispiel bei, wenn man jetzt Django REST-Framework als, äh,
äh, Modul
oder Third-Party-Django-App verwendet,
die, äh, den REST-API
teilen macht, dann kann man
hinten an die Request einfach Fragezeichen-Format
gleich irgendwas dranhängen, wie zum Beispiel
JSON oder XML, und dann kriegt man halt XML statt
JSON zurück. Ähm,
also das ist, äh,
das ist eigentlich unabhängig von dem Format, das entscheidende
bei REST ist eigentlich, dass man
die HTTP-Werben benutzt,
äh, um mit dem Server zu kommunizieren.
Also, dass man, wenn man jetzt, äh,
äh, Dinge haben möchte,
also eine Liste von Sachen haben möchte,
äh, und das auf dem Server
an dem State des Servers nichts ändert, dann verwenden
wir halt ein GET-Request. Wenn man
Requests macht, die an dem State irgendwas verändern,
dann muss man halt POST oder PUT
oder PATCH-Requests verwenden,
ähm, und
wenn man irgendwas löschen möchte, dann sendet man halt
einen DELETE-Request.
Ja, die meisten Leute kennen ja wahrscheinlich nur GET und
POST, ja, aber es gibt halt dann noch
eine Menge andere Dinge. Und, ähm,
ja, äh,
äh,
äh, die, diese Sachen benutzt man im Grunde,
um, um halt mit dem, mit dem Server zu kommunizieren,
und man benutzt halt auch die
HTTP-Status-Codes, ja, das heißt,
man, äh, wenn, wenn
einer nicht authentifiziert ist, kriegt man 401 zurück,
wenn man nicht autorisiert ist, kriegt man 403 zurück,
äh, wenn man in den
T-Kanal ist, kriegt man 407 zurück, äh,
äh,
das gibt, glaub ich, oder 409,
15, ich weiß es nicht genau, es ist halt irgendwie
eine Fehlermeldung, heißt es eigentlich T-POD. Es gibt manchmal
so, ähm,
ja, ja,
402 fällt mir noch ein, ja.
Ja, den kenn ich gar nicht, was, was macht 402?
Payment Required. Ah, ja, genau.
Also es gibt da diverse, äh,
Wurde nie benutzt, aber, ähm, ich hab ein T-Shirt, hab ich mir jetzt draufgeschrieben.
Das ist eine gute Idee.
Ja, ähm,
ja,
und das ist im Grunde, äh, das ist im Grunde
Rest, das ist auch eine sehr schöne Sache,
äh, ein bisschen ein Nachteil bei Rest ist
halt, dass, ähm,
man manchmal so das Problem kriegt,
wenn man jetzt so genestete
Daten, also Datenstrukturen, die so ineinander
verschachtelt sind, abfragen möchte, äh,
dass, dass es dann manchmal
etwas schwierig wird und man oft dann halt mehrere
Requests braucht, ähm,
und, also wenn man
jetzt, weil, weil oft
so diese Resta-APIs direkt auf Tabellen mappen,
die halt irgendwie in der Datenbank sind,
äh, das macht das Ganze manchmal so ein bisschen
schwierig und dann kann es dazu führen, dass man halt sehr viele
Requests rausschicken muss zum Beispiel.
Da muss man sich immer die, die Deep Links dann besorgen
für den neuen Request, damit dann die Tabelle vollständig wird,
die man selber haben will.
Ja, oder man hat halt in der Tabelle jetzt nur eine ID,
eine Referenz auf eine andere Tabelle drinstehen sozusagen,
man möchte aber eigentlich die gesamten Daten haben,
und dann, dann muss man sich erst alle IDs
holen, dann schickt man die IDs wieder zum Server und holt
die neuen Objekte, was dann ein bisschen doof ist.
Man kann das auch so machen, dass es halt, ähm,
ähm, dass man direkt
die Daten bekommt, die man haben möchte,
aber dann muss man auf dem Server, äh, das halt auch
so hinbauen, dass das so geht.
Mhm. Und vor allen Dingen
ist es halt unveränderlich, man kriegt halt immer
das gleiche Ergebnis, unabhängig davon,
ob man jetzt das braucht oder nicht. Man kann das jetzt,
zum Beispiel, wenn man jetzt in den Server reinbaut, okay, du kriegst
jetzt nicht nur irgendwie
die Liste der IDs, sondern du kriegst halt direkt dann
schon genestet da drin die
Datenstruktur, die du eigentlich haben möchtest.
Nehmen wir an, du hältst gerne eine Liste
der, äh, der, der
von, ähm, aller
Alben, die du hast, und, ähm,
jetzt hast du aber nicht nur die Track IDs da drin, sondern
halt auch Interpret und, äh,
Dauer oder sowas. Ja, der Vorteil, den
das natürlich hat, wenn man die nicht direkt alle mitcheckt, ist,
dass natürlich die Datenmenge, die man bekommt, nicht so riesengroß ist.
Ja, aber jetzt, nehmen wir an, du hast einen kleinen, zwei
Ansichten. Eine, äh,
zeigt halt nur, welche Alben es gibt,
und eine zeigt halt auch die Interpreten
und die Dauer, jetzt nehmen wir an,
an.
Ja, jetzt kannst du, da hast du mehrere
Möglichkeiten, das zu lösen. Du kannst jetzt zwei unterschiedliche
API Endpoints, also Endpunkte,
anfragen, so, wo du halt einmal das ohne die Tracks
kriegst und einmal mit. Dann hast du aber das
blöde, da hast du zwei Endpunkte, musst halt zweimal irgendwie
den Endpunkt implementieren.
Du kannst 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, äh,
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, äh, Tracks zu bekommen,
oder die Metadaten für die Tracks.
Ähm,
und dann hast du das Problem, dann überträgst du
zwar nicht zu viel Daten, aber dann hast du halt
Latenzen, die sich
aufaddieren, weil du immer noch mal
einen Roundtrip hast pro, äh,
Voralbum. Ja, oder
Du kannst auch vielleicht alle Gleiste nicht kriegen
oder so, aber du hast auf jeden Fall noch mal einen, und es kann halt
dann auch viel komplizierter werden, wenn du jetzt noch mehr
verschaffelte Geschichten hast. Und GraphQL kann das.
Und GraphQL löst dieses
Problem. Ja, tatsächlich ziemlich
elegant, und, ähm, da
kann man halt sozusagen auf der kleinen Seite bestimmen,
was man gerne hätte. Man schreibt halt, ja,
und das ist halt der große Unterschied im Grunde,
äh, bei normalen REST-Apps, äh,
BI's, äh,
kriegst du halt immer das Gleiche, ja. 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 Query
reinschreiben, ich hätte gerne diese Spalten, und
ich hätte gerne, das soll jetzt genestet sein, und dann
noch diese Relation mitverfolgen,
und dann da die Spalten aus der Tabelle und so.
Macht natürlich die Query ein bisschen länger
und komplexer. Macht die Query komplexer, und, ähm,
ja, ist natürlich auch auf der
Serverseite so ein bisschen schwieriger, weil man muss dann auch
passen, dass man nicht sich da so
durch die ganze Datenbank hangeln kann, wenn man da jetzt irgendwie
die ganzen Relationen auflöst.
Ähm, aber
es ist halt tatsächlich auch oft sehr praktisch.
Und, ähm,
ja, was man halt auch, also das ist halt ein, äh,
das Projekt hat, äh,
das Protokoll hat Facebook irgendwann mal, glaube ich,
intern entwickelt, und dann sind sie irgendwann, dann haben sie
es zum öffentlichen Standard gemacht,
äh, weil sie halt das Problem haben mit ihrer App,
dass sie ganz viele Abfragen machen,
und, ähm, dann halt
die gleichen Daten an unterschiedlichen Stellen brauchen, aber
dann hat man halt nicht genau die gleichen Daten, und
das ist halt alles, irgendwann haben sie gesagt, so mit
dem Rest kommen wir hier nicht weiter, und dann haben sie sich was Eigenes überlegt,
was sozusagen ihre, äh,
Probleme da adressiert,
und, ähm, ja, GraphQL kann auch andere
coole Sachen, da kann man halt solche Sachen machen wie,
äh, man kann diverse
Statements, äh, Queries zusammenfassen,
ja, man nimmt halt,
das heißt, man macht so zum Beispiel solche Sachen wie,
alle 10 Millisekunden sendet man halt
irgendwie eine Query raus,
ja, das heißt, man sendet nicht jedes Mal, wenn eine Query gestellt wird,
im Client, äh, irgendwie eine Anfrage raus, sondern
man sammelt alle Queries, dann packt man die
in eine große Query,
und, äh, die man dann rausschickt,
und kriegt dann die Antwort, und dann kann man halt dafür sorgen, dass, äh,
zum Beispiel nur, äh,
in bestimmten Intervallen irgendwie Sachen in den Server geschickt
werden, ja, was halt dann die Anzahl der Requests auf den Server
reduziert und so, also da sind einige
sehr, sehr nette Optimierungen drin,
und, ähm, für
Django gibt es, äh, eine Bibliothek,
die nennt sich Graphene,
äh, die man da verwenden kann,
und das ist, das ist tatsächlich ziemlich,
ziemlich nett, ähm,
äh, und dann hat man sozusagen
GraphQL, äh,
Protokoll-Unterstützung, äh, auf,
auf Django-Seite, und, ähm,
da gibt es noch ein sehr schönes Frontend,
das man da auch verwenden kann, das nennt sich GraphiQL,
GraphiQL, ja,
ähm, das ist sozusagen so ein
grafischer Browser für, und dann kann man dann halt, das macht
auch, äh, so, ähm,
äh,
TabCompletion auf den Queries
und so,
äh, EQL, halt, äh,
mit Q,
äh, ja, naja, egal, genau,
ähm, es ist halt dieses, dieses,
dieses Frontend, ähm,
und, ähm, genau,
ich hab eigentlich so die letzten Jahre meistens
REST gemacht, aber, ähm,
äh, und GraphQL
mach ich jetzt noch nicht so lange, aber ich,
ich muss sagen, es ist doch sehr, sehr nett.
Was teilweise so ein bisschen ätzend ist,
ja, also es macht es halt alles komplizierter, wenn's mehr,
es ist halt mächtiger oft, und das
macht es halt auch kompliziert, was auch
komisch ist für jemanden, der aus dem REST,
äh, äh, aus der REST-Welt kommt,
sozusagen, ist auch, dass HTTP-Werben
keine große Rolle mehr spielen,
das heißt, äh, man schickt immer Posts
an den Server, und man bekommt
eigentlich fast immer 200 zurück, und dann,
das war am Anfang immer so beim Debuggen, wenn irgendwas
nicht funktioniert hat, dann guck ich, guck ich so in den
Network-Tab auf dem, im Browser,
und dann halt so, kommt 200 vom, vom, vom
Server zurück, und ich denk mir, da kommen ja auch 200 zurück,
warum ist denn das ein Fehler? Dann so, ja,
okay, muss man die Antwort
erst aufmachen, dann steht da drin so, ja,
also hier ist dann 200, und da,
hier ist der Body deiner Response, und da steht da drin, ja,
jetzt ist halt viel da passiert, ja, also, wenn man aufs REST
kommt, dann rechnet man nicht damit, weil da ist halt ein Fehler,
es ist halt schon was anderes, es ist halt nicht 200,
ähm, ja,
aber, wenn man sich dann dran
mal so ein bisschen gewöhnt hat, dann, äh, ist das
auch nicht mehr so schlimm,
und da gibt's auch tolle, äh,
Debug-Geschichten für den Browser,
wo man das dann halt auch wieder ordentlich sehen kann,
äh, da muss man sich allerdings dann
als Browser-Extension, äh, installieren, also zum Beispiel
für, ich verwende als Client Apollo,
der Apollo-Client, und
da gibt's dann so eine Extension für, für
Chrom, ähm,
der, es gibt einen Client,
der, der, von, von, von Facebook selber,
Relay-Client,
der ist, äh,
ja, den hab ich nicht ausprobiert, der ist relativ
vollständig, soll sehr mächtig sein,
aber, äh, es halt auch gilt
auch als nicht so ganz einfach zu bedienen, und ich
fand, ehrlich gesagt, Apollo schon ziemlich schwer zu bedienen.
Also, wenn der Jochen es sagt, dann
kriege ich den Finger auf den Tisch. Nein, nein, nein,
das Ding ist eigentlich gar nicht schlecht, es kann wirklich coole Sachen, aber,
das ist schon so,
äh, so wirklich,
also, es kann, kann auch daran liegen, dass ich halt mit
JavaScript noch nicht so richtig super viel Erfahrung hab,
aber die API davon fand ich schon
teilweise, boah, so...
Schandwürdig. Nö, das ist
einfach, einfach schwierig, aber was halt auch damit
zusammenhängt, dass es 'ne komplexe Geschichte ist.
Also, es gecached halt auch ganz viel
intern, und wenn man jetzt, äh,
irgendwie, zum Beispiel, wenn der User irgendwie einen neuen,
äh, neue Entität von
irgendwas erzeugt, dann muss man ja dafür
sorgen, dass der Cache geupdatet wird, jetzt kann man einfach
dieses Query nochmal ausführen, aber dann hat man ja
Latenz im, im Frontend, das will man auch nicht,
und dann kann man, äh, quasi
dem Cache sagen, also hier, äh,
ich bin mal optimistisch,
das ist das Ergebnis, was wahrscheinlich
demnächst vom Server zurückkommt,
zeigt das dem User doch schon mal an,
und, äh, 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 so,
und aber dann, wenn dann irgendwie 'ne Fehlermeldung passiert,
dann muss die ja natürlich auch wieder hochbubbeln, und,
also, pff, ja...
Nee, ihr müsst nicht bubbeln.
Ihr müsst halt dann auch dem User wieder angezeigt werden, irgendwie.
Ja, ja, ja.
Das ist alles so ein bisschen...
Aber, aber, aber nee, es ist schon,
ist schon nett, und, ähm, ich glaube, wenn ich jetzt irgendwie
nochmal die Wahl hätte, wenn ich bei einem neuen Projekt
ob ich da jetzt REST nehme, oder, oder, ähm,
GraphQL, würde ich
wahrscheinlich tatsächlich zu GraphQL trainieren.
Weil das halt doch einige sehr nette
Vorteile hat. Und, ähm,
ja, also insofern,
äh, das ist, das ist halt, äh,
vielleicht ganz interessant
zu wissen, dass man nicht unbedingt auf, auf Node,
Node.js Server umsteigen muss, wenn man
GraphQL machen will, sondern dass das mit Django und
Graphene halt auch eigentlich ziemlich gut geht.
Okay. Ja. Werden wir unbedingt
in den Shownotes erwähnen? Ich würde sagen, jetzt haben wir ja
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, ähm,
was alles nicht so funktioniert. Wir hatten am Anfang erwähnt:
Pandas, Requests, REST-B mit
Hass. Ja. Was ist am
nächsten, ähm...
Ähm, ja, die, die, die,
die Pandas-Geschichte ist eigentlich auch ganz, ganz, äh,
äh, interessant.
Ist ja eine superpopuläre, äh,
Bibliothek und, ähm... Die kenne nur ich.
Ja. Ja. Äh,
ne, ist, äh, ist halt quasi so ein bisschen
Excel für, äh... Für Python.
Für, für, für Python, so für Programmierer.
Ähm,
und, ähm, ja, ist auch alles,
alles sehr nett und so, aber, äh,
da hat, äh, man, man
stößt halt irgendwann dann auch irgendwie an die Grenzen
und, äh, hatte ich halt auch schon
irgendwie Ärger mit. Ich hab
irgendwie, das ist jetzt auch schon ein bisschen
was her, aber, ähm,
viel, äh, mit, mit,
äh, mit Pandas gemacht und vor allen Dingen
viel mit Pandas und Hadoop, äh, irgendwie
Sachen, Datenstrukturen aus
Hadoop irgendwie in Pandas, äh, verwenden
wollen und, ähm,
äh, ja, tatsächlich,
ähm,
waren da nicht alle Dinge nur, äh, die Schuld
von Hadoop.
Was man ja denken könnte, ja.
Ja, ja, was auch, also, ich, also,
Hadoop ist schon
auch speziell und, ähm,
da gibt's, gibt's viele Geschichten, die da nicht
so gut funktionieren, aber, aber eben bei Pandas
gibt's auch Probleme, äh, und
da auch, ähm, das ist auch schon
ganz alt, da hat, äh, der, der
Gründer dieses, des Pandas-Projektes,
äh, Wes McKinney, hat irgendwann mal, äh,
einen Vortrag, glaub ich, gehalten, wo er, äh,
geschrieben hat: "Ten, ten things
I hate about Pandas" und das hat
er jetzt nochmal aktualisiert, ähm,
ähm,
das ist jetzt aber auch schon über ein Jahr her, in einem
Blogartikel, wo er, äh,
äh, den er, den er, den er,
den er, glaub ich, betitelt hat mit, äh, "Ten things
I hate about Pandas", äh, und, und
äh, das ist so, äh, so, äh,
ähm, was halt so ein bisschen diesem ganzen Kram
abhilfen, schaffen soll,
und, ähm,
ja, also, Pandas kann so diverse
grundlegende Geschichten nicht, also wie zum Beispiel
so ein Problem ist halt, äh, oder
sagen wir mal so, das ist sogar eher ein Problem
von NumPy, was unten drunter liegt,
so Null-Werte
gehen halt nur wirklich schön mit
Float.
So, wenn's Integer-Spalten hat
und hat dann Null-Werte drin...
Aber NumPy kann auch NUN. Oder NUN, also fehlende
Werte irgendwie, also
nicht definierte
Werte, sozusagen, dann hat man da ein Problem,
wenn man das nicht, äh, äh,
quasi, das gibt's halt nicht.
Und das ist ja so ein bisschen schlecht, weil es gibt die ja schon.
Kann man sich
überlegen, wie man das irgendwie kondiert? Schreibt man da
vielleicht -1 rein oder so?
Aber wenn -1 irgendwas bedeutet, dann ist das
halt doof, unter Umständen. Oder
man kann sich eine beliebige andere Zahl ausdenken,
ja, die man dann da reinschreibt, aber man
kann halt eben nicht Namen reinschreiben. Das geht halt nicht.
Aber
gibt's da nicht dieses, äh, NUN, also dieses, ähm,
ich meinte dieses NumPy-NUN?
Ja, das geht nur bei Float.
Das geht nur bei Float? Ja. Okay.
Und, ja, das ist halt so ein bisschen
doof.
Ähm,
ja, dann, äh...
Das geht nur bei Float? Ja.
Muss ja mal kurz in das NumPy-Kapitel
reinschauen. Ich will grad nämlich so ein, äh,
so ein NumPy-Buch liegen.
Ja, aber bitte erzähl weiter, warum das doof ist.
Ja, also, vor allen Dingen, wenn man jetzt
zum Beispiel in Hadoop, äh, irgendwie
Daten hat, ähm,
die
das können, und wo man halt, äh, irgendwie
so, ähm,
äh, Datenformate hat, die das halt unterstützen,
dann hat man halt fehlende, äh, fehlende
Werte irgendwie, und möchte das jetzt in
Dataframe pumpen, dann kriegt
man halt Probleme, wenn das halt nicht funktioniert.
Und dann, ähm,
das ist halt auch alles so ein bisschen, bisschen
schwierig. Ähm, man kann zwar,
und dann, also, es gibt halt dieses, äh,
Apache Error-Projekt, das ist halt vielleicht auch ganz interessant,
ähm,
wo es darum geht, quasi diese,
ein einheitliches, äh,
einen einheitlichen Datencontainer zu haben, den man halt
dann von unterschiedlichen Sprachen aus benutzen kann, also auch
von R oder, äh, von, von
C++, äh, oder halt eben auch von Java
aus, ähm,
und das geht halt mit
NumPy so nicht, und, ähm,
ja, also, insofern hat man da,
wenn man heutzutage Pandas verwendet, noch
eine ganze Menge Probleme, aber... Apache Error.
Mhm.
Arrow ist halt sozusagen das Projekt, das das
diese Geschichten, äh,
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, äh,
tatsächlich nur einmal, also das ist auch so was
zum Beispiel, was in Pandas eigentlich nicht geht,
du kannst halt nicht so, ähm,
Daten
"memory mapped" in einem DataFrame haben,
also, nehmen wir an, du hast halt Daten, die sind
zu groß für deinen Hauptspeicher. Mhm.
Ähm, ähm,
jetzt, äh, möchtest du dir möglicherweise
teilweise immer nur so in den Hauptspeicher mappen,
dann darauf irgendwas machen,
und dann irgendwas anderes in den Hauptspeicher mappen.
Aber du kannst halt nicht ein komplettes
Pfeil, weil es einfach zu groß ist, oder so in den Hauptspeicher lesen.
Wie, ist denn mein Hauptspeicher jetzt nicht groß genug?
Wie geht das denn heutzutage? Ja, ja, doch, gibt es tatsächlich,
also, ja, oder ist es halt
so, ist es, ja, äh,
ja, oder vielleicht will man
das, äh, 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
Pocket File irgendwie
liegen
sozusagen
in einem Container drin
den du halt von allen Sprachen aus ansprechen kannst
und kannst dann halt irgendwie mit A
deine Analysen drüber fahren
und halt mit
Python und Pandas
beziehungsweise halt
irgendwelchen Machine Learning Bibliotheken
kannst das 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
NAN
für Integer gibt es halt nicht
und dann machst du das halt in jeder Sprache nochmal
das heißt du hast den Speicheraufwand
für jede Sprache die du dann benutzt
weil du das in den Hauptspeicher laden musst
und die Repräsentationen sind dann auch noch leicht unterschiedlich
weil halt bestimmte Sachen nicht gehen
und dann kommen halt bei Analysen
irgendwie unterschiedliche Sachen raus
und das ist alles schrecklich
und dann sagen Leute sowas wie ja abhalten kann das halt nicht
oder keine Ahnung
AR ist halt irgendwie doof
oder Java hat es wieder verbockt
aber eigentlich
genau wenn man jetzt eine gemeinsame Infrastruktur
darunter hätte die sich darum kümmert
dann wäre das alles deutlich einfacher
und das soll
Apache Arrow mal werden
das ist jetzt schon eine ganze Zeit
ich habe das halt im Zuge meiner
Hadoop
Geschichten halt auch mal kennengelernt
weil ich hatte halt das Problem also mein Hauptproblem war
dass ich Daten nicht schnell aus dem Cluster rausgekriegt habe
und das ist halt so
und da mit Apache Arrow konnte ich halt diese HDFS-Files
halt direkt lesen
und das war
na gut
da musste man auch noch Bibliotheken verwenden
die das dann halt konnten
aber ich kriegte das halt irgendwie
in eine Arrow-Datenstruktur
und daraus dann wieder in DataFrame
und dann ging es halt weg
aber da wird aktiv dran entwickelt
ich weiß es gab das auch mittlerweile
so Westmark-Königs Hauptprojekt denke ich mal
und das wird eine super interessante Geschichte
in der Zeit
in der Zukunft
ja und das soll halt sozusagen
einige der Hauptschmerzen
die man mit Pandas so heutzutage hat
irgendwie in den Griff kriegen
ja
das ist vielleicht ganz interessant
sich das mal anzugucken
okay Apache Arrow als Lösung für Pandas-Probleme
ja gehen wir vielleicht zum nächsten Punkt
Web-Parsing
ja genau so Web-Parsing
also vielleicht da sollen wir auch mal
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
und
wie machst du das so generell?
nimmst du eine wundervolle Suppe oder?
Beautiful Soup
ja
also das kommt auch immer nochmal vor
dass man das für irgendwas verwendet
aber ne meistens benutze ich jetzt tatsächlich
eine Bibliothek namens Requests HTML
ist von dem gleichen Autor
wie auch Requests
also die Standard-Bibliothek
ne ist nicht
ist nicht Standard
also nein, Requests ist die Standard
ja ja genau
Kenneth Wright
und
das
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
die Flasche war so dunkel
zum Wohl
mhm
ja dann Prost
Prost, vielen Dank
mhm
ach, toll
ja
und zwar hat man halt mal so Probleme wie
naja man möchte jetzt irgendwelche Dinge aus dieser Seite
die man irgendwie geladen hat
rausselektieren
man möchte irgendwie
naja manchmal sind die Seiten dann so ein bisschen unterschiedlich
oder dann geht das nicht so gut
mit Beautiful Soup kann man da ein bisschen was bauen
das Problem ist halt
dass sobald das nicht mehr so
äh sie sind nicht komplett gleichgültig
dann wird das mit Beautiful Soup auch schon
irgendwie so ein bisschen schwierig
ähm
und ähm
dann muss man lieber das eigene Skript schreiben
für jede einzelne Seite
kann man natürlich machen
für jede einzelne Seite
oder für
machen wir einfach Faltunterscheidungen oder so
ähm
es gibt eine saukoole Geschichte
ähm
das ist tatsächlich auch ein
Bibio
äh
ein ähm
Pipe-Modul
das wirklich cool ist
nennt sich Path
und ähm
das kann man auch noch für andere Sachen verwenden
aber in diesem Web-Scraping-Umfeld
kann man es auch so
für ne Geschichte verwenden
das hatte ich früher als Idee auch schon immer mal
äh
so
wenn man sich vorstellt
wie ne Webseite generiert wird
dann hat man ja
irgendwie so ein
ein Template
und ähm
äh
dann
ne Datenbank
und dann wird dieses Template ausgefüllt
meistens mit Werten aus der Datenbank irgendwie
mhm
und
selbst wenn man jetzt Seiten hat
die so ein bisschen unterschiedlich sind
dann ist das doch meistens irgendwie
dasselbe Template
irgendwie
mhm
und ähm
ja jetzt war
dachte ich früher immer schon so
dann hab ich dann auch gemerkt
das haben Leute schon implementiert
Leute haben sich überlegt
okay wenn ich jetzt mehrere Seiten habe
dann kann ich doch vielleicht
kann ich das Template daraus extrahieren
kann ich es sozusagen
im umgekehrten Prozess machen
und wenn ich das Template habe
dann ich möchte einfach nur
alle Werte haben
sozusagen
die aus der Datenbank kommen
wenn ich die Datenbank wieder zurückbekomme
und ähm
äh
da gab es einige
da gab es auch auf dem
ursprünglichen Auto von
von Jango
irgendwie eine Bibliothek zu
die aber schon lange nicht mehr gibt
oder gepflegt wird
ähm
äh
die sozusagen automatisch rausfinden soll
was das Template ist und so
ähm
und äh
diese Path-Bibliothek
ist aber jetzt eigentlich
das ist auch cool
da schreibt man im Grunde
sozusagen sein Template irgendwie rein
ähm
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 äh
das äh
muss man sich mal
also kann man sich mal angucken
wie das genau funktioniert
ähm
das äh
in dem Request.html-Paket ist
äh
gibt es dann so ein
ein Search-Kommando
wo man das dann halt verwenden kann
ähm
und ähm
das löst dieses
dieses Problem zum großen Teil
ähm
Sachen aus einer Seite raus zu parsen
irgendwie
ähm
ja
und ähm
dann kann es halt
äh
kann das
das ist ein Teil
man möchte halt irgendwie
äh
sozusagen da irgendwelche Werte
aus einer Seite rauslesen
ähm
und eine andere Geschichte
die man halt auch immer wieder hat
ist
wenn jetzt da Javascript drinsteht
dann möchte man eigentlich
eine gerenderte Version
der Seite sehen
man möchte halt nicht
das HTML sehen
weil oft hat man
dann kriegt man dann halt nur so
Grundgerüst an HTML
irgendwie einen Haufen Javascript
und JSON-Daten
und dann weiß man aber nicht
was man damit irgendwie machen soll
äh
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
ähm
und dafür
äh
gibt's bei RequestHTML
auch so eine
äh
relativ schöne
schöne Geschichte
nämlich
also das ist noch so ein bisschen
hacklich manchmal
aber
äh
da ist so ein Headless-Browser mit drin
also
gab's auch früher alles schon
es gibt äh
irgendwie
ähm
na wie heißt das Ding
äh
diese Java Selenium
äh
als Interface
es gibt
PhantomJS
es gibt ja diverse Geschichten
die man benutzen kann
die halt alle so eine
leicht andere API haben
und so
das ist immer ein bisschen schwierig
äh
Chromium hat eine ganz schöne API
die man benutzen kann
aber es ist alles irgendwie
äh
na
nicht so dolle
es gibt für JavaScript
gab's eine Bibliothek
äh
Bibliothek namens Puppeteer
äh
und dafür gibt's eine Python-Adaption
namens Puppeteer
und das ist eingebaut
in RequestHTML
und das ist halt alles
relativ schön verbastelt
so dass man davon nichts mitkriegt
also was das Ding dann tatsächlich tut
man sagt so
führ doch mal
JavaScript auf dieser Seite aus
und rendere mir das
und dann kann man
man kann halt über eine API sagen
gib mir einfach ein Bild
dieser Seite
oder
man kann sagen
gib mir irgendwie
den gerenderten DOM dieser Seite
oder gib
hier ist ein Stück
schnipsel JavaScript
führ das mal im Kontext
dieser Seite auf
äh
aus
und ähm
dann was RequestHTML macht
ist
es lädt halt ein Chromium runter
und äh
es bastelt das alles so zusammen
dass es irgendwie funktioniert
und äh
es rendert halt dann die Seite
und gibt dann das Ergebnis zurück
und das Ganze sogar
mit einer asynchronen
äh
API
so dass man das halt alles
so in
äh
S-I-O-Umfeld verwenden kann
und man
man hat mit diesem ganzen Stress
den man normalerweise dann so hat
hat man nicht mehr viel zu tun
was sehr nett ist
ähm
und das funktioniert tatsächlich sehr gut
also früher hab ich
ich hab damit so oft
mit irgendwelchen Kram
äh
rumgeschlagen
äh
ich hab
teilweise muss man dann
Webkit kompilieren
und dann
äh
gab's da diverse Geschichten
es gab noch Splash
früher mal
es gibt eine ganze
äh
ein ganzes
diese
die Leute die auch Scrapey bauen
da gibt's eine Firma dahinter
die haben da diverse Service
die sie anbieten
ähm
da gibt's noch
da kann man auch irgendwie
Scraper irgendwie erstellen
ich glaub ein Tool heißt Porter
wo man dann auch sagen kann
was auf einer Seite wo ist
und so
und ähm
die haben auch so ein Proxy
namens Splash
wo man dann halt quasi
über so ein Proxy
einen Headless Browser hat
mit dem man dann
irgendwas Dinge machen kann
da kann man dann auch irgendwie
JavaScript in der Seite
injizieren
oder irgendwelche Sachen
rausparsen
aber das war alles
immer ziemlich
ziemlich ätzend
kannst du nochmal ganz kurz erklären
was Scrapey denn genau macht
zum Vergleich
ja Scrapey
Scrapey ist
äh
auch
es ist im Grunde so eine
naja
Komplettlösung
mehr oder weniger
also da
kommt's dann auch noch mehr
auf den
auf den Crawling-Teil
im Sinne von
äh
ich hab 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
äh
irgendwie die
die Seiten holen
und so
dafür ist das halt
eher gedacht
äh
halt
dass man quasi
wirklich eine komplette
Seite halt
irgendwie mal so
da drüber läuft
über alle Seiten
Unterseiten
die es da so gibt
ähm
ja
äh
da ist aber nicht so viel
also wenn
wenn's darum geht
da Informationen
aus einer Seite zu holen
das muss man dann alles
mehr oder weniger
selber schreiben
und dann
äh
das kann man dann
per Beautiful-Zug tun
oder LXML irgendwie
also das ist auch sowas
bei Request-HTML
das ÖÖ
der der
Standardweg
wie man da Elemente
selektiert oder so
ist über äh
CSS-Selektoren
das ist auch sehr angenehm
weil das macht man ja
im Browser normalerweise auch so
mhm
auch im JavaScript-Bereich
mhm
ja
äh
und ähm
Scrapey
äh
gibt eine ganze Menge
Infrastruktur
äh
wenn man jetzt so einen
Scraper bauen möchte
äh
aber
vom Inhalt her
hilft einem das gar nicht so viel
wenn man jetzt eine konkrete Seite hat
oder irgendwie Sachen rausziehen möchte
dann
hilft einem Scrapey da nicht
ja
wenn man jetzt rausgefunden hat
wie man das tut
und möchte das jetzt skalieren
auf äh
keine Ahnung
100.000 Seiten
und möchte das mit 5 Prozessen
auf irgendeinem Server irgendwie
dann ist Scrapey auch wieder
eine sinnvolle Geschichte
ja
äh
und es gibt halt
äh
irgendwie eine Firma
die ganz eine Menge Services
um diesen Kram herum baut
ähm
ja
hab ich jetzt auch wieder vergessen
aber
sagen wir mal so
also es gibt
wir haben
ich hab schon für diverse
Firmen Sachen gemacht
oder auch schon für Firmen gearbeitet
die halt auch damit
immer wieder Probleme hatten
äh
Scraping ist halt so ein Ding
was immer wieder auftaucht
was man immer mal
immer mal wieder machen muss
und ähm
Requests.html
ist tatsächlich so die
angenehmste
äh
Lösung
für dieses Problem
das mir
die mir bisher über den Weg gelaufen ist
deswegen wollte ich das mal
erwähnen
dass es das gibt
und dass es halt nett ist
und genau
wenn man halt
das Problem hat
das Template zu extrahieren
aus äh
aus solchen Seiten
und da Sachen rauszuparsen
dann ist es halt
sollte man sich die Pars
und Zeugfunktionen
und Requests.html
einmal angucken
weil das ist echt sehr nett
ja
okay
äh
genau das war's
das war's im Grunde schon
ja dann würde ich sagen
kam ja Request hatte mit Pars
ja
kurz
ähm
nächstes Thema war
der Hass mit dem Resvy
äh
was ist da passiert
ist was kaputt gegangen
ja ja
Chaos vor Weihnachten
ich meine
äh
ja
genau
das ist irgendwie schade
ich hätte
oh
das Grundproblem war irgendwie
das ähm
das hab ich auch schon seit
seit über einem Jahr
äh
hab ich das Problem
dass ab und zu
das Factoring
auf meinem
DSL-Anschluss ausfällt
aha
das liegt dann im DSL-Anbieter
äh
ich weiß ehrlich gesagt
nicht so genau woran das liegt
aber
ähm
äh
ja ich seh halt
dass es passiert
ich hab so eine
Fritzbox
da kann man dann sehen
ähm
quasi da
da steht dann irgendwie
äh
G-Vector ist irgendwie aus
oder so
ne
da kann man irgendwie nachgucken
was das bedeutet
und dann so
ja das Factoring
ist irgendwie aus
was für so unwissenden Hörer
was ist Factoring
ach Gott
Factoring
das ist so ein
so ein Kuppel
äh
also wir haben ja
in Deutschland diese
äh
unvergleichliche
klingelnde Drahtkupfer
äh
irgendwie
Telefoninfrastruktur
äh
vielleicht nicht mehr so
ganz zeitgemäß ist
aber äh
liebevoll
äh
auch ins 21. Jahrhundert
äh
irgendwie gerettet wurde
weil äh
ja
äh
das ist natürlich
für die Telekom
irgendwie angenehmer ist
äh
Gewinn zu machen
mit äh
Dingen die der Bund mal investiert hat
mit Geld das der Bund mal investiert hat
und dann mit der Entlastung
weiter Geld zu verdienen
und wenn
wenn man selber was
ja nicht so
naja
auf jeden Fall
ähm
das Problem ist
ähm
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
äh
also alles Kabel
was man da in die Erde
verlegt hat
ist quasi voll
ja also da
da geht einfach nicht mehr drüber
da ist man halt einfach
an den physikalischen Grenzen
was man da machen kann
und ähm
naja da
das einzige
was dann halt noch blieb
ist sozusagen
sich
äh
Frequenzen irgendwie
mit anderen zu teilen
so ein bisschen
so lange die nicht benutzt werden
benutzt man die halt dann mit
was dann aber dazu führt
dass man
auf der
äh
auf der Seite
wo man
wo man einen Anschluss hat
das muss halt
alles aus einer Hand kommen
ja wenn jetzt
äh
sozusagen
äh
man zwei unterschiedliche Provider hat
ja an einem
also man hat immer
das Telefonkabel geht so
von der
dieser TAE-Dose
die man an der Wand hat
geht halt zu irgendeinem
Gerät
von dem Provider
äh
sozusagen
in einem
in so einem
zum HVT
oder zum
zum Hausanschluss
und dann zum HVT
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
dann ist das gut
dann ist das wahrscheinlich
irgendwie so schnelleres DSL
als wenn man das nicht brummt
da ist irgendwie so eine Art
Switch oder weißer Teufel
irgendwie
irgendwo sowas drin
wo halt
das Telefon-Dings
da ankommt
und ähm
wenn man jetzt
Vectoring macht
dann bedeutet das halt
sozusagen
wenn
auf der anderen Leitung
sozusagen niemand
niemand gerade
irgendwie Daten überträgt
dann
gehe ich in einen Modus
den ich eigentlich
normalerweise nicht
nicht nehmen darf
weil das
weil ich ansonsten
quasi dem
in die Daten reinfunke
sozusagen
also
wenn beide das machen würden
würde das schief gehen
das heißt
man muss sich irgendwie absprechen
ist halt sagen
ok
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
ähm
Providern haben kann
sondern
da das ja koordiniert werden muss
also ich gleich
sozusagen das nur machen kann
wenn ich alle
äh
alle Leitungen unter einer Kontrolle habe
bedeutet das
ich
muss halt
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 O2
aber
äh
sozusagen mein Anschluss
läuft über die
Telekom Hardware
weil
sich das ja mit allen anderen Anschlüssen
irgendwie koordinieren muss
jetzt
so
ja
alles ein bisschen furchtbar
ich meine
es schlägt mich auch nicht weiter
es funktioniert halt irgendwie
es ist auch tatsächlich schneller
also insofern ist alles gut
aber
äh
bei mir war es halt so
das fällt halt so
fiel halt so alle paar Wochen aus
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
äh
oder 14 MBit Down
und 768 MBit Up
oder so
auf 2002
oder so
ja was
was für mich jetzt echt blöd ist
weil äh
ich
das brauche ja
ich brauche ja
ich brauche ja die Bits
ich brauche ja die Wandbreite
Precious
Wandbreite
brauche ich doch eigentlich
äh
ich mache da ja auch Backups drüber
und so
ja
Lita
ja
ne ne
das ist alles
seriöse
Datenverarbeitung
ähm
und ähm
ja
das ist für mich total nervig
und dann rufe ich dann halt immer an
und dann
wenn die sagen
ok sie haben ein Ticket aufgemacht
bei der Telekom
dann geht da irgendwie
so ein Diagnoserequest raus
äh
der halt
meinen Port irgendwie da resetet
und dann geht es wieder
kannst du nicht automatisieren
diesen Port
genau
das habe ich mir auch schon überlegt
ob man das nicht irgendwie automatisieren kann
oder so
das ist
manchmal ist es voll gut
dann rufe ich da an
und 5 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
und ähm
ja
äh
aber das ist halt
durch so viele Iterationen
gelaufen mittlerweile
dass äh
ich hatte da auch schon
irgendwie 2 Stunden lang
Gespräch mit irgendwie
einem Techniker
die konnten das dann auch ausmessen
irgendwie meine
meine lokalen Leitungen
wie das denn mit denen aussieht
haben rausgefunden
irgendwo
dass ich eine Reflexion
in irgendeinem Kabel
bei mir habe
dann habe ich das Kabel ausgetauscht
SattTV
ich sag es dir
irgendjemand
der rennt da über dir
der guckt SattTV gerne
und die strahlen in dein Vectoring
oder so
ich weiß es nicht
auf jeden Fall
das fand ich schon beeindruckend
da hat sich jemand
auch wirklich Zeit genommen
das hat
das hat leider das Problem
nicht gelöst
das Vectoring ist noch später
wieder ausgefallen
und inzwischen ist es so weit
dass es war auch
ein Telekom Techniker da
und das war auch alle sehr nett
und der war dann auch im Keller
hat sich das alles mal angeguckt
und dann
bei uns in der Wohnung auch
und so
und ähm
ja
der hat dann
meinte dann so
ja ich weiß nicht
es geht irgendwie
nicht so richtig gut
oder manchmal passiert halt
geht es halt schief
weißt du wie die bei
kurzer Exkurs
wie die bei mir
den Upload gefixt haben
die haben in der Tiefverrage
an dem Kabel
einen Limiter entdeckt
den sie wieder ausbauen mussten
oh Gott
nein toll
also wir konnten ja
stundenlang Geschichte erzählen
über Kabel und Netze
und ja
ja
das wäre vielleicht auch mal
genau
ja warum eigentlich nicht
und ähm
naja
jedenfalls hieß es dann
so okay
wir haben
wir haben sie einfach mal
so auf ein anderes
Kabelpaar umgeswitcht
mal gucken
wenn es
wenn es dann geht
dann ist ja
dann ist es auch gut
so
aber im Verlauf
dieser ganzen Prozedur
musste ich halt
alle meine Geräte
irgendwie ausstecken
und alles neu starten
und irgendwie
diverse Dinge
ja und ähm
wir sind jetzt übrigens
vom Raspberry Pi
auf Vectoring gekommen
ach so Mist
ja richtig
wir waren ja eigentlich
bei dem Raspberry Pi
ja aber das ist
das Problem dabei ist halt
dass sich bei dieser Aktion
halt der Raspberry Pi
gemutet hat
und
ja ich hinterher
festgestellt habe
nachdem das Ding
wieder hochgefahren ist
dass ich mich nicht
mehr drauf einloggen konnte
ja da war dann
ja
mein Passwort vergisst
dann ist natürlich
ja 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 ihn mal mit
dann können wir hier anschließen
naja
das können wir mal probieren
und jetzt weiß ich nicht so richtig
wie ich das Ding
wieder ans Laufen kriege
und ja
ich habe da noch
diverse
ein
mein Freifunkruder
hat es auch erwischt
das ist auch irgendwie
seit dieser Aktion
läuft der irgendwie
nicht mehr richtig
überhaupt
also in diesem Schrank
in dem man ganze Elektronik
Bastelkram
sich befindet
das ist irgendwie
das ist da oben drin
das Weihnachtschaos
das ist ausgebrochen
oh
ein Jahr
ja
also 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 ja schon noch
die also
ich kann schon Lichter
einstellen
Wasser, Licht
Suche
funktioniert noch
ja
okay
ja aber ich muss dafü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
man weiß ja immer nicht genau
also wo das dann
immer gesteuert wird
wenn das dann so
ein Gerät zentral
ja
der Raumautomatisierung
mit Raspberry Pi
ist ausgefallen
weil tatsächlich
dein Vectoring
nicht funktionierte
und deswegen
die Geräte neu gestartet
wurden
und du nicht mehr
PSS-Hacken
denken kannst
weil du kein Monitoring
mehr hast
und so
nicht mehr auf
das System zugreifst
ja
okay
ja
schlimm ne
ja
katastrophal
ja
also ein kleines
Externs-Display
ja
mal mitbringen
oder so
ja
also ich kriege
dieses Problem
wahrscheinlich schon
irgendwie in den Griff
ich muss halt bloß
also halt irgendwie so
wie viel Zeit
der Joffen
für seine
Home-Automatisierung
hat
wenn er seit einem Jahr
sich nicht mehr
darum gekümmert hat
dass der Wespi bootet
ja
der funktioniert
ja
und dann ist auch
nochmal der Verstärker
ist irgendwie
das ist auch so
in der Ecke
der ist super laut
der ist
der lüftet immer so rum
und zwar nicht ein bisschen
sondern der ist so richtig
fies laut
da muss ich auch
mir noch irgendwas
einfallen lassen
vielleicht kann ich das
ja auch
mit dieser ganzen
Home-Automatisierungsgeschichte
so ein bisschen
mehr
äh
besser
ich weiß noch nicht genau
wie man das
also da gibt es halt
dann halt
einige Optionen
die man irgendwie
nehmen könnte
ich könnte zum Beispiel
ähm
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
ja
also ich
theoretisch
jetzt auch könnte
aber einmal
brummt der Verstärker so
dass ich ihn nicht mehr benutze
und dann müsste ich halt
Kabel durch die ganze Wohnung ziehen
was ich eigentlich auch nicht will
ja
und ich glaube
das kann man mit Raspberry Pis
auch hinkriegen
oder man nimmt halt irgendwie
eine kommerzielle Lösung
man könnte auch
diese Apple HomePods
oder so verwenden
aber
mhm
das ist schon ein bisschen teuer
dass man das irgendwie
in jeden Fall
umstellen könnte
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 erinnere
das ist für die
Temperatursensoren
ja
ja ja
mhm
aber so für Audio
würde ich halt wahrscheinlich
ganz normales WLAN nehmen
nur
ja
müsste man auch mal
also
könnte man wahrscheinlich auch
irgendwie so ein Python Projekt
draus machen
also ich meine
jetzt gibt es Boxen
die das können
WLAN vernünftig
ähm
ne
nicht so richtig
also außer
außer diese Fertiggeschichten
von von Apple
oder äh
äh
Sonos
es gibt halt noch so eine
Spezialprojektörlösung von Sonos
äh
waren die nicht mal pleite?
Sonos?
nö
ich glaube den gibt es ganz gut
dann habe ich mich verguckt
aber ähm
ja
also man hat da auch so einen blöden
Login-Effekt bei Sonos
und ähm
ein ein Log
Login?
ach
also du bist wieder auf das System gebunden
ja genau
nö die gibt
die gibt es noch
mhm
oh
na
Mann
das ist der 10.9.
ok
na ja
gut
ein bisschen eingebrochen
ja
aber im Grunde
könnte man da auch mal
so ein bisschen was
weil man kann ja
von dem Raspberry Pi
auch irgendwie
den könnte man sozusagen
als Endpunkt
für WLAN
irgendwie verwenden
und dann halt
das Audio
über einen ganz normalen Verstärker
und dann eine Box
oder halt eine Aktivbox
irgendwie
ne
ja
wiedergeben
ja
das wäre halt noch so eine Idee
ich muss da
ich muss da mal irgendwas machen
ich muss auf 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 dann kriegen wir das alles
schon wieder zu laufen
ja
heute haben wir gar nicht so viel
über Python geredet tatsächlich
so ein kleines bisschen Exkurs mäßig
was machen wir zum Pandas machen
sehr viel über Web
sehr viel Chaos
ich hoffe ihr seht uns das heute nach
obwohl wir der Python Podcast sind
ja
wenn ihr keine Lust habt
dann hört einfach nicht zu
ja ich glaube das ist ja zu spät
wir sind ja schon am Ende der Sendung
zu spät
also dem
ja
ich hoffe es ist doch was ihr
davon gehalten habt
ob ihr mehr von solchen Folgen
auch haben möchtet
also ob ihr viel mehr
über Python milchen möchtet
wie immer an
hello.pythonpodcast.de
ich hoffe ihr hattet Spaß
auch mit Pandas
mit Request.html
mit dem
kleinen Einflug über den Recipe
und mit ganz viel Browser
und Rust
und ja
Safari Byte Range Radar
und
was man alles so machen kann
wie mein Mainface Cloud
auch von der Cebit
ja
GrafQL mit Django
haben wir noch
glaube ich erwähnt heute
ja
wir würden uns freuen
wenn ihr das nächste Mal
auf jeden Fall wieder zuhört
genau
und dann denke ich
melden wir uns wieder
im nächsten Jahr
und
mit der nächsten Folge
in die Weihnachtspause
wobei jetzt ja eigentlich
zum Hören gar nicht Pause ist
sondern nur
ja vielleicht sollte es ja auch
erst zwischen den Jahren
oder
schon
dafür ist die Folge
eigentlich auch gedacht
na genau
was zu hören hat auch
ja
uns hat es wieder Spaß gemacht
euch auch
und dann
bis zum nächsten Mal
kommt gut rein
kommt gut raus
kommt gut wo auch immer hin
ihr wollt
tschüss