WEBVTT

00:00:00.017 --> 00:00:04.577
Ey, Schepp, was ist ein 0,1 plus 0,2? Dann 0,3 natürlich.

00:00:05.457 --> 00:00:08.497
Ist es das? Weil wenn ich halt nämlich hier in meine JavaScript-Konsole eintippe,

00:00:08.577 --> 00:00:09.337
dann kommt das nicht raus.

00:00:10.637 --> 00:00:15.737
Wir können da auch in unserem Community-Slack eine Fokus-Management-Hilfegruppe aufmachen.

00:00:16.097 --> 00:00:19.357
Ich wollte es gerade sagen, Selbsthilfegruppe. Ja.

00:00:20.217 --> 00:00:21.477
Oder uns gute Tipps geben.

00:00:22.617 --> 00:00:25.177
Du bist der erste vernünftige Mensch, den ich jetzt irgendwie seit Monaten treffe,

00:00:25.257 --> 00:00:28.197
der sagt, ey, guck mal, wir haben jetzt hier Computer, die haben dieses ganzen

00:00:28.197 --> 00:00:31.597
extra CPU-Kerne und die werden nicht mehr schneller, die werden nur mehr.

00:00:31.837 --> 00:00:33.297
Also lass doch mal irgendwie Arbeit dahin verlagern.

00:00:33.917 --> 00:00:36.497
Seitdem stimmen alle zu, wenn ich denen das sage. Machen tut trotzdem keiner,

00:00:36.537 --> 00:00:37.317
du bist der erste Vernünftige.

00:00:40.577 --> 00:00:43.797
Diese Revision von Working Draft wird euch präsentiert von Midwald.

00:00:44.017 --> 00:00:45.917
Next Level Hosting für eure Projekte.

00:00:46.497 --> 00:00:49.657
Jetzt fragt ihr euch bestimmt, wie kann sowas langweiliges wie Hosting Next

00:00:49.657 --> 00:00:51.457
Level sein? Ganz einfach.

00:00:51.897 --> 00:00:55.697
Midwalds hochperformantes Managed Hosting ist perfekt abgestimmt auf die Anforderungen

00:00:55.697 --> 00:00:59.277
von Freelancern und Agenturen. Es gibt zum Beispiel ein smartes Rollensystem

00:00:59.277 --> 00:01:01.537
für die Zusammenarbeit mit euren Projektpartnern.

00:01:01.637 --> 00:01:05.417
Und Mitwald hat mit dem M-Studio auch eine sehr schöne moderne Verwaltungsoberfläche

00:01:05.417 --> 00:01:07.397
gebaut, mit der das Arbeiten Spaß macht.

00:01:07.677 --> 00:01:11.997
Aber jetzt mal ehrlich unter uns Nerds. Sachen anklicken? In einem User-Interface?

00:01:12.157 --> 00:01:14.417
Muss das sein? Nein, muss es nicht.

00:01:14.817 --> 00:01:19.057
Denn bei Mitwald gibt's auch die M-Studio CLI. Mit der könnt ihr euer Hosting

00:01:19.057 --> 00:01:22.737
komplett über die Kommandozeile verwalten und natürlich auch entsprechend automatisieren.

00:01:22.917 --> 00:01:26.517
Von Nerds für Nerds bringt euch Mitwald die optimale Developer-Experience,

00:01:26.517 --> 00:01:27.817
wenn's ums Hosting geht.

00:01:28.257 --> 00:01:32.837
Und deshalb jetzt auf zu mitwald.de slash workingdraft.

00:01:32.857 --> 00:01:38.337
Das war nochmal mittwald.de slash workingdraft.

00:01:38.477 --> 00:01:42.097
Wir danken Mitwald für die Unterstützung von dieser Revision von Working Draft.

00:01:50.946 --> 00:01:54.386
Wir sind heute zu zweit. Da hätten wir zum einen den Peter. Hallo.

00:01:54.686 --> 00:01:58.686
Moin, moin. Ich bin der Shep und wir haben gedacht, wir setzen uns mal wieder

00:01:58.686 --> 00:02:00.426
nach längerer Zeit zusammen und,

00:02:02.006 --> 00:02:06.666
lassen Revue passieren, was die Browser so in den letzten Wochen und Monaten,

00:02:07.506 --> 00:02:12.866
teilweise nur in ihren Previews eingebaut haben, aber manchmal auch eben stable rausgekommen ist,

00:02:13.786 --> 00:02:16.406
so wie wir es eben schon ein paar Mal gemacht haben. Ja.

00:02:17.422 --> 00:02:23.302
Ja, und ausnahmsweise mal nicht ausschließlich als Exegese der Safari-Release-Notes.

00:02:23.382 --> 00:02:25.942
Wir haben auch ein bisschen beim Firefox geguckt, was der so die letzten zwei,

00:02:26.022 --> 00:02:29.562
drei Versionen getan hat. Genau, bei Chrome haben wir auch geschaut.

00:02:30.982 --> 00:02:34.202
Aber irgendwie, finde ich, hält sich so.

00:02:34.442 --> 00:02:37.742
Die machen auch schon vieles, aber irgendwie geht das so ein bisschen unter,

00:02:37.822 --> 00:02:40.222
habe ich das Gefühl, in letzter Zeit, oder? Ja, ich glaube eher das Gegenteil

00:02:40.222 --> 00:02:41.742
ist der Fall. Das geht halt so ein bisschen über.

00:02:41.942 --> 00:02:45.502
Also du schwimmst halt permanent in dieser Chrome-Propaganda und deswegen ist

00:02:45.502 --> 00:02:48.522
das halt irgendwie nicht wirklich newsworthy, ist so mein Eindruck.

00:02:49.202 --> 00:02:53.322
Und es ist halt irgendwie so eine Art irgendwie so zweite Realitätsebene.

00:02:53.662 --> 00:02:56.302
Also weil, wenn du in einer Welt bist, wo du halt nur Chrome supporten musst,

00:02:56.382 --> 00:02:59.562
weil du irgendwie interne Anwendung brauchst oder sowas, dann hast du das ja

00:02:59.562 --> 00:03:02.522
eh alles und weil das halt nicht wenige sind, reden die eh ständig drüber.

00:03:02.522 --> 00:03:05.442
Und das ist halt einfach so gesetzt, aber hingegen jetzt mal so zu sehen,

00:03:05.562 --> 00:03:08.182
ah, guck mal, das geht jetzt auch in Safari und jetzt kann ich es halt überall

00:03:08.182 --> 00:03:10.022
benutzen, das ist halt mal tatsächlich eine Neuerung.

00:03:10.862 --> 00:03:15.782
Ja, es kann sein, dass es tatsächlich so ist, dass man sich erstmal nicht drüber

00:03:15.782 --> 00:03:19.442
freut und so die Augen zuhält oder die Ohren und dann so lalala macht und so

00:03:19.442 --> 00:03:23.142
lange wartet, bis dann, okay, jetzt ist noch ein zweiter Browser am Start,

00:03:23.302 --> 00:03:24.302
vielleicht kommt das jetzt.

00:03:25.102 --> 00:03:28.442
Genau, wir können ja mal starten mit was klein, also das hat der Chrome schon

00:03:28.442 --> 00:03:33.282
ziemlich lange drin und jetzt hat der letzte Browser auch aufgeschlossen und

00:03:33.282 --> 00:03:37.742
zwar der Intersection Observer wird ja mit einem Options-Objekt konfiguriert

00:03:37.742 --> 00:03:43.142
und dieses Options-Objekt kann seit einiger Zeit auch bestückt werden mit einer

00:03:43.142 --> 00:03:44.902
Scroll Margin Property.

00:03:46.142 --> 00:03:52.162
Das ist ganz praktisch, da kann man sozusagen den beobachteten Bereich in einem

00:03:52.162 --> 00:03:57.062
Scroll-Container in den verdeckten scrollbaren Bereich hin erweitern.

00:03:58.262 --> 00:04:04.382
Und ich habe das schon benutzt, um in Bildergalerie-Slidern,

00:04:04.582 --> 00:04:08.522
in denen Bilder sind, die wenn sie eben nicht im Viewport sind,

00:04:09.142 --> 00:04:11.262
nicht geladen werden, ähm.

00:04:12.642 --> 00:04:16.142
Im Prinzip ist das ein Lazy-Loading, aber das triggert halt,

00:04:16.402 --> 00:04:20.682
wenn du diese Scroll-Margin nicht hast, erst in dem Moment, wo dieses Bild eben

00:04:20.682 --> 00:04:23.062
dann in den View-Bereich geswipet wird.

00:04:23.942 --> 00:04:26.902
Und das war mir immer zu spät oder das ist halt auch...

00:04:27.982 --> 00:04:32.462
Sagen wir mal, den Usern und den Kunden auch zu spät, wenn dann die Bilder erst

00:04:32.462 --> 00:04:33.862
aufwachen und geladen werden.

00:04:34.762 --> 00:04:39.962
Und mit dem Scroll Margin kann ich dann eben bewirken, also kann ich das Ganze

00:04:39.962 --> 00:04:45.522
mit einem Intersection Observer beobachten und kann dann sozusagen meinen Beobachtungsbereich

00:04:45.522 --> 00:04:48.742
aus dem da reingreifen, in den versteckten Bereich.

00:04:49.682 --> 00:04:53.582
Und dann das Loading Attribute zum Beispiel ändern auf Iger,

00:04:53.842 --> 00:04:59.102
wenn ein Bild diesem erweiterten Bereich näher kommt.

00:05:00.002 --> 00:05:03.562
Ja, und in Abgrenzung zum Root Margin ist das Ding halt der Gestalt,

00:05:03.642 --> 00:05:05.682
dass es halt Scrolling versteht, ne? Genau.

00:05:06.202 --> 00:05:09.242
Genau, weil den Root Margin gibt es ja schon immer und der hat auch überall

00:05:09.242 --> 00:05:11.782
funktioniert und Scroll Margin wurde dann ja irgendwann nachgerüstet.

00:05:11.982 --> 00:05:16.362
Genau, also der Root Margin, der erweitert oder schrumpft ja sozusagen den beobachtenden

00:05:16.362 --> 00:05:20.742
Bereich, aber wenn eben was in der Scroll Area drin versteckt ist,

00:05:20.842 --> 00:05:22.742
dann ist es eben dennoch nicht sichtbar.

00:05:22.882 --> 00:05:25.222
Da kannst du deinen Root Margin erweitern, wie du möchtest.

00:05:25.802 --> 00:05:27.542
Das geht eben mit dem Scroll Margin.

00:05:28.182 --> 00:05:31.742
Jetzt hast du gesagt, du hast das schon eingesetzt, aber erst seit kurzem geht

00:05:31.742 --> 00:05:32.702
es halt in allen Browsern.

00:05:33.802 --> 00:05:39.562
Wie bist du damit umgegangen? Naja, das degradiert ja gracefully,

00:05:39.962 --> 00:05:41.002
wie man in Englisch sagt.

00:05:41.582 --> 00:05:45.942
Sprich, ich kann einfach diese Property in das Options-Objekt stecken und Browser,

00:05:46.062 --> 00:05:49.882
die es verstehen, können es und die anderen eben nicht.

00:05:51.302 --> 00:05:54.202
Aber dann lädt ja das Bild bedeutend schlechter. Du könntest ja theoretisch

00:05:54.202 --> 00:05:57.102
dann ja auch einen beliebig großen Haufen an JavaScript draufschmeißen,

00:05:57.182 --> 00:05:59.962
um das irgendwie live zu tracken zum Beispiel.

00:06:01.202 --> 00:06:05.002
Also hat sich dann niemand darüber beschwert, dass die Bilder zu langsam laden? Ist die Frage.

00:06:05.742 --> 00:06:08.282
Aber es liegt ja auch daran, also der Chrome war ja der erste Browser,

00:06:08.402 --> 00:06:13.022
der es unterstützt hat. Und es finden ja viele Navigationen auf Chrome statt.

00:06:13.262 --> 00:06:17.682
Und Safari kann es jetzt ja auch schon ein bisschen lenken. Ich weiß nicht, seit wann genau.

00:06:19.169 --> 00:06:22.709
Naja, und leider guckt sich ja kaum jemand was mit dem Firefox an.

00:06:23.609 --> 00:06:27.569
Ja. Guckt man gerade ab, welcher Safari-Version das unterstützt wird.

00:06:27.729 --> 00:06:30.649
Ah ja, doch. Das ist 26. Auch die aktuelle erst, okay. Mhm.

00:06:31.369 --> 00:06:36.229
Na gut, dann haben die da, ich weiß nicht, ob das vielleicht irgendwie auch

00:06:36.229 --> 00:06:38.729
Teil dieser Interop-Bemühungen ist,

00:06:39.389 --> 00:06:45.949
dass ja so dieses einmal im Jahr einigen sich alle Browser-Maker auf ein Feature-Set,

00:06:45.949 --> 00:06:49.529
an dem sie alle arbeiten werden, damit man eben, damit nicht alle irgendwie

00:06:49.529 --> 00:06:54.369
an unterschiedlichen Dingen arbeitet, sondern Dinge auch fertig werden und man die benutzen kann.

00:06:55.489 --> 00:06:59.009
Könnte sein, weiß ich jetzt, aber kann ich mich nicht erinnern bei dem Ding hier.

00:07:02.029 --> 00:07:07.189
Ja, Intersection Observer, so das Ding, was im Prinzip ziemlich nützlich wäre,

00:07:07.229 --> 00:07:08.469
aber fast nie benutzt wird.

00:07:08.869 --> 00:07:11.069
Würdest du mit dieser Einschätzung mitgehen?

00:07:11.649 --> 00:07:16.149
Ich habe schon das Gefühl, dass er viel Verwendung findet, Aber das ist jetzt

00:07:16.149 --> 00:07:19.609
nur so ein Bauchgefühl, weil das ist einfach ein mega geiles Teil.

00:07:20.629 --> 00:07:24.969
Ich habe das Gefühl, das wird halt verwendet immer dann, wenn es sozusagen das

00:07:24.969 --> 00:07:27.889
offensichtliche Werkzeug ist, das auf dieses Problem passt.

00:07:28.409 --> 00:07:31.749
Aber du könntest ja damit sehr, sehr viele Probleme lösen.

00:07:31.909 --> 00:07:35.669
Also jetzt in deinem Bildergalerie Beispiel die Performance moderieren.

00:07:35.749 --> 00:07:37.069
Das kannst du ja auf viele Weisen machen.

00:07:38.329 --> 00:07:40.909
Aber Intersection Observer ist ja eigentlich so die offensichtlichste.

00:07:41.129 --> 00:07:44.009
Es ist gerade nicht sichtbar, also machst du halt nicht.

00:07:44.789 --> 00:07:48.349
Tate sich ja schon anbieten. Also was ich, wo ich ihn auch benutzt habe,

00:07:48.489 --> 00:07:54.249
ist zum Beispiel, ich habe so Dummy-Elemente im DOM und dann gibt er dir ja

00:07:54.249 --> 00:07:59.069
zurück, wie viel Prozent von dem Element in dem Viewport sichtbar ist.

00:08:00.021 --> 00:08:03.761
Und dann kann ich damit zum Beispiel auch so einen Header triggern,

00:08:03.921 --> 00:08:10.121
der dann wegfährt, wenn eben dieses Dumb-Element auch zu Teilen nicht mehr sichtbar

00:08:10.121 --> 00:08:12.881
ist, weil das bedeutet dann, dass du hochgescrollt hast zum Beispiel.

00:08:13.681 --> 00:08:18.061
Ja. Genau, und dann, ich könnte mich natürlich auch an Scroll-Event hängen und

00:08:18.061 --> 00:08:22.401
dann quasi mir zurückgeben lassen oder auslesen, wie weit gescrollt wurde.

00:08:22.661 --> 00:08:24.861
Aber mit dem Intersection-Observer ... Aber warum würde so das tun?

00:08:24.961 --> 00:08:25.861
Das ist ja völlig beknackt.

00:08:26.061 --> 00:08:28.481
Ja, ist halt aufwendiger, genau, mit dem Intersection-Observer.

00:08:28.481 --> 00:08:33.701
Der pingt dich einfach an und sagt so, hier, jetzt ist quasi so der Threshold überschritten.

00:08:34.301 --> 00:08:39.281
Oder du benutzt natürlich Scroll-Driven Animations. Geht natürlich heutzutage dann auch.

00:08:39.781 --> 00:08:43.501
Ja, aber trotzdem, es ist halt wirklich so, dass ich so das Gefühl habe,

00:08:43.561 --> 00:08:47.581
der könnte halt vielmehr so im Dauereinsatz sein, der Intersection Observer.

00:08:48.081 --> 00:08:52.021
Weil, wie gesagt, wenn es nicht zu sehen ist, warum tust du da was?

00:08:52.141 --> 00:08:54.281
Dann könnte man sich sehr viel Performance-Optimierung einfach sparen,

00:08:54.681 --> 00:08:56.181
indem man die billigen Sachen zuerst macht.

00:08:56.241 --> 00:08:58.361
Und die billigen Sachen, die man zuerst machen könnte, wäre feststellen.

00:08:59.261 --> 00:09:02.121
Würde überhaupt jemand etwas hören, wenn dieser Baum jetzt umfallen würde.

00:09:02.801 --> 00:09:05.161
Wenn das nicht der Fall ist, dann lässt es halt bleiben. Genau,

00:09:05.201 --> 00:09:07.501
das machst du ja auch, haben wir in der Vorbesprechung auch gesagt,

00:09:07.641 --> 00:09:08.921
oder wir beide machen das.

00:09:09.181 --> 00:09:12.241
Also ich habe bei mir, wenn ich Komponenten baue, die werden immer,

00:09:13.121 --> 00:09:17.341
ich habe quasi so ein Opt-out, aber in der Regel sind die immer so gebaut,

00:09:17.561 --> 00:09:23.061
dass die nur initialisiert werden, wenn sie nah genug am Vue-Port sind.

00:09:23.921 --> 00:09:28.661
Ja gut, du müsstest halt eben überlegen, was bedeutet initialisieren in dem Sinne.

00:09:30.041 --> 00:09:32.661
Also, das Problem mit dem Begriff der Komponente an sich ist ja auch schon,

00:09:32.721 --> 00:09:34.281
dass der so weit gefasst ist.

00:09:35.274 --> 00:09:38.534
Kann ja alles Mögliche sein, ne? Bei mir ist alles eine Komponente.

00:09:38.714 --> 00:09:43.694
Also ich mache auch nicht so hier Atom und Dings und Bums und Organismus und so.

00:09:44.074 --> 00:09:50.554
Also Komponente ist einfach in sich geschlossenes Moped, das vielleicht andere Komponenten benutzt.

00:09:51.194 --> 00:09:53.174
Aha. Aber egal, welche Größe.

00:09:54.594 --> 00:10:00.854
Okay. Ja. Könnte ich mir vorstellen, mitzugehen, halt so unter dem Aspekt irgendwie

00:10:00.854 --> 00:10:03.294
so. Also für mich sind das halt immer so die Chaosgrenzen.

00:10:03.994 --> 00:10:08.894
Im Sinne von, was immer ich in den Dingern treibe, bleibt halt da drin und beeinflusst nichts anderes.

00:10:09.654 --> 00:10:12.014
Und lasse mir da drin dann halt immer relativ viel Freiheit.

00:10:12.214 --> 00:10:14.234
Und das kann halt eben auch alle möglichen Formen annehmen,

00:10:14.354 --> 00:10:19.594
die dann halt eben sowas sein können wie richtige Web Component oder wenn ich

00:10:19.594 --> 00:10:21.294
mir den Luxus erlauben darf,

00:10:21.374 --> 00:10:24.274
in so einer serverseitig generierten Welt zu sein, bin ich ja mittlerweile ein

00:10:24.274 --> 00:10:29.354
sehr großer Fan von dem so Legacy Script geworden mit so Document Current Script Parent Element.

00:10:30.374 --> 00:10:32.674
Und dann flanscht man da einfach seine Eventlisten da drauf.

00:10:32.674 --> 00:10:35.354
Das kann man dann wunderbar auch einfach mit so einem Style-Tag,

00:10:35.434 --> 00:10:38.174
mit einem AdScope einfach so alles in einer Datei liegen lassen.

00:10:38.394 --> 00:10:41.514
Und wenn man das irgendwie so in sein PHP oder was integrieren kann,

00:10:41.594 --> 00:10:43.794
dann braucht man niemandem irgendwas Neues beizubringen.

00:10:44.454 --> 00:10:47.514
Und hat dann so auch so diese Chaos-Grenzen halt eben eingezogen.

00:10:49.885 --> 00:10:53.465
Das einzig Schwierige dabei ist halt eben, wie stimmst du halt so Standardlogik dem über?

00:10:53.685 --> 00:10:57.965
Also du würdest ja nicht jedem von diesen Dingern einen einzelnen Intersection-Observer

00:10:57.965 --> 00:10:58.945
angedeihen lassen wollen.

00:11:01.285 --> 00:11:03.985
Da müsstest du es ja jedes Mal schreiben. Da wäre ja doof. Naja,

00:11:04.405 --> 00:11:06.065
ich habe dafür so einen zentralen Service.

00:11:06.665 --> 00:11:10.785
Da kann ich die dann, die Elemente dann anmelden und die werden dann ja alle

00:11:10.785 --> 00:11:14.365
mit den gleichen Options dann observed.

00:11:15.045 --> 00:11:19.345
Ja, oder halt eben auch mehrere Intersection-Observer. Also das ist halt auch

00:11:19.345 --> 00:11:22.305
so ein nettes Teil, die Intersex-Jobs skalieren sehr gut.

00:11:22.625 --> 00:11:26.885
Ob du jetzt irgendwie einen hast oder irgendwie 10.000, das macht halt praktisch keinen Unterschied.

00:11:28.085 --> 00:11:30.865
Also kann man da einen Pro-Web-Component machen oder halt so einen zentralen

00:11:30.865 --> 00:11:33.825
Service macht halt eben keinen Unterschied, aber es lohnt sich vielleicht wirklich

00:11:33.825 --> 00:11:36.265
darüber nachzudenken, ob man so einen Teil nicht irgendwie bei sich einbauen

00:11:36.265 --> 00:11:40.445
kann, weil was diese ganzen Frontend-Frameworks treiben von ihrer fancy Render-Optimierung,

00:11:40.585 --> 00:11:43.365
bloß nichts Neuem austüfteln, was nicht geändert wurde.

00:11:43.665 --> 00:11:45.685
Statt Change-Tracking könnte man auch Bildschirm-Tracking machen.

00:11:45.685 --> 00:11:48.725
Ja, aber wahrscheinlich widerspricht das so ein bisschen.

00:11:49.485 --> 00:11:55.305
Also die wollen ja, glaube ich, irgendwie alles bildschirmunabhängig regeln können, oder?

00:11:55.985 --> 00:12:00.785
So ein bisschen ist ja deren Philosophie. Also im Grunde. Die wollen das so regeln können.

00:12:00.865 --> 00:12:03.885
Ich meine, wir hatten ja vor kurzem die Aufnahme zu, ich habe keine Ahnung vom

00:12:03.885 --> 00:12:07.785
Veröffentlichungszeitpunkt, unserem Super React Throwdown Challenge.

00:12:07.905 --> 00:12:08.825
Lass mal kurz überlegen.

00:12:09.125 --> 00:12:14.165
Neues im Browsern. Vielleicht kommt das Release ja auch erst nach dieser hier. Ja, tut es tatsächlich.

00:12:14.345 --> 00:12:17.765
Also in vier Wochen kommt dann raus, wo wir über React gesprochen haben,

00:12:17.825 --> 00:12:20.045
wo ich auch diesen Punkt gemacht habe mit so.

00:12:20.505 --> 00:12:22.825
Aber die kommen halt eben aus einer philosophisch anderen Ecke,

00:12:22.885 --> 00:12:25.425
weil sie ja eben auch aus einer anderen Zeit kommen, tatsächlich.

00:12:26.545 --> 00:12:31.885
Also die sind ja all in dem Sinne. So ein React wurde ja fundamental entworfen

00:12:31.885 --> 00:12:35.965
2013 oder zumindest da ist es veröffentlicht worden, entworfen wahrscheinlich viel früher.

00:12:37.120 --> 00:12:39.120
Da gab es halt keinen Intersection-Obsolver. Da kann man nie in der schlechten

00:12:39.120 --> 00:12:42.080
Strick draus drehen, dass sich der nicht so richtig gut in deren Welt integrieren

00:12:42.080 --> 00:12:45.020
lässt. Ist aber trotzdem doof, dass man das nicht nutzt.

00:12:46.240 --> 00:12:49.460
Naja, klar. Also als ich früher Computerspiele gemoddet habe,

00:12:49.560 --> 00:12:52.180
war so die goldene Regel. Was du nicht siehst, änderst du nicht.

00:12:52.620 --> 00:12:56.540
Naja, klar. Die machen das ja eh mit diesem Level of Detail-Ansätzen und so.

00:12:56.760 --> 00:12:59.880
Oder hier bei Unreal Engine mit hier Nanite.

00:13:00.140 --> 00:13:02.680
Das ist ja auch so letztlich so ein richtig krasses... Unreal Engine mit Nanite.

00:13:02.800 --> 00:13:07.240
Kollege, ich rede von irgendwie so Half-Life... Naja, aber die haben auch Level-of-Detail-Sachen

00:13:07.240 --> 00:13:10.160
gemacht, wenn irgendwas ganz weit weg war, also wenn es verdeckt war,

00:13:10.200 --> 00:13:10.980
wurde es nicht gerendert.

00:13:11.220 --> 00:13:14.840
Und wenn es ganz weit weg war, dann wurden halt nur drei Polygone gerendert.

00:13:15.020 --> 00:13:17.340
Und je näher das kam, desto mehr Polygone gab es dann.

00:13:17.880 --> 00:13:21.920
Ja, genau. Ich würde halt gerne so Web-Tag auf das Niveau bringen,

00:13:22.020 --> 00:13:24.140
auf so das Niveau von der Quake 2 Engine, weißt du? Ja.

00:13:24.600 --> 00:13:26.680
So, dass du zumindest irgendwie sagst, Sachen, die nicht sichtbar sind,

00:13:26.820 --> 00:13:31.180
rendere ich nicht und Level of Detail wäre ja eventuell tatsächlich auch ein interessantes Ding,

00:13:31.820 --> 00:13:35.340
wenn es halt um so Sachen geht wie es updatet sich Content und du willst ihn

00:13:35.340 --> 00:13:38.280
nicht irgendwie rendern, rendern, weil er ja außerhalb von Viewport ist,

00:13:38.340 --> 00:13:41.100
aber vielleicht willst du ihn ja findbar machen mit Control-F.

00:13:42.040 --> 00:13:44.920
Dass du dann sozusagen Level of Detail da anbringst, ja.

00:13:45.400 --> 00:13:49.640
Ja, ich meine, es gibt ja auch so Konzepte wie, also dass so Spiele,

00:13:49.860 --> 00:13:53.160
die haben ja auch Variable Resolution,

00:13:53.580 --> 00:13:58.300
also dass die quasi, oder dass bestimmte Sachen mit 60 Frames pro Sekunde animiert

00:13:58.300 --> 00:14:01.860
werden, also geupdatet werden sozusagen und dann andere Dinge wie vielleicht

00:14:01.860 --> 00:14:05.540
Spiegelung im Wasser oder Wolken, die im Hintergrund langziehen,

00:14:05.840 --> 00:14:08.840
die werden halt nur mit der halben Rate aktualisiert, also solche Ansätze kannst

00:14:08.840 --> 00:14:10.280
du ja theoretisch auch im Web fahren.

00:14:10.920 --> 00:14:15.580
Wie? Naja, indem du sagst, diese Teile bei einer UI stehen wahrscheinlich oder

00:14:15.580 --> 00:14:22.900
sind im Fokus der Benutzer und andere sind eher Beiwerk und die müssen auch

00:14:22.900 --> 00:14:25.220
aktualisiert werden, aber vielleicht nur mit halber.

00:14:26.588 --> 00:14:31.888
Geschwindigkeit zum Beispiel. Was meinst Geschwindigkeit in dem Fall? Update-Frequenz.

00:14:32.848 --> 00:14:37.268
Das chatte ich nicht ganz, weil du hast ja eine fixe Frame-Rate und es gibt

00:14:37.268 --> 00:14:40.228
irgendwie ein Update von irgendeiner Art von UI-Zustand.

00:14:40.368 --> 00:14:43.688
Aus der Framework-Perspektive kommt, kannst du jetzt ja nicht per se feststellen,

00:14:43.848 --> 00:14:46.548
ob du jetzt Fokus bist oder nicht.

00:14:47.048 --> 00:14:50.008
Nee, nee, das müsstest du dann natürlich konzeptionell schon vorher wissen.

00:14:50.348 --> 00:14:54.948
Also, dass du irgendwie, wenn du, keine Ahnung, einen Daten-Grid in der Mitte

00:14:54.948 --> 00:14:58.648
hast, dann ist das wahrscheinlich, steht das stärker im Fokus als,

00:14:59.728 --> 00:15:05.308
weiß ich nicht, was könnte an den Marginalspalten links und rechts irgendwie noch sein?

00:15:05.888 --> 00:15:10.748
Also, oder dass man eben auch im Grid vielleicht bestimmte Dinge hat,

00:15:11.008 --> 00:15:15.528
die häufiger aktualisiert werden als bestimmte Unterelemente.

00:15:17.368 --> 00:15:19.288
Kann mir das mal noch nicht so recht vorstellen. Wir müssen,

00:15:19.428 --> 00:15:23.348
das tüfteln wir bei Zeiten irgendwie aus, wenn das Mikro mal aus ist.

00:15:23.448 --> 00:15:29.328
Aber so generell den Ansatz könnte man ja prinzipiell mal fahren und das sollte

00:15:29.328 --> 00:15:32.648
man vielleicht mal gucken, ob man da nicht in der Vergangenheit was Spannendes zu findet.

00:15:34.852 --> 00:15:36.872
Machen wir auf dem Intersection of Server den Deckel drauf? Ja,

00:15:37.192 --> 00:15:39.812
machen wir. Okay, cool. Der kann also jetzt scrollen Margin.

00:15:41.572 --> 00:15:47.392
Ey, Schepp, was ist ein 0,1 plus 0,2? Na, 0,3 natürlich.

00:15:48.232 --> 00:15:51.292
Ist es das? Weil wenn ich halt nämlich hier in meine JavaScript-Konsole eintippe,

00:15:51.372 --> 00:15:52.152
dann kommt das nicht raus.

00:15:53.312 --> 00:15:58.192
Ja, ja, das ist ja dieses, einer der bekannten JavaScript-Fuck-Ups, ne?

00:15:59.472 --> 00:16:03.632
Oder Auditees. Ich glaube nicht, dass das was mit JavaScript zu tun hat oder

00:16:03.632 --> 00:16:04.592
ein Fuck-Up ist, tatsächlich.

00:16:05.652 --> 00:16:10.232
Also, was da rauskommt, ist nicht 0,3, sondern eine Zahl, die minimal größer ist als 0,3.

00:16:11.192 --> 00:16:14.232
So, und der Grund, warum das so ist, liegt halt einfach daran,

00:16:14.432 --> 00:16:17.672
dass das Zahlenformat, das JavaScript und ja viele andere Programmiersprachen

00:16:17.672 --> 00:16:21.372
auch verwenden, das repräsentiert ja keine Zahlen im Sinne von so Zahlen,

00:16:21.492 --> 00:16:24.252
wie wir die jetzt erleben, sondern das sind ja immer so quasi,

00:16:24.352 --> 00:16:25.512
es sind ja praktisch immer Intervalle.

00:16:25.872 --> 00:16:28.292
Also die Art und Weise, wie es funktioniert wird, wir haben ein Bit von Vorzeiten,

00:16:28.352 --> 00:16:31.512
dann haben wir irgendwas hoch, irgendwas anderes vereinfacht gesprochen und

00:16:31.512 --> 00:16:36.832
dank ein bisschen Bastelei und Kreativität kriegt man es damit hin, mit relativ wenig Bits,

00:16:37.452 --> 00:16:40.652
Zahlenbereiche zu repräsentieren mit dem Trade-Off, dass es halt bei sehr kleinen

00:16:40.652 --> 00:16:42.912
und sehr großen Zahlen Präzisionsverluste gibt.

00:16:43.532 --> 00:16:46.492
Deswegen gibt es halt so einen maximalen sicheren Integer. Wenn man da 1 drauf

00:16:46.492 --> 00:16:49.952
addiert, dann kommt halt die gleiche Zahl wieder raus, weil halt eben dieser,

00:16:50.652 --> 00:16:53.372
Intervall, der noch repräsentiert werden kann, größer ist als 1.

00:16:54.472 --> 00:16:58.652
Und da bedeutet halt eben, sowas wie 0,1 und 0,2 wird nicht exakt repräsentiert

00:16:58.652 --> 00:17:02.552
und wenn ich dann hingehe und ich addiere das, kommt halt korrekterweise einen

00:17:02.552 --> 00:17:06.212
Wert raus, der halt nicht exakt 0,3 ist.

00:17:06.452 --> 00:17:11.672
Da wird dann wahrscheinlich auf das nächste Intervall quasi gerundet, kann man sagen.

00:17:12.592 --> 00:17:17.432
Intern oder gegangen. Also weil es ist auf jeden Fall immer falsch und sozusagen

00:17:17.432 --> 00:17:19.252
das Intervallsystem am nächsten kommt.

00:17:20.052 --> 00:17:21.972
Ich weiß nicht, ob man das als falsch bezeichnen kann.

00:17:22.960 --> 00:17:27.260
Wie gesagt, der Punkt ist tatsächlich der, dass das, was die Floating-Point-Zahlen

00:17:27.260 --> 00:17:33.640
da repräsentieren, das hat halt nur eine sehr mittelbare Beziehung zu dem,

00:17:33.720 --> 00:17:35.240
was wir als Zahlen verstehen.

00:17:35.660 --> 00:17:38.460
Also jede Zahl, die du da hast, ist immer ein Intervall.

00:17:39.260 --> 00:17:41.880
Und der Intervall ist gegebenenfalls so klein, dass dir das egal ist.

00:17:42.080 --> 00:17:46.760
Aber halt eben bei 0,1 plus 0,2 summiert es sich halt in der Gestalt auf,

00:17:46.840 --> 00:17:51.280
dass du halt am Ende feststellst, okay, das ist jetzt wirklich ein nicht insignifikanter Intervall.

00:17:51.360 --> 00:17:56.180
Dann wird das halt eben tatsächlich beobachtbar. Ich meine, in den Floating-Point-Dingern,

00:17:56.320 --> 00:18:00.400
da sind ja so Aspekte drin, die ja man meistens ignoriert.

00:18:00.540 --> 00:18:04.960
Also ich meine zum Beispiel, das Vorhandensein von dem Vorzeichen-Bit bedeutet

00:18:04.960 --> 00:18:06.540
ja, dass es Minus Null gibt.

00:18:08.320 --> 00:18:11.440
Und das ist ja tatsächlich streng genommen, wenn man jetzt wirklich die Bits

00:18:11.440 --> 00:18:13.340
vergleicht, was anderes als Null.

00:18:13.800 --> 00:18:16.220
Trotzdem, wenn du in JavaScript Minus Null gleich gleich gleich Null machst,

00:18:16.300 --> 00:18:19.940
sagt er dir trotzdem True, weil man musste halt eben so ein bisschen...

00:18:19.940 --> 00:18:22.700
Da haben sie dran gedacht, ja. Ja, also ich weiß jetzt nicht,

00:18:22.760 --> 00:18:25.000
ob das richtig ist, aber es ist auf jeden Fall irgendwie auch nicht falsch,

00:18:25.100 --> 00:18:25.760
würde ich mal behaupten.

00:18:26.500 --> 00:18:31.640
So, okay, also 0,1 plus 0,2, haben wir festgestellt, ist, sagen wir mal,

00:18:31.760 --> 00:18:38.140
ein Wert, der relativ nah an 0,3 dran ist, aber nicht 0,3 jetzt irgendwie selber ist.

00:18:39.420 --> 00:18:42.960
Okay, cool. Und normalerweise ist es halt eben kein Problem.

00:18:43.080 --> 00:18:45.940
Wir haben halt eben diese Intervalle und das ist halt, ja,

00:18:47.203 --> 00:18:50.823
Das ist uns allen irgendwie so ein bisschen gewahr. Was man aber jetzt tatsächlich

00:18:50.823 --> 00:18:55.523
machen kann bei Additionen ist tatsächlich, die auf eine Weise ausführen,

00:18:55.683 --> 00:19:01.323
dass man sozusagen nicht einen sich immer größer aufbauenden Fehler hat.

00:19:01.563 --> 00:19:04.703
Wenn ich zum Beispiel sowas mache wie 0,1 plus 0,2 plus 0,3,

00:19:05.323 --> 00:19:09.523
nehme ich ja sozusagen auf die Addition von 0,3 den Fehler mit,

00:19:09.663 --> 00:19:11.843
der sich ergeben hat durch 0,1 plus 0,2.

00:19:11.983 --> 00:19:14.883
Jetzt habe ich es auch Fehler genannt, aber es fühlt sich halt eben an wie ein

00:19:14.883 --> 00:19:17.823
Fehler. Ja, ich kenne das immer so, dass man dann irgendwie sowas macht,

00:19:17.903 --> 00:19:21.003
dass man es erstmal sozusagen mit beides mit 10 multipliziert,

00:19:21.163 --> 00:19:24.223
addiert und dann wieder durch 10 teilt. Dann müsste es doch passen, oder? Ja.

00:19:27.383 --> 00:19:32.163
Dann würde das in dem konkreten Fall tatsächlich passen, aber du hast natürlich

00:19:32.163 --> 00:19:35.603
andere Probleme, wenn du zum Beispiel jetzt, in dem Beispiel operieren wir jetzt

00:19:35.603 --> 00:19:39.783
mit sehr kleinen Zahlen, aber du würdest ja in das gleiche Präzisionsverlustproblem

00:19:39.783 --> 00:19:41.463
bei sehr großen Zahlen reinlaufen.

00:19:41.463 --> 00:19:45.543
Wenn du jetzt irgendwie sagst, irgendwie maximalen Integer plus 7 minus 10,

00:19:45.763 --> 00:19:49.623
würdest du ja erwarten, bei einem bestimmten Wert anzukommen und du würdest

00:19:49.623 --> 00:19:50.503
halt da eben nicht ankommen,

00:19:50.583 --> 00:19:54.103
weil du dich halt eben mit dem initialen plus 7 in den Bereich des nicht mehr

00:19:54.103 --> 00:19:58.323
exakt repräsentierbaren begeben hast und von dem nicht exakt repräsentierbaren

00:19:58.323 --> 00:20:00.943
dann wieder 10 abzuziehen, da landest du halt Gott weiß wo.

00:20:00.943 --> 00:20:04.923
Ja, das ist natürlich ein großes Problem bei so, weiß ich nicht,

00:20:05.823 --> 00:20:10.803
Banken und Co. Finanzsektor.

00:20:11.763 --> 00:20:17.863
Ach, weiß ich nicht. Dass du keine verlässlichen Rechenergebnisse hast.

00:20:19.083 --> 00:20:20.423
Also deswegen soll man ja auch Währungen... Ja gut, aber die machst du nicht

00:20:20.423 --> 00:20:23.623
mit JavaScript. Das machst du ja nicht mit JavaScript.

00:20:24.463 --> 00:20:27.963
Aber hä, heutzutage macht man doch alles mit JavaScript. Ja,

00:20:28.003 --> 00:20:29.603
wenn man Lack gesoffen hat, aber nicht normal.

00:20:30.943 --> 00:20:33.723
Aber theoretisch trifft das ja auf PHP und Co. auch zu, oder?

00:20:34.988 --> 00:20:37.528
Das trifft auf alles zu, was diesen Sprachstern verwendet. Das sind eigentlich

00:20:37.528 --> 00:20:39.908
alle Brauern. Es ist ja das IEEE, hast du nicht gesehen?

00:20:40.908 --> 00:20:44.248
Weiß die Zahl gerade nicht im Kopf. Aber der Punkt ist halt eben,

00:20:44.348 --> 00:20:48.788
man kann tatsächlich eine generalisierte Variante von deinem mit 10 Multiplizier-Trick machen.

00:20:49.368 --> 00:20:52.648
Das ist dann sehr viel mehr sophisticated, als man halt eben mit 10 multiplizieren,

00:20:53.388 --> 00:20:57.388
weil halt eben, man muss das halt eben alles berücksichtigen und es muss halt

00:20:57.388 --> 00:21:00.908
eben tatsächlich auf der Bits- und Bytes-Ebene operieren und es muss halt eben

00:21:00.908 --> 00:21:02.388
mit diesem komischen Zahlenstandard klarkommen.

00:21:03.028 --> 00:21:09.368
Aber das gibt es halt eben tatsächlich in JavaScript jetzt. Also es gibt Math Sum Precise.

00:21:10.348 --> 00:21:13.588
Was du machen kannst, ist, iterierbares Objekt aus Zahlen reinstecken.

00:21:14.348 --> 00:21:18.008
Und da wendet der genau die generalisierte Variante von deinem Mal-10-Trick

00:21:18.008 --> 00:21:21.628
an und macht dir halt eben dann eine präzise Summe daraus.

00:21:22.048 --> 00:21:26.408
Also nur zum Vergleich, machst du irgendwie 0,1 plus 0,2 plus 0,3.

00:21:26.668 --> 00:21:30.468
In JavaScript nimmst du halt den Fehler aus der initialen Addition von den ersten

00:21:30.468 --> 00:21:34.168
beiden Werten mit auf das 0,3 und kommst dann irgendwie raus bei 0,6.

00:21:34.568 --> 00:21:37.828
0,0,0,0,0 hast du nicht gesehen. Da hast du also diesen Fehler drin.

00:21:38.128 --> 00:21:41.448
Und Math, some precise, kriegt die halt eben aufwadiert, sodass da 0,6 rauskommt.

00:21:43.063 --> 00:21:49.083
Ja, cool. Und das ist eigentlich ja nett, das existiert meines Wissens zur Zeit aktuell nur in Firefox,

00:21:49.363 --> 00:21:54.963
aber wird wohl, also geht im Moment sehr schnell durch das EGMAScript-Komitee

00:21:54.963 --> 00:21:58.163
durch und dürfte nicht lange dauern, bis es halt in den ganzen übrigen Browsern

00:21:58.163 --> 00:22:01.183
auch landet, weil es ja am Ende tatsächlich bloß zahlenradieren ist.

00:22:02.563 --> 00:22:06.783
Wichtig ist halt nur, das eliminiert halt diesen aufsammelnden Fehler,

00:22:06.863 --> 00:22:08.863
wenn man halt irgendwie A plus B plus C macht.

00:22:09.563 --> 00:22:15.443
Weil ich meine, A plus B plus C ist halt tatsächlich, da würdest du normalerweise

00:22:15.443 --> 00:22:17.443
sagen, C plus B plus A macht das gleiche Ergebnis.

00:22:17.703 --> 00:22:21.583
Aber in Floating Point gilt das halt eben nicht, weil durch diese Verluste bei

00:22:21.583 --> 00:22:23.603
der Präzision da halt eben unterschiedliche Ergebnisse rauskommen.

00:22:23.803 --> 00:22:27.423
Und alles, was es halt eben tatsächlich macht, ist A plus B plus C in die Form

00:22:27.423 --> 00:22:28.843
überführen, die man auch erwarten würde.

00:22:28.923 --> 00:22:32.063
Sprich, egal in welcher Reihenfolge ich das mache, kriege ich dann das gleiche Ergebnis raus.

00:22:32.783 --> 00:22:36.543
Was jetzt bizarr klingt, aber ist halt eben tatsächlich relevant.

00:22:36.543 --> 00:22:41.043
Und warum heißt das nicht math.sum einfach?

00:22:41.363 --> 00:22:48.043
Also ist das schon wieder durch irgendein, weiß ich nicht, JavaScript-Framework belegt gewesen?

00:22:48.303 --> 00:22:52.883
Oder will man damit irgendwie nochmal, weil math.sum gibt es doch auch nicht, oder?

00:22:54.103 --> 00:22:55.883
Meines Erachtens gibt es das

00:22:55.883 --> 00:23:00.783
nicht. Ich habe tatsächlich mir jetzt nicht überlegt, warum das so heißt.

00:23:00.903 --> 00:23:02.863
Okay, ich dachte, du weißt das vielleicht. Ist auch nicht schlimm.

00:23:03.123 --> 00:23:04.943
Dann geht die Frage an unsere Hörenden.

00:23:05.603 --> 00:23:07.223
Vielleicht wisst ihr das. Aber wieso geht die nicht an mich?

00:23:07.303 --> 00:23:10.483
Ich bin schon auf dem GitHub. Ah ja, sehr gut. Warte mal, scroll, scroll.

00:23:11.483 --> 00:23:15.523
Naming. Math sum is the obvious name. Aber ist es nicht offensichtlich,

00:23:15.583 --> 00:23:20.303
dass das ein anderer und auch langsamerer Algorithmus als naives Aufsummieren ist? Ah ja, okay.

00:23:20.943 --> 00:23:24.123
Also einfach, um das nochmal quasi deutlich hervorzuheben, ja.

00:23:25.563 --> 00:23:28.743
Genau, weil normales Aufsummieren, also Mathsdocksum, würde ich sagen,

00:23:28.803 --> 00:23:29.943
wäre jetzt auch keine verkehrte Idee.

00:23:30.263 --> 00:23:34.303
Aber das wäre dann äquivalent zu diesem klassischen Reduce A plus B Pattern.

00:23:36.356 --> 00:23:41.416
Alles klar. Ja, cool. Gute Sache. Ja, ist halt nett.

00:23:41.556 --> 00:23:44.696
Also ich wüsste jetzt nicht, als ich das unbedingt jetzt brauchen würde.

00:23:45.476 --> 00:23:50.456
So direkt? Ja, doch. Also ich meine, ich kann mir auch so Fälle vorstellen wie,

00:23:50.456 --> 00:23:56.676
du hast einen Online-Shop und du kriegst vielleicht aus einer API dann, keine Ahnung,

00:23:57.196 --> 00:24:00.916
nur die einzelnen Produkte und willst dann die Gesamtsumme auch noch anzeigen.

00:24:00.916 --> 00:24:04.436
Und dann ist es ja auch schon, also klar, du könntest dann sagen,

00:24:04.596 --> 00:24:08.416
so hier API-Mensch, warum gibst du mir nicht da auch die Total Sum zurück?

00:24:10.296 --> 00:24:12.976
Aber, genau, aber du kannst es ja auch einfach zusammen addieren,

00:24:13.376 --> 00:24:18.316
kleinseitig und wenn es dann aber, wenn es dann so, okay, man rundet dann im

00:24:18.316 --> 00:24:21.476
Falle von, wenn man eine Währung anzeigt, ja meistens dann auch nochmal,

00:24:21.916 --> 00:24:24.536
also das würde man jetzt hier gar nicht merken, aber trotzdem also.

00:24:24.916 --> 00:24:28.136
Und vor allem würdest du ja in den Währungs-Unter-Einheiten einfach arbeiten,

00:24:28.256 --> 00:24:31.416
um den Problem aus dem Weg Also du würdest da ja, weil du ja weißt,

00:24:31.516 --> 00:24:33.556
an welchem Ende der Limitierungen du arbeitest,

00:24:34.416 --> 00:24:37.796
würdest du ja tatsächlich mit diesem mal 10 Pattern oder mal 100 Pattern in

00:24:37.796 --> 00:24:43.056
dem Fall arbeiten, weil es ja keinen Grund dafür gibt.

00:24:43.056 --> 00:24:47.256
Also im Prinzip ist ja die Formatierung von Dollars oder Euros mit Centbeträgen

00:24:47.256 --> 00:24:52.196
hintendran letztlich ja komplett irrelevant für jeden Geschäftsprozess,

00:24:52.356 --> 00:24:56.376
außerdem ich muss das am Ende irgendwie anzeigen oder ausdrucken und für die

00:24:56.376 --> 00:24:59.676
interne Verrechnung mit Cent zu arbeiten oder was immer du als Währung da hast,

00:24:59.836 --> 00:25:02.776
ist ja eigentlich nur sinnvoll, macht ja alles nur viel einfacher.

00:25:02.776 --> 00:25:05.676
Also das würde ich tatsächlich da nicht machen.

00:25:05.936 --> 00:25:09.736
Ich würde das halt eben sagen, wenn du wirklich mit Floating Point arbeiten

00:25:09.736 --> 00:25:12.296
musst, weil du irgendwie, wie ist Icke,

00:25:12.636 --> 00:25:16.516
Animationen machst, irgendwie ganz viele Vektoren da irgendwie jonglieren musst

00:25:16.516 --> 00:25:20.436
und die müssen halt Floating Points sein und aus irgendwelchen Gründen machst

00:25:20.436 --> 00:25:22.356
du Animationen, aber dir ist die Performance nicht so wichtig,

00:25:23.156 --> 00:25:25.236
dann wäre das halt was.

00:25:27.327 --> 00:25:32.947
Also ich meine, diese Floating-Point-Unpräziseheiten sind ja dafür verantwortlich,

00:25:33.007 --> 00:25:36.847
dass unsere Freunde von der künstlichen Intelligenz jedes Mal eine unterschiedliche

00:25:36.847 --> 00:25:38.527
Antwort geben, wenn du die was fragst.

00:25:39.287 --> 00:25:42.867
Weil die halt eben durch ihre Parallelisierung, wenn sie A plus B plus C machen

00:25:42.867 --> 00:25:46.047
und weil sie halt eben Floating-Point machen, dann macht das halt eben Unterschied,

00:25:46.227 --> 00:25:50.507
dass A plus B plus C und C plus B plus A nicht notwendigerweise oder überhaupt

00:25:50.507 --> 00:25:52.427
unter irgendwelchen Umständen das Gleiche ist. Ja.

00:25:53.567 --> 00:25:56.687
Also ich weiß, es ist halt irgendwie so ein Ding, das klingt irgendwie cool

00:25:56.687 --> 00:26:03.587
und sinnvoll und nützlich, aber braucht das jetzt wirklich Max Mütze im Alltag?

00:26:04.587 --> 00:26:07.307
Kommt halt stark drauf an. Ich würde tatsächlich sagen, wenn man das braucht,

00:26:07.467 --> 00:26:10.967
als ganz normaler Mensch, der einfach nur jetzt wirklich ein Shop-UI baut,

00:26:11.167 --> 00:26:12.927
ist wahrscheinlich was schiefgegangen vorher.

00:26:13.367 --> 00:26:17.027
Dann ist es gut, dass man es reparieren kann, aber eigentlich stinkt der Fisch dann woanders her.

00:26:18.523 --> 00:26:23.923
Ich habe noch, mir fiel zu dem Thema auch noch ein schöner Vortrag,

00:26:24.323 --> 00:26:30.443
der ist schon ein paar Jahre alt, von der Sarah Dayon, Fall to Programmers Believe about Money.

00:26:31.703 --> 00:26:35.783
Den fand ich ganz cool. Die arbeitet auch an so einer an so einem JavaScript,

00:26:36.083 --> 00:26:39.863
an so einer JavaScript Library, die eben extra dafür da ist,

00:26:40.063 --> 00:26:42.863
mit so Geldbeträgen zu rechnen und so.

00:26:45.023 --> 00:26:50.183
Und genau, war ganz interessant. Ja, ich würde mal sagen, ich schmeiße in die

00:26:50.183 --> 00:26:55.163
Kiste auch noch mal was rein. Mal kurz gucken hier.

00:26:55.903 --> 00:26:59.423
Auch noch ein YouTube-Video, weil YouTube-Videos, die einem Floating-Point erklären,

00:26:59.503 --> 00:27:00.523
gibt es wie Sand am Meer. Ja.

00:27:01.163 --> 00:27:05.643
Aber das ist ganz nett, weil einen das sozusagen durch den Discovery-Prozess durchführt.

00:27:06.423 --> 00:27:09.823
Also der erzählt so, wenn du jetzt auch, wenn du jetzt vor der Aufgabe stündest,

00:27:09.923 --> 00:27:12.763
ein Zahlenformat zu erfinden, das genau die gleichen, sagen wir mal,

00:27:12.823 --> 00:27:14.703
Features hat, wie jetzt irgendwie das IEEE-Ding,

00:27:15.503 --> 00:27:18.103
dann würdest du erst das erfinden, würdest in die Limitierung reinlaufen,

00:27:18.163 --> 00:27:20.363
erst das erfinden, dann würdest du in die Limitierung reinlaufen,

00:27:20.743 --> 00:27:22.423
dann würdest du das da ranbauen, dann würdest du feststellen,

00:27:22.483 --> 00:27:25.083
das funktioniert nicht mehr, sodass du am Ende genau da ankommst.

00:27:25.143 --> 00:27:29.803
Das finde ich tatsächlich ganz nett, um so das nachzuvollziehen. Ja.

00:27:30.823 --> 00:27:33.423
Und dann hatte ich noch was anderes, da muss ich mich jetzt natürlich an irgendwie

00:27:33.423 --> 00:27:37.663
die Schlagworte erinnern, weil das werde ich wahrscheinlich erstmal auf der

00:27:37.663 --> 00:27:38.763
Stelle nicht wiederfinden.

00:27:39.583 --> 00:27:43.443
Ne, tue ich natürlich nicht. Ich habe eine sehr schöne alternative Erklärung,

00:27:43.743 --> 00:27:47.523
wie man, ach ne, da ist es ja, aha, noch offen in meinem Tab-Wald,

00:27:47.663 --> 00:27:51.643
wie man Floating Point versteht so anders, als es halt normalerweise erklärt ist.

00:27:52.103 --> 00:27:55.323
Normalerweise ist es tatsächlich erklärt mit Bit für die Null und dann irgendwas

00:27:55.323 --> 00:27:57.983
hoch, irgendwas anderes. Und das stimmt, das ist so, wie es funktioniert.

00:27:58.323 --> 00:28:00.483
Aber der Kollege Herr Kerkers.

00:28:02.769 --> 00:28:09.489
Anders. Und das ist dann sozusagen etwas näher an, das hilft eher beim Denken

00:28:09.489 --> 00:28:12.389
darüber nach, wenn man jetzt so ein Bitmuster sieht, was bedeutet das denn?

00:28:12.509 --> 00:28:16.329
Da muss man halt irgendwie verstehen, als in einem definierten Window von bis

00:28:16.329 --> 00:28:18.749
gibt es einen Offset in diesem Window und das ist eine Zahl.

00:28:19.909 --> 00:28:23.149
Das ist auch nicht so lang, der Artikel. Und mit schönen Visualisierungen.

00:28:24.109 --> 00:28:27.889
Schöne Visualisierungen und mittlerweile hat er auch sein Problem mit den Formatierungen

00:28:27.889 --> 00:28:29.349
der Matheformeln da geregelt.

00:28:29.529 --> 00:28:31.609
Das war letzte Woche noch kaputt.

00:28:32.169 --> 00:28:37.429
Ja, wahrscheinlich hat er jetzt dann MathML benutzt, was ja jetzt auch in den

00:28:37.429 --> 00:28:40.089
Browsern allen unterstützt wird seit einem halben Jahr.

00:28:41.389 --> 00:28:44.929
Also das, was ich da gesehen habe an Sonntagstrümmern, war kein MathML letzte Woche.

00:28:47.149 --> 00:28:52.029
Okay, macht aber nichts. Auf jeden Fall, klassischer Fall von Nett, gut, dass wir das haben.

00:28:52.589 --> 00:28:57.189
Und die Leute, die wieder rumjammern, dass sie irgendwie 7 GB Modules brauchen,

00:28:57.529 --> 00:29:01.729
weil JavaScript keine Standardbibliothek hatte, die sollen einfach mal kacken gehen. Vielen Dank.

00:29:03.454 --> 00:29:04.554
Das entspannt ja sowieso.

00:29:06.874 --> 00:29:12.274
Genau, dann hast du jetzt was rausgefischt, wo ich überhaupt keinen Schimmer von habe.

00:29:12.594 --> 00:29:15.494
Und was sich aber irgendwie interessant anhört. Und deswegen,

00:29:15.554 --> 00:29:18.334
ich bin gespannt. Resource Management, ne?

00:29:19.814 --> 00:29:24.954
Hast du schon mal mit JavaScript Memory Management Bimsel rumgefummelt mit Weak

00:29:24.954 --> 00:29:28.174
Refs und Finalizations und ähnlichem?

00:29:28.394 --> 00:29:31.514
Nee, also ich arbeite mit Weak Sets und Weak Maps.

00:29:32.794 --> 00:29:34.334
Damit du das nicht machen musst, ne?

00:29:35.674 --> 00:29:38.954
Ja, vielleicht auch ich meine, ich habe ja so klassische MPA-Projekte,

00:29:39.014 --> 00:29:44.454
das heißt, ich habe sowieso so einen Projekttyp wo ich nicht so unter Memory Leaks leide,

00:29:45.754 --> 00:29:49.814
weil einfach eh immer Garbage collected wird mit der nächsten Navigation,

00:29:50.834 --> 00:29:56.954
aber dennoch nutze ich das, wenn es geht genau, immer kann man es ja nicht benutzen,

00:29:57.034 --> 00:29:59.374
also es gibt ja manche solche Dinge wo das eben, also zum Beispiel,

00:29:59.454 --> 00:30:02.174
wenn man glaube ich drüber iterieren will, dann kann man es nicht machen.

00:30:03.094 --> 00:30:07.114
Also wenn du so Entries haben willst von der Map oder einem Set,

00:30:07.594 --> 00:30:10.914
dann geht das ja nur, wenn du nicht ein Weak irgendwas hast.

00:30:13.294 --> 00:30:16.174
Richtig, beziehungsweise das widerspricht sich ja.

00:30:16.274 --> 00:30:20.174
Genau, da muss ich... Wenn du ein Weak-Dings haben willst, musst du ja sozusagen

00:30:20.174 --> 00:30:24.234
der JavaScript-Engine die Möglichkeit bieten, jederzeit die Welt anzuhalten

00:30:24.234 --> 00:30:26.854
und Garbage Collection zu machen, und das könnte ja Mitte deiner Iteration sein,

00:30:27.014 --> 00:30:28.914
also ist das inkompatibel. Ja, ja, genau.

00:30:31.554 --> 00:30:34.274
Ich suche noch mal einen Vortrag raus, den ich mal gesehen habe,

00:30:34.314 --> 00:30:35.494
den ich gut fand zu dem Thema.

00:30:36.414 --> 00:30:39.574
Genau, aber das andere, was du, also WeGraphs habe ich noch nicht benutzt,

00:30:40.732 --> 00:30:44.412
Und auch alles andere nicht. Genau, also die Idee dahinter ist im Prinzip die,

00:30:45.172 --> 00:30:49.132
und der Grund auch, warum du ja deine Weakmaps und Weaksets und ähnliches verwendest,

00:30:49.212 --> 00:30:51.452
ist ja, du musst irgendwo Daten vorrätig halten.

00:30:51.772 --> 00:30:54.832
Weakset irgendwie, das und das habe ich schon gesehen. Und Weakmap,

00:30:54.952 --> 00:30:57.352
ich ordne jetzt zum Beispiel diesem DOM-Knoten irgendwelche Daten zu.

00:30:58.092 --> 00:31:01.172
Dererlei Kram. Und das Problem ist ja, sobald man das macht mit irgendwelchen

00:31:01.172 --> 00:31:04.192
normalen Datenstrukturen, hält man in der Referenz auf diese Datenstrukturen.

00:31:04.272 --> 00:31:05.032
Die Garbage-Collection kann

00:31:05.032 --> 00:31:08.512
nicht mehr hingehen und die sammelt das Zeug dann halt irgendwann ein.

00:31:08.912 --> 00:31:12.152
Oder jedenfalls macht sie das halt eben, wenn du die ganzen Weak-Dinger verwendest.

00:31:12.412 --> 00:31:15.172
Oder es ist halt einfach nur eine Möglichkeit, die Garbage Collection Sachen machen zu lassen.

00:31:16.252 --> 00:31:22.632
Jetzt ist das ja so, das ist ja ein Prozess, der ist ja, also deterministisch

00:31:22.632 --> 00:31:23.372
würde ich ihn jetzt nicht nennen.

00:31:23.412 --> 00:31:27.392
Jedenfalls nicht individuell erfahrbar deterministisch, weil irgendwann kommt

00:31:27.392 --> 00:31:30.692
die Garbage Collection vielleicht vorbei und killt dein Objekt.

00:31:31.712 --> 00:31:35.092
Und du kannst halt mit einer Finalization Registry im Prinzip so eine Art On-Garbage

00:31:35.092 --> 00:31:38.012
Collection-Callback auf ein Objekt setzen, wenn du willst.

00:31:38.652 --> 00:31:40.412
Aber das ist halt irgendwie alles so ein bisschen random.

00:31:41.092 --> 00:31:44.332
Und das ist halt für diesen Use Case einfach nur, ich will die Garbage Collection

00:31:44.332 --> 00:31:46.232
nicht fertig machen, ganz sinnvoll.

00:31:46.732 --> 00:31:50.512
Aber eine Ressource kann ja auch was anderes sein, als einfach nur ein JavaScript-Objekt.

00:31:50.612 --> 00:31:54.952
Das kann ja tatsächlich irgendwas sein, was eine definierte Aufbau- und auch

00:31:54.952 --> 00:31:56.292
wieder Abreißlogik hat.

00:31:57.512 --> 00:32:00.232
Und das kennt man ja zum Beispiel, wenn man irgendwie in PHP mal eine Klasse

00:32:00.232 --> 00:32:03.152
geschrieben hat oder was ähnliches. Da gibt es dann halt irgendwie einen Constructor

00:32:03.152 --> 00:32:04.872
und es gibt auch einen Destructor.

00:32:05.052 --> 00:32:09.532
Also irgendwelche Logik, die läuft, wenn das Ding dann das Ende seines Lebenszyklus

00:32:09.532 --> 00:32:11.092
erreicht hat, wie immer der auch definiert ist.

00:32:11.832 --> 00:32:16.132
Und Explicit Resource Management in JavaScript ist im Prinzip tatsächlich eine

00:32:16.132 --> 00:32:21.292
Möglichkeit, solche Destructor-Logik an Objekte dran zu klemmen.

00:32:21.672 --> 00:32:25.052
Und die wird getriggert auf syntaktischer Basis.

00:32:25.232 --> 00:32:30.012
Sprich, wenn ein Wert nicht mehr benutzt werden kann, weil der auf eine bestimmte

00:32:30.012 --> 00:32:33.732
Art und Weise out of scope geht, dann läuft automatisch Logik,

00:32:33.832 --> 00:32:36.552
die dafür sorgt, dass dann eine von dir wie auch immer geartete.

00:32:38.305 --> 00:32:42.745
Ein gearteter Code, hingeht und der reißt die ganze Kiste wieder ab.

00:32:43.025 --> 00:32:47.525
Das wäre zum Beispiel in einem Funktionsaufruf, wo du dieses Objekt irgendwie

00:32:47.525 --> 00:32:53.245
erzeugst und dann kommst du ans Ende, dann wird irgendwie alles weggeworfen und sowas?

00:32:53.825 --> 00:32:56.725
Ja, genau. Also mein Beispiel, was ich immer hernehme, ist eine temporäre Datei.

00:32:56.865 --> 00:32:59.265
Du machst eine temporäre Datei auf, hackst da auf der irgendwie rum,

00:32:59.365 --> 00:33:01.145
schreibst da was rein, liest da was raus, was auch immer.

00:33:01.465 --> 00:33:07.365
Und dann willst du, dass das Ding am Ende deines Programms garantiert auch wieder gekillt wird.

00:33:07.825 --> 00:33:11.625
Sonst hast du kein Memory-Leak, aber du hast halt irgendwie ein Ressourcen-Leak in dem Sinne.

00:33:12.505 --> 00:33:15.365
Und das kannst du relativ einfach machen.

00:33:15.665 --> 00:33:20.345
In einer Welt, in der jetzt zum Beispiel deine temporäre Datei repräsentiert

00:33:20.345 --> 00:33:25.985
ist durch, keine Ahnung, du machst eine Klasse, ein class-temp-file mit dann

00:33:25.985 --> 00:33:27.685
irgendwie ein paar Methoden drauf, die machen die Operation,

00:33:28.285 --> 00:33:31.945
dann gibt es zwei Dinge, die du machen musst, um das zum Funktionieren zu bringen.

00:33:32.365 --> 00:33:36.405
Einerseits gibt es ein neues Symbol, das implementierst du auf der Klasse.

00:33:36.405 --> 00:33:38.605
Und dahinter legst du deine Abreißlogik.

00:33:39.225 --> 00:33:42.665
Das heißt dann halt irgendwie dispose, also symbol.dispose.

00:33:42.825 --> 00:33:45.225
Da schreibst du eine Methode rein und da steht dann halt irgendwie das Zeug

00:33:45.225 --> 00:33:47.625
drin, was du machen willst, wie zum Beispiel, lösch halt die Datei,

00:33:47.645 --> 00:33:48.645
die ich gerade erzeugt habe.

00:33:49.345 --> 00:33:53.725
Und dann verwendest du die Instanzen von dieser Klasse nicht mit let var oder

00:33:53.725 --> 00:33:57.025
const, sondern mit einem neuen Variablen-Keyword namens using.

00:33:58.368 --> 00:34:02.548
Und die Idee ist, sobald du eine Variable mit using erstellt hast,

00:34:02.968 --> 00:34:05.808
geht er erstmal hin und checkt, ist da dieses Symbol drauf und schmeißt eine

00:34:05.808 --> 00:34:07.308
Exception, wenn das nicht der Fall ist.

00:34:08.088 --> 00:34:13.008
Und wenn dann du am Ende des Scopes ankommst, du also dieses using-Ding verwendet

00:34:13.008 --> 00:34:17.168
hast und dann ist deine Funktion oder dein Blog zu Ende, dann weiß ja JavaScript,

00:34:17.408 --> 00:34:21.648
okay, diese Variable geht out of scope und triggert dann in dem Moment die Cleanup-Logik.

00:34:21.948 --> 00:34:24.668
Das heißt, dass du das unter deinem Symbol dahinter legst. hast.

00:34:24.788 --> 00:34:27.488
Und dann gibt es da noch ein bisschen Schischi drumherum, womit du halt eben

00:34:27.488 --> 00:34:30.948
machen kannst, dass auch Dinge, die dieses Symbol nicht implementieren,

00:34:31.308 --> 00:34:36.348
sozusagen in etwas gerappt werden können, was sozusagen ein generischer Container ist.

00:34:36.948 --> 00:34:40.468
Weil irgendwie zum Beispiel deine Klasse oder was du hast, hat halt auch eine

00:34:40.468 --> 00:34:42.348
Methode, die so diese Logik machen kann.

00:34:43.408 --> 00:34:45.908
Aber das heißt halt nicht Symbol.dispose, sondern irgendwas anderes.

00:34:46.168 --> 00:34:48.628
Dann baust du da halt eben so ein Objekt drumherum. Das gehört zum Schnappl dazu.

00:34:49.668 --> 00:34:54.608
Und ja, du kriegst im Prinzip ein neues Symbol und ein neues Variablen-Deklaration. Werkzeug.

00:34:55.448 --> 00:34:59.248
LetConstantWare werden jetzt um Using ergänzt. Und wenn du das alles zusammen

00:34:59.248 --> 00:35:03.088
nimmst, dann hast du halt die Möglichkeit, solche Sachen zu managen.

00:35:03.228 --> 00:35:05.448
Das ist halt für so Sachen, wie gesagt, temporäre Datei.

00:35:05.688 --> 00:35:07.568
Ein Stream, welcher Art auch immer.

00:35:08.268 --> 00:35:13.408
Eine feine Sache. Das dürfte besonders für unsere Freunde im Backend sehr erfreuen.

00:35:13.548 --> 00:35:15.468
Im Frontend habe ich das bisher jetzt noch nicht gebraucht.

00:35:16.328 --> 00:35:19.388
Aber kann natürlich praktisch sein. Und ich warte auch darauf,

00:35:19.468 --> 00:35:24.208
dass mir nur irgendwie ein netter Use Case einfällt, um das irgendwie zu missbrauchen

00:35:24.208 --> 00:35:25.548
für irgendwelche Sachen,

00:35:25.708 --> 00:35:29.888
die jetzt nicht streng genommen so zielgerichtet sind, aber im Prinzip ist es

00:35:29.888 --> 00:35:32.168
ja so ein Callback on Scope End.

00:35:33.459 --> 00:35:36.759
Was, glaube ich, sich ziemlich cool generalisieren lässt für Use Cases,

00:35:36.879 --> 00:35:37.879
von denen ich noch keine Ahnung habe.

00:35:38.579 --> 00:35:42.739
Naja, genau. Ja, das ist immer schön, sowas so wie Atomics auch sich herausgestellt

00:35:42.739 --> 00:35:45.039
haben als ein cooler Hack für viele Dinge und so, ne?

00:35:45.679 --> 00:35:50.759
Ach ja, erzähl. Naja, es gibt ja so Sachen wie, es gibt ja diese Library Party

00:35:50.759 --> 00:35:52.819
Town. Ich weiß nicht, ob du von der schon mal gehört hast.

00:35:53.299 --> 00:35:57.579
Ich habe von der gehört. Das ist dieses bizarre Ding, was irgendwie so Cross-Thread-Kram macht.

00:35:57.599 --> 00:36:03.059
Genau, also im Grunde kannst du, also Party Town baut eine Umgebung auf in einem

00:36:03.059 --> 00:36:09.479
Webworker, die einem darin laufenden Skript vorgaukelt, es sei quasi im echten DOM.

00:36:09.999 --> 00:36:15.659
Nichts leichter als das. Genau. Und weil der Webworker ja mit dem Main-Thread

00:36:15.659 --> 00:36:20.539
nur asynchron kommunizieren kann, aber die ganzen Operationen im DOM synchron durchgeführt werden.

00:36:22.419 --> 00:36:27.459
Das eine, was die nutzen, also wenn die Atomics haben, Atomics ist ja im Grunde

00:36:27.459 --> 00:36:32.739
so ein, du kannst Ressourcen sperren.

00:36:33.019 --> 00:36:37.199
Und dann wartet der Browser so lange, bis sich da was tut.

00:36:38.039 --> 00:36:41.819
Für so Multithread-Synchronisationskrempel, damit man nicht so diesen klassischen

00:36:41.819 --> 00:36:46.019
Multithreading Variable A zeigt. Genau, alle arbeiten auf dem gleichen Ding rum, ja.

00:36:47.133 --> 00:36:51.773
Und das sozusagen die Tatsache, dass das im Grunde die Kommunikation hinten

00:36:51.773 --> 00:36:57.693
raus asynchron ist, die schirmen das eben mit Atomics ab, indem der Browser

00:36:57.693 --> 00:37:02.093
dann was macht und dann ist es eben Atomic und er wartet,

00:37:02.673 --> 00:37:06.073
bis das wieder sozusagen freigegeben wird.

00:37:07.493 --> 00:37:11.113
Genau, das ist das eine. Und das andere ist, dass die, glaube ich,

00:37:11.653 --> 00:37:14.673
also wenn man keine Atomics hat, was aber mittlerweile, glaube ich, alle Browser haben.

00:37:15.093 --> 00:37:17.713
Mittlerweile haben das alle, ja. Genau, dann wird ja auch ganz gerne,

00:37:18.393 --> 00:37:23.913
wenn ihr synchrone AJAX-Calls missbraucht, die die dann mit einem Service-Worker wiederum abfangen.

00:37:24.753 --> 00:37:29.093
Also es ist richtig abgefahrener Scheiß. Aber so, das geht so in die Richtung

00:37:29.093 --> 00:37:32.673
von dem, was du dir da auch wahrscheinlich gerade vorstellst.

00:37:33.813 --> 00:37:39.873
Naja, ich meine, sie nutzen es ja insofern schon noch bestimmungsbedingt als ja notwendigerweise.

00:37:40.153 --> 00:37:42.533
Wenn ich jetzt die Kompatibilitätstabelle richtig interpretiere.

00:37:43.233 --> 00:37:46.893
Genau, außer Firefox geht das ja ausschließlich auf Shared Array Buffer Objekten.

00:37:48.273 --> 00:37:50.813
Also nur da kann man diese Atomics verwenden und die sind ja,

00:37:50.953 --> 00:37:55.653
die haben ja nur einen Use Case, nämlich Binärdaten zwischen Threads zu teilen.

00:37:57.213 --> 00:38:00.313
Also insofern operieren die zumindest noch irgendwie so in der richtigen Sphäre.

00:38:00.753 --> 00:38:04.593
Aber ich frage mich halt eben, was man so für halt zum Beispiel Web Komponenten

00:38:04.593 --> 00:38:05.873
und ähnlichen Kram machen könnte,

00:38:05.973 --> 00:38:09.193
wenn da irgendwer Zeug geht out of scope und was macht man dann? Ja.

00:38:10.213 --> 00:38:14.913
Das war halt bisher nicht so ohne weiteres drin, weil dieses Feature,

00:38:15.093 --> 00:38:18.793
das Explicit Resource Management, das gab es halt eben auf dem Papier und in

00:38:18.793 --> 00:38:19.753
TypeScript und das war's.

00:38:21.033 --> 00:38:25.133
Aber mittlerweile habe ich jetzt natürlich hier in unserem Dokument die Übersicht

00:38:25.133 --> 00:38:28.273
darüber verloren, welche Browser das mittlerweile supporten.

00:38:28.493 --> 00:38:31.573
Aber mittlerweile ist das natürlich nativ ausgesprochen weit verbreitet.

00:38:35.691 --> 00:38:39.691
Ich finde jetzt natürlich gerade die Sachen nicht wieder.

00:38:42.191 --> 00:38:46.871
Zu wenig Kompatibilitätstabelle. Egal. Achso, wichtig wäre natürlich irgendwie Using.

00:38:47.031 --> 00:38:50.231
Da kann man natürlich ein Await vorklemmen für irgendwelchen Kram,

00:38:50.331 --> 00:38:52.171
der sich asynchron initialisiert.

00:38:52.391 --> 00:38:58.171
Und wenn die Teardown-Logik auch asynchron ist, gibt es neben dem Symbol Dispose

00:38:58.171 --> 00:38:59.571
auch das Symbol Async Dispose.

00:39:00.251 --> 00:39:02.031
Weil es ja JavaScript von allem,

00:39:02.091 --> 00:39:04.971
was man neu erfinden muss, es immer zwei Geschmacksrichtungen geben. Mhm.

00:39:08.982 --> 00:39:12.482
Cool. Und wie gesagt, man kann auch was drumherum konstruieren und dann gibt

00:39:12.482 --> 00:39:15.202
es halt so lustige Kisten wie, was machst du mit Exceptions,

00:39:15.362 --> 00:39:18.882
die im Rahmen von dem automatischen Destructor geworfen werden.

00:39:19.122 --> 00:39:22.902
Gibt es also auch einen extra neuen Errortyp, um das alles irgendwie zu managen.

00:39:24.302 --> 00:39:26.422
Alles ein bisschen komplizierter, als ich jetzt erzählt habe,

00:39:26.482 --> 00:39:28.502
aber im Prinzip ist das die Idee.

00:39:30.042 --> 00:39:35.282
Ich bin gespannt, was du dann wieder für schlimme Sachen machst.

00:39:35.282 --> 00:39:37.802
Ach, ich weiß gar nicht, ob mir dazu was einfällt.

00:39:37.902 --> 00:39:40.122
Ich denke ja schon länger drauf rum und mir kommt halt nicht so richtig der

00:39:40.122 --> 00:39:43.662
Gedanke eines Tages vielleicht.

00:39:45.342 --> 00:39:54.842
Naja, wo wir gerade von JavaScript-Zeug reden, es gibt die Prioritized Task Scheduling API.

00:39:55.322 --> 00:40:00.582
Das ist nicht nur was für die Zungenbrecher, sondern mittlerweile auch ein JavaScript-Feature,

00:40:00.682 --> 00:40:04.642
das wir in allen möglichen Browsern drin haben, Ausnahme Safari.

00:40:06.022 --> 00:40:11.762
Ja, ist der da noch nicht dabei? Nö. Also jedenfalls in der MDN-Tabelle, nicht?

00:40:11.842 --> 00:40:15.322
Ich weiß jetzt nicht, aus welchem Change Nodes, wir das jetzt hier rausgepickt

00:40:15.322 --> 00:40:17.582
haben. Ja, das war wahrscheinlich dann bei Firefox.

00:40:18.042 --> 00:40:19.962
Das kann sein. Chrome gibt es das ja schon länger.

00:40:20.682 --> 00:40:26.242
Das fällt ja so ein bisschen so in deren Pad-Peef-Bereich. Also irgendwie so,

00:40:28.662 --> 00:40:32.862
Mikro-Optimierung von Dingen, die irgendwie im Performance-Bereich liegen.

00:40:35.502 --> 00:40:42.822
Ist das so? Mikro-Optimierung? Ja, oder die da wird schon viel dran rumgepopelt.

00:40:42.822 --> 00:40:47.682
Also finde ich bei denen, also die treiben das irgendwie an,

00:40:47.982 --> 00:40:50.982
also dass die da immer nochmal irgendwie was aus dem Hut zaubern.

00:40:52.977 --> 00:40:58.157
Genau, und hier geht es einfach darum, dass Funktionen, die den Main Threat blockieren,

00:40:58.597 --> 00:41:07.817
da kann man jetzt unter anderem einen Scheduler.yield awaiten während der Arbeit

00:41:07.817 --> 00:41:10.297
oder vielleicht auch in der Loop,

00:41:10.377 --> 00:41:13.817
wenn man irgendwie hunderte Dinge hat, die man abverarbeitet,

00:41:13.897 --> 00:41:18.277
könnte man in der Loop jedes Mal einen Await Scheduler.yield reinstecken.

00:41:18.277 --> 00:41:24.697
Und was der macht, ist im Grunde zu gucken, ob der Main Thread unter Druck ist

00:41:24.697 --> 00:41:29.037
und eigentlich sozusagen irgendwas rendern müsste, was gerade verhindert wird

00:41:29.037 --> 00:41:30.217
durch den aktuellen Task.

00:41:30.557 --> 00:41:35.297
Wenn das der Fall ist, dann darf der Main Thread das machen und meldet sich

00:41:35.297 --> 00:41:39.697
dann irgendwann zurück und dann läuft die Loop weiter oder eben dieser Thread.

00:41:41.317 --> 00:41:44.877
Also im Prinzip in der synchronen Ausführung von irgendwelchem Zeug,

00:41:44.957 --> 00:41:48.277
das du jetzt nicht in einen Webworker geschoben hast, aus welchen Gründen auch

00:41:48.277 --> 00:41:50.617
immer, brauchst du in deinen eigenen Code Sollbruchstellen ein,

00:41:50.817 --> 00:41:53.757
wo der Browser eine Atempause für ein neues Frame einlegen kann,

00:41:53.817 --> 00:41:55.157
wenn er das möchte. Genau.

00:41:55.737 --> 00:42:00.897
Aber der Vorteil ist halt, du kannst natürlich auch denkbar wäre auch, dass du so ein,

00:42:02.117 --> 00:42:07.037
wenn du ein Array abarbeitest, dann könntest du das ja auch in so ein Reduce

00:42:07.037 --> 00:42:11.837
mit Promise, also asynchronen Reduce reinstecken, da würdest du wahrscheinlich

00:42:11.837 --> 00:42:16.317
auch einen ähnlichen Effekt haben, weil du ja sozusagen,

00:42:17.457 --> 00:42:22.477
aber du hast halt das Problem, dass du jedes Item dann schiebst du,

00:42:23.977 --> 00:42:27.157
ein Microtask weiter.

00:42:27.657 --> 00:42:30.077
Ich wollte es gerade sagen, da kommt ja noch die Microtask-Q rein.

00:42:30.177 --> 00:42:33.477
Genau, und mit dem Scheduler Yield da ist es eben so,

00:42:34.317 --> 00:42:38.857
dass das eben, wenn der Mainstrap keinen Druck hat, dann läuft das Ding einfach

00:42:38.857 --> 00:42:45.437
ganz normal weiter und nur im anderen Fall ist es dann eben genau,

00:42:45.537 --> 00:42:48.037
wird dann unterbrochen, um diese andere Arbeit zu erledigen.

00:42:48.277 --> 00:42:53.377
Das ist so ein Ding, dass dieses Interaction zu Nextpaint.

00:42:55.992 --> 00:43:00.592
Feld so ein bisschen bearbeitet, wo es ja so ist,

00:43:00.912 --> 00:43:04.512
da wird ja gemessen, du klickst irgendwas und wie lange dauert das,

00:43:04.652 --> 00:43:12.552
bis dann irgendwas auf dem Bildschirm gemalt wird in der entsprechenden Folge deiner Interaktion.

00:43:13.632 --> 00:43:19.252
Und dein Event kann halt auch erstmal quasi gar nicht registriert werden oder

00:43:19.252 --> 00:43:22.532
zwar registriert werden und dann aber nicht abgearbeitet werden können,

00:43:22.672 --> 00:43:24.572
weil halt irgendwo wo noch ein Task läuft.

00:43:25.052 --> 00:43:28.832
Und das würdest du halt mit Scandula.yield könntest du das eben.

00:43:31.032 --> 00:43:31.912
Lösen, das Problem.

00:43:33.424 --> 00:43:37.684
Ja, wobei auch da natürlich unter extremem Rechtfertigungsdruck steht.

00:43:38.204 --> 00:43:41.604
Warum hast du überhaupt so einen Monster-Task auf dem Main-Thread am Start?

00:43:42.424 --> 00:43:46.064
Ja, vielleicht weil du auf dem DOM arbeitest. Also so wäre es bei mir.

00:43:46.604 --> 00:43:48.844
Das wäre tatsächlich die einzige Ausrede, die mir einfällt.

00:43:49.444 --> 00:43:51.684
Genau, also ich habe eigentlich auch, also das ist ja dieses,

00:43:51.844 --> 00:43:57.044
da haben wir ja auch schon vor Jahren mit dem CERMA hatten wir ja da über das

00:43:57.044 --> 00:43:58.564
Actor-Model mal eine Folge gemacht.

00:43:59.684 --> 00:44:08.404
Da geht es auch darum, dass du quasi sagst, verlagere so viele Tasks wie möglich in WebWorker.

00:44:08.804 --> 00:44:13.424
Und das ist auch so ein Konzept, das ich eigentlich seitdem verfolge.

00:44:13.864 --> 00:44:18.284
Also wenn ich jetzt irgendwie doch irgendwelche kleinzeitigen Templates render,

00:44:18.464 --> 00:44:22.044
dann läuft das immer im WebWorker. Oder ich habe ein... Moment, warte, warte, warte.

00:44:22.544 --> 00:44:25.844
Was läuft im WebWorker? Du hast jetzt Rendern gesagt, darunter verstehen...

00:44:25.844 --> 00:44:31.024
Oder das HTML, also aus einer Template, das HTML machen, also quasi mit Variablen

00:44:31.024 --> 00:44:36.084
befüllen und, weiß ich nicht, Lupen, If-Else, was so in so Template-Sprache

00:44:36.084 --> 00:44:38.384
so drinsteckt, wenn ich das kleinzeitig mache.

00:44:38.764 --> 00:44:41.164
Also du meinst mit Template jetzt so ein Oldschool-Ding wie Handlebar,

00:44:41.244 --> 00:44:44.304
so diese Sache auf dem Techbaum.

00:44:44.784 --> 00:44:48.544
Heutzutage würde man darunter ja irgendwie so ein JSX-artiges Konstrukt verstehen. Genau.

00:44:49.364 --> 00:44:52.104
Dass ja eine sehr viel engere Beziehung zu tatsächlich DOM hat.

00:44:52.244 --> 00:44:56.624
Also du bist ja sozusagen einen Schritt davon entfernt, indem du ja etwas hast

00:44:56.624 --> 00:44:59.984
und daraus erzeugst du HTML und aus dem erzeugst du ein Update aus dem Bildschirm.

00:45:00.444 --> 00:45:04.384
Das heißt, du kannst tatsächlich irgendwo sagen, ich trenne jetzt hier Sachen

00:45:04.384 --> 00:45:06.844
ab, die tatsächlich nichts von DOM wissen müssen.

00:45:07.344 --> 00:45:10.004
Genau. Das ist ja heutzutage nicht der Normalfall. Das ist ja schon ein bisschen.

00:45:11.350 --> 00:45:13.490
Das sage ich mit aller Liebe, das ist ja schon ein bisschen oldschool.

00:45:13.730 --> 00:45:16.370
Finde ich gut, brauchen wir mehr von, aber das ist ja nicht,

00:45:16.390 --> 00:45:18.090
wie man das heutzutage normalerweise machen würde.

00:45:18.630 --> 00:45:23.250
Nee, wahrscheinlich nicht, genau. Aber bei mir ist das so und funktioniert auch.

00:45:23.370 --> 00:45:30.290
Dann ist auch die kleinzeitige Internationalisierung läuft auf einem eigenen

00:45:30.290 --> 00:45:32.590
Webworker. Was habe ich noch?

00:45:33.550 --> 00:45:36.690
Also genau, manche sind natürlich ein bisschen schwerer als andere,

00:45:36.890 --> 00:45:39.370
aber so ist das alles auf Webworker verteilt.

00:45:39.430 --> 00:45:43.810
Am Ende muss aber dann der Krempel auf dem Mainstread zusammengetackert werden wieder.

00:45:44.310 --> 00:45:49.670
Da komme ich nicht drum rum. und genau, da habe ich dann auch ein DOM-Diffing-Moped,

00:45:49.830 --> 00:45:51.190
dass dann eben diese Template,

00:45:51.670 --> 00:45:55.290
oder das HTML, dass er aus dem Webworker wieder zurückkommt,

00:45:55.450 --> 00:46:00.930
dann diffft mit dem DOM und da könnte man eben überlegen, ob man so ein Scheduler.yield

00:46:00.930 --> 00:46:03.570
reinsteckt, das dann beim Diffing irgendwie,

00:46:04.210 --> 00:46:07.810
genau, muss man gucken, ob man das haben möchte, weil kann natürlich auch dazu

00:46:07.810 --> 00:46:10.050
führen, dass man so ein halbes Update hat von seinem DOM.

00:46:11.230 --> 00:46:15.050
Naja, das ist schlimmer, ne? Genau, also ob das brauchst du oder nicht,

00:46:15.150 --> 00:46:18.430
ich meine, am Ende, wenn du einen Scheduler dort Yield reinsteckst und das wird

00:46:18.430 --> 00:46:19.990
nicht gebraucht, dann tut es nicht weh.

00:46:20.410 --> 00:46:22.950
Aber wenn du auf einer langsamen Kiste bist, dann.

00:46:25.030 --> 00:46:31.630
Macht es halt doch vielleicht was. Also ist ja immer abhängig vom kleinen Device.

00:46:32.230 --> 00:46:34.270
Tut es nicht weh oder tut es wenig weh?

00:46:35.030 --> 00:46:36.990
Also was Return Scheduler Yield?

00:46:38.630 --> 00:46:42.270
Konkret. Weil wenn es ein Promise ist, dass du awaitest, ist das ja trotzdem nicht nix.

00:46:43.730 --> 00:46:47.990
Genau, es ist ein Promise, dass du awaitest. Aber was meinst du mit nicht nichts?

00:46:49.210 --> 00:46:51.830
Dann awaitest du ja immer noch einen Promise. Also theoretisch ist es ja so,

00:46:51.890 --> 00:46:54.450
du kannst ja await vor alles vorklemmen. Anni, warte mal, es wird ja sowieso

00:46:54.450 --> 00:46:55.990
ein Promise draus, auch wenn da jetzt mal rauskäme.

00:46:58.235 --> 00:47:02.975
Ja, nee, okay, da bin ich jetzt zu tief in dem, da muss man mal nachlesen, wie das so ist.

00:47:03.735 --> 00:47:05.975
Aber ich meine, was ich jetzt natürlich fragen wollte, wenn du jetzt,

00:47:06.235 --> 00:47:08.755
du bist der erste vernünftige Mensch, den ich jetzt irgendwie seit Monaten treffe,

00:47:08.835 --> 00:47:12.355
der sagt, ey, guck mal, wir haben jetzt hier Computer, die haben diese ganzen

00:47:12.355 --> 00:47:15.755
extra CPU-Kerne und die werden nicht mehr schneller, die werden nur mehr,

00:47:15.895 --> 00:47:17.455
also lass doch mal irgendwie Arbeit dahin verlagern.

00:47:17.895 --> 00:47:20.635
Dem stimmen alle zu, wenn ich denen das sage, machen tut trotzdem keiner,

00:47:20.715 --> 00:47:21.495
du bist der erste Vernünftige.

00:47:22.255 --> 00:47:25.435
Aber wie groß ist der Gewinn davon, wenn du jetzt tatsächlich deine Templates

00:47:25.435 --> 00:47:27.295
im Webworker austüftelst?

00:47:27.455 --> 00:47:32.595
Weil du hast ja... Ich glaube, das kommt auch voll auf die Maschine drauf an, auf der das läuft.

00:47:32.875 --> 00:47:37.495
Du hast ja schon auch ein Overhead durch Multithreading und wenn die Kiste so,

00:47:38.815 --> 00:47:43.115
kackenschnell ist, also wahrscheinlich bei einer Apple-Maschine ist es fast

00:47:43.115 --> 00:47:45.635
schon verlangsamt, das mutmaßlich, das Rendering.

00:47:46.055 --> 00:47:51.655
Aber es geht halt vor allem eben um diesen Riesenhaufen, also es sind 75% mobile

00:47:51.655 --> 00:47:55.915
User, die mit irgendwelchen Krüppelsgeräten ankommen, vielleicht auch teilweise,

00:47:56.255 --> 00:47:58.815
oder alten. Supermarkt-Android-Version Ramses 2.

00:47:59.055 --> 00:48:03.035
Genau, und die haben halt einfach viele CPU-Kerne.

00:48:03.455 --> 00:48:08.315
Also die haben die wirklich mindestens acht, aber sie sind halt alle langsam.

00:48:08.935 --> 00:48:11.175
Und genau, so teilt sich das dann auf.

00:48:13.529 --> 00:48:16.749
Okay, aber du kannst jetzt nicht irgendwie so aus dem Stand quantifizieren,

00:48:16.889 --> 00:48:18.349
wie viel das jetzt bringt.

00:48:19.909 --> 00:48:24.229
Nee, da müsste ich ja dann quasi das Gegenteilige auch nochmal bauen und dann

00:48:24.229 --> 00:48:31.769
müsste ich das auch rausstellen und mit Real-User-Monitoring versehen testen.

00:48:32.349 --> 00:48:35.289
Nee, du könntest einfach irgendwie ein altes Android-Gerät aus der Schublade

00:48:35.289 --> 00:48:36.409
rauskramen und testen, oder?

00:48:37.629 --> 00:48:41.169
Könnte ich vielleicht auch, ja. Das würde ja schon reichen, einfach nur so um

00:48:41.169 --> 00:48:45.329
die Annahme zu falsifizieren, dass das jetzt irgendwie alles signifikant schlimmer macht zum Beispiel.

00:48:46.029 --> 00:48:48.289
Weil ich meine, so ein Webworker hat ja initiale Startkosten,

00:48:48.369 --> 00:48:50.209
die sind ja nicht ohne. Ja.

00:48:51.309 --> 00:48:54.009
Weil bis da die erste Nachricht drüber geschickt wird. Genau,

00:48:54.129 --> 00:48:56.569
also in meinem Fall ist das insofern nicht schlimm, als dass,

00:48:56.789 --> 00:49:04.949
also ich nutze das, um UI zu updaten, nachdem sie schon einmal gerendert wurde, serverseitig.

00:49:05.329 --> 00:49:09.729
Also die wird dann sozusagen zum Leben erweckt. Also da wartet niemand auf den

00:49:09.729 --> 00:49:10.909
Output, der ist schon da.

00:49:11.609 --> 00:49:15.309
Weil du Server-Side-Rendering machst und zwar in richtig und nicht wie das die

00:49:15.309 --> 00:49:18.809
React-Leute machen, sondern du lässt dir irgendwie ein PHP oder Java oder so

00:49:18.809 --> 00:49:22.809
HTML generieren und dann machst du so die modernisierte Variante von da kommt

00:49:22.809 --> 00:49:25.929
jQuery oben drüber und dann wird's fancy. So in der Art, genau.

00:49:26.369 --> 00:49:32.789
Also ich bestücke dann die Clients mit dem State, der das repräsentiert,

00:49:32.829 --> 00:49:37.949
was da zu sehen ist, aber ohne, dass die dann nochmal quasi ihre, dann drüber rendern.

00:49:38.009 --> 00:49:41.189
Also das machen die nicht. Und du machst keine Hydration. Genau.

00:49:41.649 --> 00:49:45.329
Also im Grunde, also ich würde es trotzdem als Hydration bezeichnen,

00:49:45.469 --> 00:49:51.609
aber mein Hydration benötigt eben, muss nicht dann nochmal alles drüber rendern, was eh schon da ist.

00:49:52.289 --> 00:49:55.989
Du machst ja quasi virtuelle Hydration. Also so, du weißt ja,

00:49:56.049 --> 00:49:58.529
dass der State passt und du musst ja nicht sozusagen das adotieren,

00:49:58.549 --> 00:50:00.989
was da ist, sondern das, ja.

00:50:00.989 --> 00:50:06.329
Genau, und in der Zwischenzeit ist dann der Webworker gestartet und wenn dann

00:50:06.329 --> 00:50:12.549
Interaktion passiert, ab dem Moment, dann geht diese Maschinerie los. Mhm.

00:50:16.095 --> 00:50:18.635
Ich will nur der Vollständigkeit halber erwähnen, ich habe den Kram auch schon

00:50:18.635 --> 00:50:22.555
gemacht vor fünf Jahren oder so, aber halt mit so einem handgestrickten,

00:50:24.555 --> 00:50:27.555
im Prinzip so ein Hand-Off zwischen machen ein bisschen Arbeit auf dem Main-Thread,

00:50:27.695 --> 00:50:30.115
dann machst du ein Request-Animation-Frame, Arbeit auf dem Main-Thread,

00:50:30.375 --> 00:50:33.915
Request-Animation-Frame, um ja sozusagen das gleiche herzukriegen,

00:50:35.335 --> 00:50:39.675
indem halt dieser ganze Task mit seinen Sub-Tasks, das war bei mir halt eine

00:50:39.675 --> 00:50:41.455
Generator-Function, die hat halt immer so Worklets,

00:50:42.315 --> 00:50:44.855
geyieldet und dann konnte man halt einfach in so einem Loop immer so machen,

00:50:44.915 --> 00:50:47.775
erst Dis, dann Dis, ist dann das und dann einfach so stückweise abarbeiten,

00:50:48.015 --> 00:50:51.955
weil halt eben auch riesiges Gehacker auf dem Main Thread und ich wollte halt

00:50:51.955 --> 00:50:56.655
einen Fortschrittsbalken updaten in der Zeit, also dann brauchte ich halt irgendwie,

00:50:58.095 --> 00:51:02.295
das mit dem großen Nachteil, das Teil kann ja feststellen,

00:51:02.835 --> 00:51:06.095
ob das jetzt tatsächlich gerade nötig ist, das nächste Frame zu rendern.

00:51:07.015 --> 00:51:11.935
Und deswegen einfach so, was so hoher Geschwindigkeit ist, hohe Ausführungs

00:51:11.935 --> 00:51:17.235
Geschwindigkeit, ist das natürlich dann signifikant besser als so eine handgestrückte Kiste.

00:51:19.135 --> 00:51:22.395
Das ist also schon sehr cool. Also dieses Pattern hole ich tatsächlich gerne

00:51:22.395 --> 00:51:26.515
mal raus, wenn halt irgendwas Unvernünftiges zu machen ist.

00:51:26.815 --> 00:51:30.175
Also du, Chef, arbeitest ja im Bereich der Vernünftigen, haben wir ja mehrfach gesagt.

00:51:30.295 --> 00:51:32.815
Ich reite ja gerne mal in irgendeine Firma ein und die so, ja,

00:51:32.875 --> 00:51:37.935
wir müssen jetzt einfach synchron diese 30.000 Dinger mit JavaScript ins Frontend

00:51:37.935 --> 00:51:39.455
reinrendern. Ja, schönen Dank.

00:51:40.615 --> 00:51:43.635
Ja gut, aber es ist tatsächlich kein so großes Problem, wenn man unsere Freunde

00:51:43.635 --> 00:51:46.435
Intersection Observer erstmal hernimmt, weil dann heißt ja, rendern wirklich

00:51:46.435 --> 00:51:50.395
nur, da ist jetzt eine Dom-Node mehr drin und die macht aber erstmal nichts.

00:51:51.495 --> 00:51:54.735
Und das andere ist natürlich, wenn man das dann mit diesem Scheduling kombiniert,

00:51:54.795 --> 00:51:57.455
das ich halt bis vor kurzem halt immer manuell gemacht habe,

00:51:57.715 --> 00:52:00.175
nach dem benannten Muster und jetzt halt eben mit Scheduler Yield machen würde,

00:52:01.515 --> 00:52:02.835
dann geht das wirklich super fluffig.

00:52:03.075 --> 00:52:07.095
Dann sitzt man sofort vor seinen initialen Einträgen und röst der Rest auf.

00:52:07.095 --> 00:52:09.095
Ja, du machst halt nur so viel Arbeit wie nötig, ne?

00:52:13.008 --> 00:52:15.648
Man teilt sie halt auf. Es ist ja eigentlich nur ein Interleaving-Verfahren.

00:52:15.688 --> 00:52:18.208
Am Ende des Tages wird ja trotzdem das Zeug gemacht.

00:52:19.388 --> 00:52:22.588
Vielleicht scrollt niemand bis ganz ans Ende, dass der Intersection-Jobjekt

00:52:22.588 --> 00:52:23.848
nie sagt, so jetzt muss ich aber.

00:52:24.428 --> 00:52:28.308
Aber vielleicht würde man dann ja trotzdem sagen, dass man so Sachen wie ein

00:52:28.308 --> 00:52:32.668
initiales Rendering auf so einen Background-Task verschiebt,

00:52:32.788 --> 00:52:35.868
der halt dann irgendwann, das gibt es ja auch hier, Request-Idle-Callback.

00:52:36.228 --> 00:52:39.488
Wenn die CPU gerade mal nichts zu tun hat, dann rendere ich halt in der Reihenfolge

00:52:39.488 --> 00:52:41.648
von oben nach unten die noch nicht gerenderten

00:52:41.648 --> 00:52:44.848
Komponenten, um halt so die Control-F-User-Experience zu verbessern.

00:52:45.148 --> 00:52:47.768
Ja, Request-Idle-Callback benutze ich natürlich auch, ist ja klar.

00:52:48.028 --> 00:52:49.308
Natürlich tust du das, du bist ja auch vernünftig.

00:52:49.788 --> 00:52:54.688
Um die ganzen, also um so Third-Party-Sachen wie Sentry und so,

00:52:54.768 --> 00:52:59.788
die werden immer erst dann reingeladen, wenn Request-Idle-Callback sagt,

00:52:59.988 --> 00:53:02.348
die CPU hat jetzt wieder Kapazität.

00:53:02.988 --> 00:53:06.268
Aber entgehen dir dann nicht irgendwelche Bugs? Also Sentry ist doch dieses

00:53:06.268 --> 00:53:07.948
Remote-Error-Reporting, ne? Ja, genau.

00:53:08.528 --> 00:53:12.208
Gleiches gilt für so Analytics-Kram und so, aber das sind halt einfach,

00:53:12.468 --> 00:53:17.588
also das sind halt dann auch entsprechend langsame Devices, wo das passiert.

00:53:17.708 --> 00:53:23.028
Also bei denen, die nicht langsam sind, da führt der ja auch sofort aus, aber ja,

00:53:24.135 --> 00:53:28.615
Dann verpasse ich eben bei den langsamen Devices irgendwelche Fehler,

00:53:28.715 --> 00:53:31.595
die am Anfang in den ersten paar Sekunden passieren vielleicht.

00:53:32.935 --> 00:53:36.475
Und das ist halt eben der Preis, den du für eine bessere User Experience bezahlst.

00:53:37.315 --> 00:53:40.395
Es ist ja schön, wenn du das durchsetzen kannst, wenn das die richtigen Webentwickler hören.

00:53:40.875 --> 00:53:43.635
Ja, das andere, was ich noch mache übrigens, wenn wir schon mal dabei sind und

00:53:43.635 --> 00:53:49.755
dann können wir auch unser Derailing hier beenden, ist, genau,

00:53:49.815 --> 00:53:52.595
es gibt eine starke Korrelation zwischen,

00:53:53.215 --> 00:54:01.555
also wie, also quasi wie stark ist ein Gerät blockiert und der Device-Memory.

00:54:02.055 --> 00:54:08.375
Und zumindest in den Chromium-Browsern hast du ja die hier Navigator.Device-Memory

00:54:08.375 --> 00:54:12.675
und der gibt dir dann Auskunft, also der gibt dir nicht genau Auskunft,

00:54:12.855 --> 00:54:19.575
glaube ich, sondern das dann auch wieder so ein bisschen in so Buckets kriegst du das eben nur zurück.

00:54:20.395 --> 00:54:25.035
Wegen Fingerprinting. Wegen Fingerprinting, genau. Und dann mache ich das normalerweise

00:54:25.035 --> 00:54:30.115
so, dass wenn ein Gerät unter 8 GB hat, also es gibt momentan die Schritte,

00:54:30.175 --> 00:54:33.195
glaube ich, 1 GB, 2, 4 und 8 oder mehr.

00:54:33.375 --> 00:54:39.435
Und wenn das eben also nicht 8 oder mehr ist, dann schalte ich so Third-Party-Krempel

00:54:39.435 --> 00:54:44.435
ab, weil die dann sowieso einfach nur noch abkacken, die Devices. Ja.

00:54:45.635 --> 00:54:52.515
Genau, und das war hier, das hatte ich mal bis zum Vortrag von den Menschen von Runvision gesehen.

00:54:54.175 --> 00:55:01.235
Genau, und die, ja, da ist es. Oder? Genau, das würde ich dann noch mal verlinken.

00:55:02.555 --> 00:55:06.675
Also kannst du quasi sagen, Geräte mit wenig RAM, die sind auch immer krass

00:55:06.675 --> 00:55:10.495
ausgelastet auf der CPU durch deine Skripte. Ja, klar.

00:55:11.715 --> 00:55:15.135
Also du benutzt sozusagen wirklich nur Device Memory als Proxy für,

00:55:15.235 --> 00:55:17.335
was kann ich denen eigentlich insgesamt zumuten. Genau.

00:55:17.535 --> 00:55:21.275
Und wenn ich das eben nicht ablesen kann, wie das in Safari und Firefox der

00:55:21.275 --> 00:55:25.055
Fall ist, dann kriegen die eben einfach die Vollladung.

00:55:26.421 --> 00:55:31.641
Ja, ich glaube, man kann ja auch Leuten, die auf einem Mobilgerät mit entweder

00:55:31.641 --> 00:55:34.561
Safari daherkommen oder mit Firefox daherkommen,

00:55:35.741 --> 00:55:38.721
würde ich vermuten, dass die potenziell da auch was haben, was vielleicht jetzt

00:55:38.721 --> 00:55:42.621
nicht irgendwie das letzte Baseline-Supermarktgerät ist.

00:55:43.481 --> 00:55:46.261
Ja, genau. Gerade die Apple-Geräte sind ja relativ schnell. Also ich meine,

00:55:46.341 --> 00:55:47.941
das iPhone kann ja generell alles was.

00:55:48.521 --> 00:55:52.221
Und man installiert sich doch nicht in einen alternativen Browser auf dem Mobilgerät,

00:55:52.261 --> 00:55:54.201
wenn man nicht irgendwie ein bisschen davor ist.

00:55:55.481 --> 00:55:57.941
Ja, okay. Dann schaltest du einfach den Third-Party-Kram ab.

00:55:58.101 --> 00:56:00.641
Ich bin aber sehr gespannt, wie, also ich merke mir das alles,

00:56:00.861 --> 00:56:04.201
weil ich möchte auf jeden Fall auf der nächsten Konferenz, wenn ich den Business-Fritzen

00:56:04.201 --> 00:56:06.581
einen Vortrag mache, will ich wieder ein paar Lacher abgreifen.

00:56:06.721 --> 00:56:11.221
Und wenn ich denen dann sage, dann schalte ich einfach so das Error-Tracking ab und die Analytics.

00:56:12.321 --> 00:56:14.641
Und dann läuft das schon, dann brauchst du gar nichts weiteres zu machen.

00:56:14.881 --> 00:56:18.681
Da bin ich aber gespannt, wie die glauben, dass sie das durchsetzen können in ihren Höhlenblöchern.

00:56:19.261 --> 00:56:20.381
Aber gut, dass du das kannst.

00:56:21.321 --> 00:56:27.061
Ja, ja, doch. Also genau, in meinem Projekt geht das und es ist jetzt ja auch

00:56:27.061 --> 00:56:29.381
nicht so. Ich glaube, das geht in den meisten Projekten.

00:56:29.461 --> 00:56:32.801
Ja, genau. Also ich glaube, man denkt nur, dass man es nicht machen kann.

00:56:32.981 --> 00:56:37.321
Also weil man immer Angst hat irgendwie, dass man Daten nicht hat,

00:56:37.481 --> 00:56:41.041
die man wahrscheinlich vielleicht brauchen könnte oder die wichtig sind oder

00:56:41.041 --> 00:56:44.581
meine Analytics-Zahlen. Aber die sind ja sowieso verfälscht.

00:56:44.741 --> 00:56:50.181
Also viele ja auch einfach so Requests of Analytics Tools dann wegblockieren

00:56:50.181 --> 00:56:53.101
oder die haben auch die Cookie Settings vielleicht eh nicht so eingestellt.

00:56:53.301 --> 00:56:55.821
Also du kriegst ja sowieso, du erfasst ja eh nicht alles.

00:56:56.661 --> 00:57:00.141
Und dann ist das eben noch so ein Bucket mehr, der dann nicht erfasst wird.

00:57:00.301 --> 00:57:01.901
Aber die Grundtendenzen.

00:57:03.041 --> 00:57:08.081
Du machst ja quasi die Entscheidung zwischen, ich messe einen Nutzer oder eine

00:57:08.081 --> 00:57:12.581
Nutzerin nicht und habe dann halt eine Null dastehen oder du hast eine Null

00:57:12.581 --> 00:57:15.281
dastehen, weil sie das Ding nicht benutzen können, das du gebaut hast.

00:57:15.601 --> 00:57:17.561
Am Ende kriegst du eh eine Null. Ja, genau.

00:57:18.481 --> 00:57:23.261
Und am Ende, ja, also das ist wie so ein Boot, auf dem zu viele Leute sitzen

00:57:23.261 --> 00:57:25.121
oder zu viel Ballast drauf ist.

00:57:25.401 --> 00:57:30.781
Da musst du halt dann irgendwie, da reißt du die Bänke raus und die,

00:57:30.981 --> 00:57:33.761
weiß ich nicht, alles, was du noch an Krempel da drin hast und wirfst das über

00:57:33.761 --> 00:57:36.021
Bord, damit das Boot eben nicht sinkt.

00:57:36.901 --> 00:57:40.521
Ja, aber damit, mit der Argumentation, also es ist ja alles sinnvoll und richtig.

00:57:41.461 --> 00:57:43.881
Aber damit kriegst du ja niemanden überzeugt, der sagt, aber das kann ich ja

00:57:43.881 --> 00:57:48.801
nicht messen, dass wir jetzt hier in meiner Abteilung steigende Werte erzielt haben.

00:57:50.061 --> 00:57:53.801
Nein, du kannst ja auch noch Server-Signal Analytics. Das nimmt dir ja keiner weg.

00:57:55.681 --> 00:57:57.841
Bei einer Single-Page-Application klappt das aber nicht so.

00:58:00.540 --> 00:58:07.160
Naja, du kannst ja auch Tracking-Requests dann an dein Backend schicken. Könntest du ja machen.

00:58:08.580 --> 00:58:10.840
Das könnte man alles machen. Aber ist das nicht viel einfacher,

00:58:10.880 --> 00:58:13.880
wenn man einfach die Standardlösung einkauft und man baut die da ein?

00:58:14.000 --> 00:58:16.240
Dann bachst du doch einen schönen Cookie-Banner und alle sind zufrieden.

00:58:16.600 --> 00:58:20.860
Ja, aber die können halt so viel und sind einfach sehr schwer und oftmals auch

00:58:20.860 --> 00:58:22.800
nicht nach so Best-Practices gebaut.

00:58:23.928 --> 00:58:27.628
Ähm, es sind ja auch viele, also es gibt ja auch zum Beispiel auch dieses Pre-Rendering

00:58:27.628 --> 00:58:29.308
von Seiten, das du machen kannst.

00:58:29.708 --> 00:58:32.068
Und da sind ja auch viele Tools irgendwie gar nicht drauf eingestellt.

00:58:32.268 --> 00:58:37.528
Also die, die dann irgendwie einen echten Besuch checken, obwohl der nicht,

00:58:37.688 --> 00:58:41.588
bisher noch nicht echt ist, weil es nur Pre-Rendering ist und die Benutzerin

00:58:41.588 --> 00:58:45.728
der Benutzer diese Ansicht vielleicht nie aktivieren würde oder so.

00:58:47.548 --> 00:58:50.988
Also, ja, du hast, und es sind ja eh, also auch so Sachen wie,

00:58:51.888 --> 00:59:00.088
ich weiß nicht, neulich ist so ein SEO-Shit abgegangen, da, also es gibt ja

00:59:00.088 --> 00:59:02.308
total viel so Crawling-Tools,

00:59:02.748 --> 00:59:07.988
die einem sagen, wo in den Google-Suchergebnissen man gerade steht für bestimmte Stichworte.

00:59:08.588 --> 00:59:13.368
Also bist du auf dem ersten Platz und wie ändert sich das über die Zeit?

00:59:13.708 --> 00:59:17.268
Also vor einem Monat warst du noch auf Platz 1, jetzt bist du auf Platz 5.

00:59:17.808 --> 00:59:24.488
Das machen die, indem die die Webseite oder die Google-Suche einfach scrapen.

00:59:25.068 --> 00:59:29.928
Und Google hat einen Parameter jetzt deprecated, mit dem man sich direkt 100

00:59:29.928 --> 00:59:31.208
Ergebnisse zeigen lassen kann.

00:59:31.968 --> 00:59:37.008
Jetzt sind es nur noch 10. Und die Impressions, also sozusagen die Zahl,

00:59:37.008 --> 00:59:43.528
die in der Search-Konsole drinsteht, wie oft man von Benutzern gesehen wurde,

00:59:43.888 --> 00:59:46.988
ist halt ganz krass abgeschmiert.

00:59:47.168 --> 00:59:52.068
Und das zeigt wiederum, dass die meisten Impressions, die man auf seiner Seite

00:59:52.068 --> 00:59:56.748
hat, durch Scraping-Tools kommen und nicht durch echte User. Ah.

00:59:57.608 --> 01:00:04.248
Also, das sind halt auch so, man stellt diese Daten gar nicht in Frage und im Grunde ist.

01:00:05.248 --> 01:00:08.128
Jetzt ist Google ja auch bemüht, da korrekte Daten zu liefern,

01:00:08.328 --> 01:00:14.108
aber jetzt, wo man eben auf einmal, wo eben dieser Unfall in Anführungszeichen

01:00:14.108 --> 01:00:15.448
passiert ist, merkt man,

01:00:16.068 --> 01:00:20.628
ui, ich werde vielleicht doch gar nicht so oft in Google suchen gesehen als

01:00:20.628 --> 01:00:26.008
Eintrag, wie bisher meine Vermutung war, basierend auf den Daten.

01:00:27.637 --> 01:00:31.857
Hm. Naja, und dann gibt es ja die Crawlerei, die ja auch noch von unseren Freunden

01:00:31.857 --> 01:00:34.917
von der künstlichen Intelligenz jetzt ja auch intensiviert wird.

01:00:36.257 --> 01:00:39.357
Ja, die schlägt sich dann in den Access-Logs nieder.

01:00:41.537 --> 01:00:45.697
Ja. Deswegen also... Ist ein schwieriges Business.

01:00:45.697 --> 01:00:53.937
Ja genau, also es ist halt alles, es ist halt viel auch irgendwie sich verlassen

01:00:53.937 --> 01:00:58.717
auf Dinge und hoffen, dass so, aber am Ende.

01:00:58.717 --> 01:01:06.437
Naja, oder du misst halt das, was du messen kannst und legst dem dann unnötig

01:01:06.437 --> 01:01:11.537
oder unangebracht viel Gewicht bei, weil es halt was ist, was du messen kannst.

01:01:11.897 --> 01:01:16.537
Und ob das dann so sinnvoll ist, ein gutes Zeichen ist oder was auch immer, ist schwierig.

01:01:16.737 --> 01:01:22.097
Also super, wenn du irgendwo arbeitest, wo zumindest die Vernunft noch eine Stimme hat.

01:01:23.097 --> 01:01:28.997
Das ist ja dieser Tage nicht der Normalfall. Ja, nee, klar, ich finde das auch super.

01:01:30.697 --> 01:01:34.157
Aber das ist, glaube ich, das kann man, glaube ich, nicht so allgemeingültig

01:01:34.157 --> 01:01:37.577
als Tipp rausgeben für, äh, schalt einfach dann Analytics ab,

01:01:37.797 --> 01:01:41.817
wenn, äh, dass Device Memory zu klein ist. Ist richtig, ist sinnvoll.

01:01:42.257 --> 01:01:45.597
Genau, ist vielleicht nur einfach so ein Ding, was man verfolgen kann.

01:01:45.917 --> 01:01:46.797
Also vielleicht geht das ja.

01:01:47.717 --> 01:01:50.317
Ja, oder vielleicht kann man das ja zumindest mal irgendwie bei seinem Side-Project

01:01:50.317 --> 01:01:54.737
machen, wenn es schon nicht irgendwie bei Megacorp, äh, hast du nicht gesehen, möglich ist.

01:01:56.697 --> 01:01:59.357
Kann man ja vielleicht dann zumindest das machen, wenn man irgendwie da sein

01:01:59.357 --> 01:02:01.437
Open-Source-Projekt irgendwie einfach nur anpreisen möchte.

01:02:04.877 --> 01:02:09.997
Na dann, okay, dann machen wir doch mal auf diesen leichten Schwenk von im Prinzip,

01:02:10.257 --> 01:02:12.537
also wir haben ja im Prinzip bloß über eine einzige Funktion geredet,

01:02:12.597 --> 01:02:15.277
nämlich dieses Scheduler-Ding.

01:02:15.377 --> 01:02:16.517
Da ist natürlich doch mehr drin.

01:02:17.477 --> 01:02:20.437
Aber ich glaube, wir lassen das mal, oder? Ja, genau. Es gibt noch Post-Tasks.

01:02:20.637 --> 01:02:23.357
Die Idee ist ja die gleiche, schieb die Arbeit auf den Main-Thread durch die Gegend.

01:02:23.757 --> 01:02:26.937
Ja, das stimmt. Ja.

01:02:28.970 --> 01:02:32.350
So, okay. Dann gehen wir doch einfach mal, noch haben wir ein bisschen Zeit,

01:02:32.590 --> 01:02:34.130
oder? Komm. Ja, also von mir ist es okay.

01:02:34.790 --> 01:02:38.210
Alles klar. Dann würde ich mal annehmen, wenn nach allem, was wir jetzt im Rahmen

01:02:38.210 --> 01:02:41.670
dieser Stunde über deine Arbeitsweise gehört haben, gehe ich mal davon aus,

01:02:41.770 --> 01:02:44.910
dass das Dialog-Element eins deiner besten Freunde ist. Das ist korrekt.

01:02:45.930 --> 01:02:49.610
Ist super, ne? Genau, wobei ich so alles nicht machen musst. Ja, absolut.

01:02:50.210 --> 01:02:55.510
Ich benutze eigentlich auch immer nur als Model, also nie als Nicht-Model.

01:02:55.850 --> 01:02:59.590
Weiß nicht, wie es bei dir ist. Eben so. Genau.

01:03:01.350 --> 01:03:04.610
Ja, und an dem wird auch immer noch so ein bisschen gefeilt.

01:03:04.710 --> 01:03:05.990
Das ist jetzt ja auch schon so ein bisschen alt.

01:03:06.250 --> 01:03:08.430
Also ein paar Sachen sind ja auch ein bisschen merkwürdig an dem Ding,

01:03:09.010 --> 01:03:11.210
nämlich, dass du es eben nur programmatisch öffnen kannst.

01:03:12.250 --> 01:03:18.570
Und da gibt es jetzt eben diese neue Technik der Invoker API,

01:03:19.370 --> 01:03:27.070
wo man eben in seinem Markup auch so im Prinzip zu Steuerkommandos hinterlegen kann also kann man sagen,

01:03:28.110 --> 01:03:33.650
Command for und dann verweist man eben auf die ID eines Elements,

01:03:33.750 --> 01:03:35.870
was man steuern möchte und dann kann man.

01:03:37.090 --> 01:03:41.270
Den Command ich glaube das ist dann nur noch der Command Ich bin gerade nicht

01:03:41.270 --> 01:03:43.910
mehr unter Pro, den du da ausführen kannst.

01:03:43.990 --> 01:03:48.370
Und da kannst du dann zum Beispiel sowas wie Showmodel machen auf dem Dialog.

01:03:48.510 --> 01:03:54.050
Es ist quasi ein imaginärer Abstraktionslayer unterhalb von so Sachen wie Pop-Overs und Dialogs.

01:03:54.210 --> 01:03:57.370
Genau, aber was halt, was man vielleicht auch denken könnte,

01:03:57.590 --> 01:04:01.930
ist, dass man, dass das universell einsetzbar ist.

01:04:01.930 --> 01:04:07.250
Also, dass alles, was irgendwelche Methoden hat, dass man das quasi nur anstatt

01:04:07.250 --> 01:04:10.990
in CamelCase dann in KebabCase dahin schreibt und das funktioniert.

01:04:11.530 --> 01:04:17.950
Dem ist aber nicht so. Also, es müssen quasi, das muss alles quasi beigebracht

01:04:17.950 --> 01:04:19.450
werden von den Browser-Kreisern.

01:04:20.463 --> 01:04:25.723
Machen. Also, ne. Doch. Du kannst auch deine eigenen Kommandos da bauen,

01:04:25.863 --> 01:04:28.583
mit Dash Dash vorne dran, wie bei den CSS-Variablen. Ach so.

01:04:29.363 --> 01:04:32.463
Ja, okay, aber du kannst nicht, also Dinge, die schon da sind,

01:04:33.523 --> 01:04:39.583
also, es ist nicht so, dass du quasi immer sagen kannst, weiß ich nicht.

01:04:41.123 --> 01:04:43.523
Jetzt hört mir natürlich auch kein Beispiel ein, aber verschiedene...

01:04:43.523 --> 01:04:44.283
Play auf dem Video-Element.

01:04:45.303 --> 01:04:49.723
Genau, aber da kannst du jetzt nicht einfach ein Command gleich play machen,

01:04:49.923 --> 01:04:53.083
wenn die Browser-Hersteller das nicht eingebacken haben.

01:04:54.023 --> 01:04:59.483
Nee, aber du könntest machen ein Command dash dash chap dash play und drei Zeilen

01:04:59.483 --> 01:05:01.883
JavaScript bauen, die das implementieren, die das generalisieren.

01:05:02.063 --> 01:05:06.743
Weil alles, was diese Invoker-Commands machen, ist im Prinzip ein Remote-Event-Trigger.

01:05:06.883 --> 01:05:11.623
Du drückst irgendwo drauf, was ein Command irgendwo invokt und das ist unter

01:05:11.623 --> 01:05:16.383
der Haube ja bloß, dass da ein Command-Event triggert und da kannst du ja ein

01:05:16.383 --> 01:05:18.383
beliebiges Glissner drauf klemmen und einfach sagen,

01:05:18.823 --> 01:05:22.023
wenn da irgendwie so ein Pattern-Match besteht zwischen beginnend mit dash dash,

01:05:22.183 --> 01:05:26.803
chap dash und endet mit einem String, der einer Methode auf diesem Element entspricht,

01:05:26.923 --> 01:05:31.223
dann gilt das als invoked und dann machst du irgendwie ein JSON-Path.

01:05:31.583 --> 01:05:36.003
Bei dem invokenden Element gibt es noch ein Attribute namens Data-Arguments oder so.

01:05:36.683 --> 01:05:39.183
Nimmst du Array, Passt, hast du nicht gesehen und dann hast du das direkt noch

01:05:39.183 --> 01:05:42.903
parametrisiert. Genau, aber dann musst du ja schon wieder JavaScript schreiben.

01:05:43.503 --> 01:05:44.683
Drei Zeilen, das ist aber okay.

01:05:45.323 --> 01:05:50.083
Ja, und Showmodel ist ja auch nicht viel. Aber es ist halt irgendwie einfach dämlich, ja.

01:05:50.343 --> 01:05:55.643
Also, dass das nicht anders geht. Und also, das ist total super, was du da erzählst.

01:05:55.763 --> 01:05:58.403
Und es ist auch mehr gut und nützlich.

01:05:59.163 --> 01:06:04.803
Ich wollte nur sagen, also, man kann nicht davon ausgehen, dass alles,

01:06:05.083 --> 01:06:08.723
was irgendwelche Methoden hat, also alle DOM-Elemente, die irgendwelche Methoden

01:06:08.723 --> 01:06:14.363
haben, dass man die alle jetzt schon ansteuern kann mit diesen Invoker-Commands,

01:06:14.683 --> 01:06:15.903
indem man eben einfach sagt,

01:06:16.463 --> 01:06:20.223
hey, das heißt show, Klammer auf, Klammer zu, dann mache ich auch hier show

01:06:20.223 --> 01:06:21.523
und dann wird er das schon ausführen.

01:06:23.636 --> 01:06:28.796
Es gibt halt ein paar, die sozusagen blessed sind von eingebauter Logik. Genau.

01:06:29.156 --> 01:06:31.136
Aber im Prinzip kann man sich seine eigene Logik auch noch dran bauen.

01:06:31.196 --> 01:06:34.416
Ich weiß nicht, warum die das so gemacht haben. Da habe ich mich nicht mit beschäftigt.

01:06:34.736 --> 01:06:37.116
Aber das wird schon einen Grund haben, denke ich.

01:06:37.956 --> 01:06:41.396
Der Grund ist wahrscheinlich, also ich stelle mir das ja wirklich vor als ein,

01:06:41.516 --> 01:06:42.896
guck mal, das kann man auch generalisieren.

01:06:43.256 --> 01:06:45.596
Also die haben Dialog gebaut, die haben Popover gebaut, haben gemerkt,

01:06:45.656 --> 01:06:48.976
das ist ja quasi das Gleiche. Und die haben auch gemerkt, Showmodel ist das,

01:06:49.036 --> 01:06:50.936
was alle benutzen. Aber da müssen sie JavaScript machen.

01:06:52.296 --> 01:06:55.816
Und vielleicht will man das ja nicht zwingend immer erforderlich machen und

01:06:55.816 --> 01:06:59.776
dann ist das halt so eine Eskalationsspirale von so das Level weiter runterschrauben.

01:07:01.036 --> 01:07:04.496
Aber immer wenn du irgendeine Software hast und die kommt aus irgendeiner Ideenrichtung,

01:07:04.676 --> 01:07:08.236
ist es ja relativ schwierig, dem zu entkommen und irgendwas wirklich so weit

01:07:08.236 --> 01:07:10.796
zu generalisieren, ohne wenn du das irgendwem am Ende erklärst,

01:07:11.256 --> 01:07:14.376
sagen zu müssen, okay, pass auf, das ist so, weil früher war das ganz anders.

01:07:15.116 --> 01:07:19.336
Ich vermute, das ist das einfach. Ich finde nur, wenn man das so sieht,

01:07:19.336 --> 01:07:23.176
dann könnte man ja so irgendwann denken, aha, okay, ich verstehe,

01:07:24.176 --> 01:07:27.116
das ist wahrscheinlich, funktioniert das überall, weil ich erkenne ja dieses

01:07:27.116 --> 01:07:31.676
Muster, immer wenn da irgendwas in CamelCase in JavaScript aufgerufen wird,

01:07:31.836 --> 01:07:35.436
dann muss man das einfach in KebabCase da in dieses Command-Ding reinmachen.

01:07:35.936 --> 01:07:39.896
Haha, das geht natürlich dann auch mit diesem Element. Oh, geht nicht. Hm.

01:07:42.056 --> 01:07:45.436
Genau. Man könnte das jetzt tatsächlich hernehmen und als Unterbau verwenden

01:07:45.436 --> 01:07:49.896
für irgendwie so eine neue Art von Framework-eskem Library-Teil.

01:07:50.396 --> 01:07:54.536
Also wo ja immer die Frage ist, wie machst du jetzt Kommunikation zwischen Komponenten

01:07:54.536 --> 01:07:56.376
in deinem, was immer du da baust.

01:07:56.916 --> 01:08:01.176
Und da wäre es ja sozusagen ein relativ natürlicher Mechanismus zu sagen,

01:08:01.896 --> 01:08:05.376
okay, ich setze mich halt eben einfach auf dieses Command-Event drauf.

01:08:07.116 --> 01:08:10.376
Das alleine ist ja schon viel wert. Also auch wenn es jetzt so wenige von diesen

01:08:10.376 --> 01:08:13.556
Blast-Varianten gibt für den nächsten, der irgendwie htmx 2.0 schreibt,

01:08:14.216 --> 01:08:18.556
ist das, glaube ich, gar keine verkehrte Idee, sowas als Grundschutz. Stock zu nehmen.

01:08:20.445 --> 01:08:25.525
So, was ich natürlich jetzt wissen will, ist dieses Command-Event, ist das Composed?

01:08:26.225 --> 01:08:30.165
Ah, ja. Der alte Shadow DOM-Spezie.

01:08:30.945 --> 01:08:34.665
Ich gehe mal direkt ein Feature-Zeig, gucke ich sofort und frage mich,

01:08:34.705 --> 01:08:35.905
wie geht das mit Shadow DOM kaputt?

01:08:36.065 --> 01:08:39.745
Und bei diesem ganzen Command-Kram ist es natürlich so, die identifizieren einander

01:08:39.745 --> 01:08:45.385
über Strings und das ist ja immer schlecht, diese Grenze überschreiten.

01:08:47.225 --> 01:08:50.485
Dafür würde jetzt natürlich auch nichts helfen, wenn das Command-Event Composed wäre.

01:08:50.825 --> 01:08:55.225
Also Composed heißt halt, das blubbert halt aus Shadowdoms raus in seine Parents.

01:08:55.825 --> 01:09:02.605
Aber das wäre ja zumindest eine mögliche Teil Mitigation dieses Problems. Und? Was kommt raus?

01:09:03.405 --> 01:09:06.165
Ah, weiß nicht. Die Spezifikationsseite lädt noch.

01:09:07.245 --> 01:09:10.565
Und MDN hat ja, das finde ich ja total grauslich. Ich weiß nicht,

01:09:10.605 --> 01:09:13.805
wie dir das geht, aber wenn du irgendein Event bei MDN nachschlägst,

01:09:13.905 --> 01:09:17.785
steht da nie, ob das Bubbled, Composed ist, Cancellable ist, das steht da nirgends.

01:09:19.125 --> 01:09:22.545
Ja, ich weiß es gar nicht. Oder steht das vielleicht nur manchmal da oder so?

01:09:23.765 --> 01:09:28.125
Nee. Ich habe das auch mal irgendwie auf Social Media mal beweint und irgendwer,

01:09:29.125 --> 01:09:31.065
und sagte dann, ja, ist ein Wiki, repariere halt.

01:09:32.245 --> 01:09:36.385
Okay. Stimmt ein bisschen, aber ich meine... Nee, wäre schon cool.

01:09:36.485 --> 01:09:41.705
Also bei CSS hast du ja auch immer so die Initial Value, die dann, die das hat und,

01:09:44.485 --> 01:09:47.005
so in der Art halt, ne? Ja.

01:09:50.065 --> 01:09:53.325
So, da, Button-Element, man muss ja natürlich jetzt bei den Spezifikationen

01:09:53.325 --> 01:09:57.545
auch in den Algorithmus reingucken, der das dispatcht, weil in diesen Algorithmen ist es ja so,

01:09:59.650 --> 01:10:03.570
Unserer Alltagserfahrung nach ist es ja so, gewisse Events haben es inhärent

01:10:03.570 --> 01:10:07.050
an sich dran, dass sie cancellable oder sonst was sind.

01:10:07.190 --> 01:10:10.090
Aber tatsächlich im Algorithmus ist es immer so, Dispatch ein Argument genannt,

01:10:10.230 --> 01:10:12.990
so und so, vom Typ so und so, mit Parametern.

01:10:13.470 --> 01:10:17.030
Hast du nicht gesehen? Aber ich glaube, ich habe es jetzt gefunden.

01:10:18.090 --> 01:10:22.470
Firing an Event namens Command as Target, Command Attribute,

01:10:22.590 --> 01:10:26.210
bla bla bla, cancellable initialized so true. Aber das bedeutet,

01:10:26.430 --> 01:10:32.510
es ist nicht, es bubbelt nicht und es ist nicht, ähm, ja. Nicht composed. Composed, ja.

01:10:33.370 --> 01:10:35.310
Gut, dass es nicht bubbelt, das habe ich ja von dir gelernt,

01:10:35.390 --> 01:10:37.810
ist ja völlig egal, weil die Coolen

01:10:37.810 --> 01:10:41.710
machen ja ihr Eventabfang in der Capturing-Phase. Ja, richtig, richtig.

01:10:42.430 --> 01:10:47.170
Aber gegen das Non-Composed-Sein ist natürlich doof. Da ist kein Kraut gegengewachsen.

01:10:47.810 --> 01:10:51.290
Nee. Aber wie gesagt, es wird ja eh nicht funktionieren wegen des ganzen String-Gebimsels.

01:10:52.130 --> 01:10:54.470
Habe ich jetzt angefangen zu möbeln, bevor wir jetzt wirklich erklärt haben,

01:10:54.550 --> 01:10:55.710
wie es funktioniert. Ich glaube nicht, oder?

01:10:59.230 --> 01:11:02.670
Nö, haben wir doch schon erklärt, oder? Ja, ich glaube auch. Doch, doch, das passt.

01:11:03.770 --> 01:11:06.690
Aber was gibt es jetzt Neues? Genau, und sonst gibt es noch Neues.

01:11:06.790 --> 01:11:07.970
Es gibt eben so Feintuning.

01:11:08.250 --> 01:11:13.750
Zum Beispiel kann man jetzt auf einem Dialog-Element, ich glaube,

01:11:13.830 --> 01:11:18.670
bei dem Event bekommt man jetzt eine Closed-By-Property,

01:11:19.690 --> 01:11:25.350
die auf eben den Knopf verweist, verweist, der zum Schließen des Dialoguelements geführt hat.

01:11:25.750 --> 01:11:31.590
Sei es ein Abbrechen-Knopf oder das X oder ein Speichern-Knopf oder was weiß ich.

01:11:33.094 --> 01:11:36.614
Je nachdem geht es ja dann unterschiedlich weiter.

01:11:39.454 --> 01:11:47.514
Und dann, dass ein Popover kann mit dem Show-Popover der Show-Popover-Methode oder darin kann jetzt,

01:11:48.614 --> 01:11:55.454
im Options-Objekt kann man jetzt auch ein Source-Element übergeben.

01:11:55.594 --> 01:11:59.254
Und das ist wiederum wichtig, also zumindest meiner Meinung nach,

01:11:59.454 --> 01:12:05.014
um für das Fokus-Management, also dass man Wenn das dann geschlossen wird,

01:12:05.274 --> 01:12:07.314
also wo muss der Fokus dann hinwandern?

01:12:07.994 --> 01:12:12.654
Ja, das ist ja auch immer das Anstrengendste im Fokusmanagement,

01:12:12.834 --> 01:12:17.374
wenn du solche Overlays und Dialoge hast und so.

01:12:18.234 --> 01:12:23.394
Was passiert bei dem Fokus, wenn das Ding zu ist? Und wenn dann ein Dialog-Element

01:12:23.394 --> 01:12:27.374
von vielen verschiedenen geöffnet werden kann, dann musst du dir quasi immer vorher merken,

01:12:27.614 --> 01:12:31.474
welches von denen hat jetzt diesen Dialog geöffnet, damit, wenn der dann geschlossen

01:12:31.474 --> 01:12:33.974
wird, dann der Fokus wieder auf das Ding zurückkommt.

01:12:34.494 --> 01:12:38.734
Da wünsche ich mir dann manchmal auch so ein bisschen cooleres Debugging im Browser für so Themen.

01:12:40.053 --> 01:12:47.273
Ist das bei dem Modal-Dialog, da gibt es doch irgendeine Art von Standardverhalten,

01:12:47.393 --> 01:12:48.893
was das Fokusmanagement angeht, oder?

01:12:50.193 --> 01:12:56.673
Also wenn du das öffnest, dann wird ja sozusagen der Rest der Seite inert gemacht,

01:12:56.933 --> 01:12:59.973
dass da nichts mehr fokussierbar und klickbar ist.

01:13:00.253 --> 01:13:06.493
Und das erste fokussierbare Kind-Element in dem Dialog wird dann fokussiert.

01:13:07.853 --> 01:13:11.413
Genau, aber es gibt ja auch den Standardfalten für, wenn es geschlossen wird

01:13:11.413 --> 01:13:14.853
weil du fokussierst dann irgendwie Kram in dem Dialog drin, füllst ein Formular

01:13:14.853 --> 01:13:20.393
aus, was auch immer und klickst dann auf OK Go und OK Go macht dann den Dialog zu Ich glaube,

01:13:20.493 --> 01:13:23.993
dass dann einfach der Body fokussiert wird Das ist ja nicht so gut.

01:13:25.793 --> 01:13:32.293
Das musst du dann selber managen meiner Meinung nach wenn Hörerinnen und Hörer

01:13:32.293 --> 01:13:38.553
da irgendwie die mehr coole Tricks haben oder mehr Wissen gerne her damit.

01:13:38.813 --> 01:13:41.233
Aber genau, ich mache das halt per Hand.

01:13:41.513 --> 01:13:46.153
Also ich merke mir das einfach, wo der Fokus vorher war.

01:13:46.693 --> 01:13:48.693
Und da landet er dann auch hinterher wieder.

01:13:52.133 --> 01:13:57.113
Überleg gerade mal. Es gibt natürlich ein, also wenn sich ein Dialog öffnet,

01:13:57.793 --> 01:14:01.453
schmeißt das Ding dann standardmäßig ein Event durch die Gegend?

01:14:01.573 --> 01:14:04.913
Ich glaube, ja. Ja, also es kann sein, dass das auch was ist,

01:14:04.993 --> 01:14:06.313
was erst später bekommen ist.

01:14:07.033 --> 01:14:10.453
Also laut MDN gibt es nur Cancel und Close. Okay.

01:14:11.673 --> 01:14:13.513
Was jetzt ja nicht direkt Open wäre. Nee.

01:14:15.152 --> 01:14:19.372
Genau, weil wenn es Open gäbe, könnte man ja tatsächlich auch wieder so eine

01:14:19.372 --> 01:14:20.732
generische Logik machen.

01:14:20.852 --> 01:14:24.472
Kannst ja auch nur eins von den, kann man mehrere Modaldialoge gleichzeitig aufhaben?

01:14:25.972 --> 01:14:31.112
Kann man auch, genau. Aber du könntest ja sowas machen wie, du kannst ja eine

01:14:31.112 --> 01:14:34.952
Animation drauflegen, eine CSS-Animation, dann hast du Animation-Start-Event

01:14:34.952 --> 01:14:37.552
und dann guckst du, ob das Element ein Dialog-Element ist oder so.

01:14:38.952 --> 01:14:39.912
Das geht ja schon.

01:14:42.389 --> 01:14:45.329
Aber dann ist schon zu spät. Dann ist der Fokus, glaube ich,

01:14:45.369 --> 01:14:50.549
schon weg auf dem Element, das den vorher hatte, falls du das dann auslesen wolltest.

01:14:51.529 --> 01:14:55.309
Ja, nee, also mehr so Data- und Datenmanagement-mäßig. Also wenn Dialog aufgeht,

01:14:55.389 --> 01:14:58.549
merkt ihr, was vorher den Fokus hatte. Aber das weißt du dann nicht mehr?

01:14:59.629 --> 01:15:04.989
Nee, dann nicht, weil halt die beknackten Events in der Webplattform immer so

01:15:04.989 --> 01:15:07.869
ein, guck mal, das ist gerade passiert, ist.

01:15:08.069 --> 01:15:10.709
Und was ja viel praktischer wäre, wäre, wenn es sowas wie ein,

01:15:10.809 --> 01:15:13.929
neben dem, das ist gerade passiert, auch ein, guck mal, das passiert jetzt gleich

01:15:13.929 --> 01:15:17.209
gäbe, wo man dann auch immer schön so Prevent Default drauf machen kann.

01:15:17.709 --> 01:15:19.189
Aber das ist ja nicht der Standardfall.

01:15:20.569 --> 01:15:23.929
Na gut. In meinem Universum wäre das trotzdem ganz gut möglich,

01:15:24.129 --> 01:15:28.189
weil ich gerne mal eine Web-Component habe, die so eine Abstraktion über einen

01:15:28.189 --> 01:15:32.389
Dialog ist, um einfach nur so ein paar Basics klarzumachen, irgendwie so generellen Style,

01:15:33.089 --> 01:15:36.729
dass du halt dann einen Dialog hast und dann hast du da einen Slot für Titel-Silence,

01:15:36.809 --> 01:15:39.049
Slot für den Content, einfach nur so das allerbasalste,

01:15:39.769 --> 01:15:43.689
um das halt so marginal zu umschließen und der Kollege müsste ja,

01:15:43.889 --> 01:15:47.709
der würde ja gesteuert werden über sein inhärentes Showmodel und da könnte man

01:15:47.709 --> 01:15:50.869
ja tatsächlich vor dem eigentlichen Auslösen des Showmodels,

01:15:50.989 --> 01:15:53.789
den das Teil ja rappt, ein Event schmeißen, das sagt,

01:15:54.189 --> 01:15:57.129
guck mal hier, merkt ihr mal in so einem Stack, müsste man jetzt ja tatsächlich

01:15:57.129 --> 01:15:57.929
einen Stack draus machen,

01:15:58.069 --> 01:16:01.529
weil es ja mehrere offene Dialoge gäbe, aber dann könnte man ja wirklich einen

01:16:01.529 --> 01:16:05.289
Stack aus in dem Fall ja wahrscheinlich wieder irgendwelchen We-Graphs halten

01:16:05.289 --> 01:16:10.129
auf die Elemente, die vorher den Fokus hatten und dann, wenn ein Dialog geschlossen wird, weiß man,

01:16:10.269 --> 01:16:13.669
ich gucke in dieses We-Graph rein, ob das Element noch lebt,

01:16:13.729 --> 01:16:14.809
das vorher den Fokus hatte,

01:16:15.089 --> 01:16:17.509
wenn ja, kriegt es das Ding wieder. Ja, genau.

01:16:17.869 --> 01:16:21.669
Das ist halt so, du kannst halt wirklich einfach quasi den Pfad,

01:16:21.829 --> 01:16:25.649
den Fokuspfad tracken einfach in so einem Ding.

01:16:26.869 --> 01:16:32.449
Einfach, ne? Ja, genau. Es ist eben nicht einfach. Da könnte die Webplattform

01:16:32.449 --> 01:16:34.329
ein bisschen mehr noch tatsächlich anbieten.

01:16:34.709 --> 01:16:36.709
Und das könnten die wirklich selber machen, finde ich.

01:16:37.802 --> 01:16:43.242
Genau, ich wollte noch eine Sache sagen und zwar, genau, es gibt ja bei den

01:16:43.242 --> 01:16:49.162
Fokus-Events das Related Target, also das gibt es ja schon, du kannst also quasi immer,

01:16:49.682 --> 01:16:55.182
ich glaube sowohl beim Blur-Event sehen, was als nächstes fokussiert wird und

01:16:55.182 --> 01:17:02.302
bei dem Fokus-Event umgekehrt, aber ich bekomme nicht immer ein Fokus-Event,

01:17:02.602 --> 01:17:04.642
wenn der Browser darum hantiert.

01:17:04.642 --> 01:17:09.502
Also, ich hatte einen Event-Listener auf Fokus und habe mir gedacht,

01:17:10.122 --> 01:17:12.542
damit kann ich das da vielleicht machen.

01:17:13.042 --> 01:17:19.602
Aber es gibt auch Abläufe, wo das Document Active Element zum Beispiel verändert wird.

01:17:19.762 --> 01:17:23.162
Also das, was gerade fokussiert ist, ohne dass ich ein Fokus-Event bekomme.

01:17:24.222 --> 01:17:26.622
Und das ist halt blöd und genauso.

01:17:27.722 --> 01:17:31.722
Das heißt, im Grunde kannst du nur mit so einem Request-Animation-Frame immer

01:17:31.722 --> 01:17:35.662
tracken, was Document Active Element ist. Oh, hey, das ist gut. Ja.

01:17:38.019 --> 01:17:43.699
Genau. Ja, aber da gerne, wir können da auch in unserem Community Slack eine

01:17:43.699 --> 01:17:45.779
Fokus-Management-Hilfegruppe aufmachen.

01:17:46.299 --> 01:17:48.219
Ich wollte es gerade sagen, Selbsthilfegruppe.

01:17:49.059 --> 01:17:51.499
Ja. Oder uns gute Tipps geben.

01:17:52.959 --> 01:17:59.999
Ja. Ich habe noch eine Frage zum Dialog. Animationen für das Ding, so Entry und Exit?

01:18:02.459 --> 01:18:08.759
Also Exit natürlich Exit nicht, oder? Nee, Exit geht ja nicht.

01:18:09.899 --> 01:18:14.059
Ach, geht schon, wenn du genug Gewalt anwendest und über ein paar Edge Cases hinweg siehst?

01:18:14.899 --> 01:18:19.979
Aber zumindest, also wenn es sich öffnet, da kannst du ja prima eine Animation drauflegen.

01:18:20.959 --> 01:18:25.119
Mit so Ed-Starting-Style, ne? Ja, nicht mal.

01:18:25.419 --> 01:18:34.059
Also einfach CSS-Animation, die laufen ja immer los, sobald ein Element sichtbar wird, glaube ich.

01:18:34.779 --> 01:18:39.259
Also wenn es von Display None auf Display nicht None gesetzt wird,

01:18:40.519 --> 01:18:44.959
dann läuft ja automatisch eine CSS-Animation los, die daran geknüpft ist.

01:18:46.399 --> 01:18:51.879
Und mit Starting Style geht es natürlich auch. Fände ich tatsächlich besser, weil Sprechen da.

01:18:53.519 --> 01:18:56.619
Das weiß ich nicht, ob das jetzt schon in allen Browsern angekommen ist.

01:18:56.699 --> 01:19:01.339
I don't know. Ich habe das bei mir eingebaut, also ja, doch, können alle.

01:19:03.579 --> 01:19:08.079
Sonst würde ich das ja nicht benutzen. Firefox auch hier seit 129,

01:19:08.339 --> 01:19:10.439
das war glaube ich so der letzte, der hinten dran war.

01:19:11.519 --> 01:19:13.719
Und dann wäre es halt auch nur eine Transition und alles ist gut,

01:19:13.799 --> 01:19:15.299
aber dann gibt es halt eben das Exit-Problem.

01:19:15.539 --> 01:19:19.479
Da fehlt es dann. Genau, also da, für sowas benutze ich ja sehr,

01:19:19.559 --> 01:19:22.219
sehr gerne hier die View Transition API.

01:19:23.999 --> 01:19:28.479
Dass du einfach einen Snapshot machst und dann, also ich finde die ich nutze

01:19:28.479 --> 01:19:31.259
die eben auf MPAs gerne für so Dinge auch wie.

01:19:33.428 --> 01:19:38.048
Du drückst einen Knopf und ein Dialog-Element geht auf und du hast quasi,

01:19:38.208 --> 01:19:42.448
der Knopf verwandelt sich dann als Dialog-Element, dass du quasi so Beziehungen

01:19:42.448 --> 01:19:43.548
auch schön herstellen kannst.

01:19:43.688 --> 01:19:46.648
Oder wenn du irgendwie eine Liste hast, wo du neue Elemente einfügst,

01:19:46.748 --> 01:19:48.848
die aber nicht ans Ende kommen, sondern irgendwo dazwischen,

01:19:48.948 --> 01:19:54.088
dass die dann eben ihre neue Positionen zu ihren neuen Positionen fahren und

01:19:54.088 --> 01:19:55.788
das neue Element dazwischen dann auftaucht.

01:19:56.828 --> 01:20:02.488
Das finde ich ganz cool. Es ist erstaunlich, wie weit man da kommt und was man

01:20:02.488 --> 01:20:05.828
da für Effekte erzeugen kann, indem man einfach nur sagt, ihr zwei da,

01:20:05.948 --> 01:20:06.988
ihr seid im Prinzip eins.

01:20:08.088 --> 01:20:11.908
Ja, genau. Also finde ich schon gut. Das Einzige, wo ich es manchmal dann doch

01:20:11.908 --> 01:20:14.948
wieder, also ich habe es schon auch wieder rausgebaut manchmal,

01:20:15.328 --> 01:20:24.148
weil ich finde, man merkt schon dieses kleine, aber feine Delay immer in der Interaktion.

01:20:24.148 --> 01:20:28.708
Also es ist wirklich nicht lang, aber vielleicht bin ich da auch sensibel,

01:20:28.928 --> 01:20:33.988
aber so dieses Screenshot machen, das merke ich einfach.

01:20:36.912 --> 01:20:41.812
Ach so, das schon. Also jetzt nicht die Animation an sich, die die View-Transition

01:20:41.812 --> 01:20:43.952
ist, sondern tatsächlich der kleine Hacker vorher. Genau.

01:20:44.392 --> 01:20:49.172
Also der wird vielleicht 200 Millisekunden sein oder so. Das ist aber ganz schön viel.

01:20:50.172 --> 01:20:53.692
Ja, das ist auf jeden Fall nicht nichts. Und das hat mich dann schon manchmal

01:20:53.692 --> 01:20:58.992
genervt, dass man mit irgendwas interagiert und dann erst mal nichts passiert,

01:20:59.172 --> 01:21:01.192
um dann eben so schön weich zu animieren.

01:21:01.192 --> 01:21:06.412
Und dann habe ich schon mal gesagt, das verzögert mit zu lange,

01:21:06.532 --> 01:21:07.632
ich baue es doch wieder raus.

01:21:08.532 --> 01:21:11.292
Die Frage ist natürlich, was hat die Alternative, beziehungsweise was ist so

01:21:11.292 --> 01:21:12.332
deine Performance-Baseline?

01:21:13.012 --> 01:21:16.152
Und da würde ich ja annehmen, wenn ich aus der Welt des Shep komme,

01:21:16.512 --> 01:21:21.352
wo du mit eiserner Faust regierst, da ist jetzt mal Millisekunden wirklich sehr, sehr viel.

01:21:22.332 --> 01:21:25.792
Ja. Und wenn du dich anderswo durch irgendwie so einen JavaScript-verseuchten

01:21:25.792 --> 01:21:31.592
Millionen-Dom-Nodes-Sumpf dadurch schleppst, ist das vielleicht nicht ganz so dramatisch?

01:21:32.452 --> 01:21:37.892
Naja, klar. Nee, die sind schon gut. Genau. Das hat mich nur persönlich gestört.

01:21:38.592 --> 01:21:41.512
Und muss man ja auch immer so ein bisschen gucken mit diesen Animationen,

01:21:41.732 --> 01:21:46.032
die das ja nicht früher oder später einfach nur noch auf den Keks gehen.

01:21:46.952 --> 01:21:49.312
Die müssen zack, zack schnell sein.

01:21:50.872 --> 01:21:54.412
Die müssen snappy sein und die müssen halt eben eine relevante Information kommunizieren.

01:21:54.652 --> 01:21:59.412
Genau und ich finde halt so dieses, also am besten finde ich sie eben,

01:21:59.552 --> 01:22:01.372
wenn sie so Beziehungen zeigen.

01:22:01.632 --> 01:22:03.292
Also so, wo ist was hingegangen?

01:22:05.132 --> 01:22:09.292
Woher komme ich? Also warum ist dieses Ding jetzt da? So, dafür finde ich die super.

01:22:10.592 --> 01:22:15.992
Ja, ich habe halt so ein Use Case, wo Seite lädt und wenn du noch nicht auf

01:22:15.992 --> 01:22:18.952
der Seite gewesen bist, kommt ein Tutorial-Pop-up quasi hin.

01:22:19.472 --> 01:22:21.652
Ey, du bist hier, klick da drauf, klick da drauf, klick da drauf.

01:22:22.392 --> 01:22:25.232
Und das ist tatsächlich auch irgendwie ganz sinnvoll, das zu animieren,

01:22:25.312 --> 01:22:27.872
obwohl es halt instantan da ist, also im Prinzip ab Sekunde null.

01:22:27.872 --> 01:22:31.212
Aber trotzdem, um zu erklären, pass auf, dir wurde jetzt gerade eine Message

01:22:31.212 --> 01:22:34.832
vorgesetzt, die ein distinktes UI-Element ist.

01:22:34.912 --> 01:22:37.332
Das hilft total bei der Orientierung, weil jetzt hast du den ganzen Kreml im

01:22:37.332 --> 01:22:40.712
Hintergrund und ja, da ist dann ein Background drüber und der blurrt das, aber trotzdem...

01:22:41.999 --> 01:22:46.239
Das ist nicht die Standardansicht von diesen Dings. Ja, genau, genau.

01:22:46.399 --> 01:22:49.819
Wenn man das nicht hat, dann wird halt so dieses anfängliche,

01:22:49.879 --> 01:22:54.199
ich sitze vor einem komplizierten UI-Disorientierungsding noch viel, viel schlimmer. Ja.

01:22:54.919 --> 01:22:57.699
Aber beileide muss man echt nicht alles animieren. Nee, nee, genau.

01:22:57.999 --> 01:23:01.479
Das ist so ein zweischneidiges Schwert. Also es ist irgendwie nett,

01:23:01.699 --> 01:23:06.519
aber dann auch irgendwann kann es auch nerven, wenn man einfach da schnell produktiv

01:23:06.519 --> 01:23:08.779
durch die UI sich arbeiten will.

01:23:09.339 --> 01:23:12.279
Also es ist halt ein Schwertschwert, nicht? Es ist halt einfach ein Schwert.

01:23:13.439 --> 01:23:16.259
Wenn du das halt zielgerichtet einsetzt, super, dann kannst du dich durchsetzen.

01:23:16.379 --> 01:23:19.559
Aber du kannst dich halt eben auch doll damit selbst Achtung,

01:23:19.639 --> 01:23:20.519
ins eigene Fleisch schneiden.

01:23:21.699 --> 01:23:26.419
Das stimmt. Genau, ich habe noch einen Artikel verlinkt von dem Josh Comeau,

01:23:26.519 --> 01:23:27.599
der immer tolle Sachen macht.

01:23:27.859 --> 01:23:31.039
Und der hatte auch noch mal was so Starting Style, was ich irgendwie verlinkenswert

01:23:31.039 --> 01:23:33.779
finde, geschrieben. Ja, mit der Spezifizität.

01:23:33.999 --> 01:23:37.499
Das habe ich gelesen und habe mir so gedacht, das stimmt und das ist mir auch völlig egal. Ja.

01:23:39.859 --> 01:23:44.039
Genau, ja. Das ist auf jeden Fall. So sollte man wissen. Ja, genau.

01:23:45.839 --> 01:23:49.779
Die Lektur ist jetzt auch nicht super lang. Und er hat aber auch tolle,

01:23:49.859 --> 01:23:53.199
schöne Demos und so. Und das ist echt nett. Mhm.

01:23:54.953 --> 01:23:59.833
Genau. Ja, hast du noch Zeit? Ja, komm hier, wir haben noch ein richtiges Thema

01:23:59.833 --> 01:24:00.973
und dann haben wir noch unsere Lightning Round.

01:24:01.113 --> 01:24:04.913
Das machen wir noch. Okay, genau. Also wir sind auch gestoßen auf ein Update

01:24:04.913 --> 01:24:10.993
der Browser, wie sie den ClearSiteData HTTP-Header benutzen.

01:24:11.153 --> 01:24:15.473
Und du meintest, du benutzt den nicht oder hast den noch nicht benutzt oder so?

01:24:16.373 --> 01:24:19.813
Das sind HTTP-Header. Ich bin so ein JavaScript-Affe. Ich nehme solche Sachen

01:24:19.813 --> 01:24:22.453
hin und wieder mal zur Kenntnis. Okay, genau.

01:24:22.733 --> 01:24:25.633
Aber jedes Mal, wenn ich mich bei irgendwem reinsetze, irgendwie so Security

01:24:25.633 --> 01:24:28.393
oder Performance, es gibt jetzt hier diese HTTP, da denke ich die ganze Zeit

01:24:28.393 --> 01:24:31.553
nur, Galaxy Brain habe ich alles nie gesehen, deswegen. Ja.

01:24:32.613 --> 01:24:36.173
Naja, auf jeden Fall, den gibt es auch schon eine Weile und der ist sehr praktisch,

01:24:36.253 --> 01:24:40.993
weil du kannst damit vom Server aus dem Client signalisieren,

01:24:41.753 --> 01:24:47.273
dass er bestimmte Persistierungs-Buckets löschen soll.

01:24:48.073 --> 01:24:52.593
Also Cache, Local Storage, was gibt es noch?

01:24:52.753 --> 01:24:58.913
Cookies und eben auch Service Worker, Deregistrierung kannst du auch damit erzwingen.

01:24:59.853 --> 01:25:02.413
Und eben neuerdings gibt es ja diesen Back Forward Cache.

01:25:03.573 --> 01:25:08.313
Das ist ja so, dass wenn du auf einer Seite bist und du bewegst dich weiter

01:25:08.313 --> 01:25:09.733
und drückst an den Backbutton,

01:25:09.933 --> 01:25:15.193
dann hat der Browser die alte Seite erst quasi nur weggeräumt und nicht kaputt

01:25:15.193 --> 01:25:18.953
gemacht und kann die dann aus der Schublade ziehen und dann hast du quasi eine

01:25:18.953 --> 01:25:21.393
instantane Navigation zurück,

01:25:21.653 --> 01:25:25.213
als dass die eben nochmal von vorne alles zusammenstritten muss.

01:25:26.193 --> 01:25:29.333
Und das ist jetzt als Update eben auch

01:25:29.333 --> 01:25:33.053
da reingewandert, dass auch der Backforward-Cache gelöscht werden kann.

01:25:34.617 --> 01:25:39.137
Und ich finde das super, also wir benutzen das auch, wenn irgendwie Kunden Probleme haben oder so,

01:25:40.017 --> 01:25:46.897
dann haben wir so eine Support-Seite, wo zum einen wir dann auch genau in Erfahrung

01:25:46.897 --> 01:25:49.437
bringen können, was für ein User-Agent die haben und wo wir denen dann eben

01:25:49.437 --> 01:25:52.317
auch so einen Knopf bieten, wo die draufdrücken können,

01:25:52.557 --> 01:25:55.777
um dann ihre Browser-Daten zu löschen.

01:25:55.977 --> 01:26:02.017
Das ist ja dann je nach Browser nicht immer so einfach für Kunden oder User. Ah, ich verstehe.

01:26:02.237 --> 01:26:08.377
Also du hast normale Nutzer und normalerweise müsste der Telefonsupport ihnen

01:26:08.377 --> 01:26:10.977
erklären, wie sie ihre ganzen Daten löschen.

01:26:11.057 --> 01:26:13.797
Viel Erfolg bei durchschnittlichen Menschen an irgendwelchen Telefonen.

01:26:13.797 --> 01:26:17.617
Das ist in jedem Browser anders und dann auf iOS so. Neue Version.

01:26:17.637 --> 01:26:18.797
Da muss man in die Einstellung.

01:26:18.957 --> 01:26:20.957
Das ist das Skript, die Telefon läutet und nicht geupdatet.

01:26:21.677 --> 01:26:24.657
Und dann hast du einfach so einen Browser, der nicht einfach nur löscht meinen

01:26:24.657 --> 01:26:29.997
Account ist, sondern im Prinzip wie man das ja von der gemeinen Smartphone-App ja auch kennt.

01:26:30.497 --> 01:26:34.037
Kill den Cache. Und alles, was das Ding macht, ist die Leute einmal mit dem

01:26:34.037 --> 01:26:35.337
Header durch die Gegend zu ruten.

01:26:35.877 --> 01:26:39.737
Genau, also der Browser kriegt den Header und in dem Moment das ist so wie so

01:26:39.737 --> 01:26:42.217
ein Blitzdings für den von Men in Black.

01:26:43.177 --> 01:26:46.637
Und danach musst du eben quasi alles neu machen.

01:26:47.017 --> 01:26:52.557
Aber manchmal shippen wir ja auch Kram, vielleicht der Unstardue,

01:26:53.017 --> 01:26:54.077
wo wir irgendwas kaputt machen.

01:26:54.657 --> 01:26:59.157
Da kannst du dann eben auch einfach mal eine Zeit lang diesen Header schicken.

01:26:59.297 --> 01:27:02.377
Dann wird deine Seite zwar langsam, aber dann werden eben auch all die ganzen,

01:27:03.057 --> 01:27:09.077
weiß ich nicht, Zombie-Service-Worker oder Dauergecashen, weil du den Cache-Header

01:27:09.077 --> 01:27:12.897
leider falsch gesetzt hast, Ressourcen dann evokt.

01:27:13.837 --> 01:27:18.197
Ja, nee, das ist total brillant und sollte tatsächlich Best Practice bei allem sein.

01:27:19.809 --> 01:27:23.649
Weil wenn es nicht geht, starte halt neu und lösche den Cache. Ja, genau.

01:27:23.889 --> 01:27:26.529
Ich habe nie darüber nachgedacht, wie unmöglich das halt für normale Menschen

01:27:26.529 --> 01:27:28.709
sein muss. Ja, super schwer.

01:27:30.129 --> 01:27:33.089
Oder halt eben, was für ein Aufriss das ist, wenn du tatsächlich da irgendwie

01:27:33.089 --> 01:27:35.849
der Support bist für eine Webseite, das halt eben zu bewerkstelligen.

01:27:36.169 --> 01:27:38.949
Und jetzt musst du ihnen halt nur sagen, klick auf Account, wenn es noch geht.

01:27:39.469 --> 01:27:41.189
Ansonsten diktiere ich dir eben eine Kurz-URL.

01:27:42.269 --> 01:27:45.949
Die rufst du auf und dann badabing, badabong, bist du zwar ausgeloggt,

01:27:45.989 --> 01:27:48.289
aber dafür ist halt eben auch alles gesettet und dann guck, ob das Problem noch

01:27:48.289 --> 01:27:49.729
weiter besteht. Genau, ja.

01:27:51.069 --> 01:27:52.569
Das ist absolut brillant.

01:27:54.769 --> 01:27:58.289
Schöne Idee haben sie da. Joink. Ja. Finde ich auch.

01:27:58.829 --> 01:28:03.109
Und die Neuerung war jetzt was genau? Dass der Backforward-Cache da jetzt eben

01:28:03.109 --> 01:28:04.189
quasi auch gelöscht wird.

01:28:04.989 --> 01:28:09.049
Aber im Grunde das ist jetzt an sich nicht so der totale Kracher,

01:28:09.249 --> 01:28:14.349
aber wir haben das jetzt einfach nur, hatten wir einfach mal als Aufhänger genommen, den zu besprechen.

01:28:15.669 --> 01:28:20.189
Ja, und du hast ja auch einfach so die Wildcard, die du angeben kannst für Kill

01:28:20.189 --> 01:28:21.049
halt eben einfach alles.

01:28:21.469 --> 01:28:25.649
Genau, auch für so, wer weiß, was in Zukunft noch so an Dingen kommt.

01:28:26.369 --> 01:28:30.469
Du machst eine Wirecard und dann wird das alles erfasst. Ach,

01:28:30.489 --> 01:28:32.649
und das könnte auch so eine super Checkbox beim Lockout sein.

01:28:33.589 --> 01:28:38.889
Normalen Lockout oder Lockout mit Atomisieren. Also du hast dich irgendwie eingeloggt

01:28:38.889 --> 01:28:41.009
auf irgendeinem Rechner, der nicht deiner ist.

01:28:41.489 --> 01:28:45.709
Hast du das im privaten Fenster aufgemacht? Nein, und das merkst du erst hinterher.

01:28:46.869 --> 01:28:51.009
Ja. Nee, stimmt. Genau. Ja. Hast recht, auch eine gute Idee.

01:28:51.869 --> 01:28:54.189
Super, also noch besser ist natürlich, wenn man sich nicht reinloggen muss,

01:28:54.269 --> 01:28:59.009
aber wenn schon... Aber man muss dann auch das Cookie-Konzent immer wieder wegklicken.

01:29:02.398 --> 01:29:07.238
Ich weiß nicht, warum wir zwei, Shep, als jetzt so Macher von Internetseiten,

01:29:07.418 --> 01:29:10.618
noch nicht an Laternenfählen hängen. Wieso?

01:29:11.478 --> 01:29:13.958
Ja, wir sind ja von außen nicht zu unterscheiden von den Leuten,

01:29:13.978 --> 01:29:15.798
die alles mit Werbung und Cookie-Bannern vollknallen.

01:29:16.818 --> 01:29:20.738
Was machst du? Ja, ich schreibe den ganzen Tag JavaScript. Ja, Kopf ab, klar.

01:29:21.918 --> 01:29:24.218
Ich verstehe nicht, warum die Normies uns noch laufen lassen.

01:29:25.078 --> 01:29:27.218
Tja, weil wir uns einfach verstecken vor denen.

01:29:28.038 --> 01:29:30.798
Du nicht, dich kann man auf der Konferenzbühne...

01:29:31.838 --> 01:29:34.518
Irgendwelche Bühnen, also bei mir kannst du auch sagen, gluck,

01:29:34.578 --> 01:29:36.158
gluck, das war's mit dem Blutinhalt jetzt für dich.

01:29:37.858 --> 01:29:41.798
Nichts leichter als das. Ich frage mich auch, warum die das nicht machen. Egal.

01:29:42.578 --> 01:29:46.818
So, machen wir noch eine letzte Lightning Round mit lustigen Features in CSS

01:29:46.818 --> 01:29:48.978
und JavaScript und hast du nicht gesehen, machen wir.

01:29:50.558 --> 01:29:55.118
Genau, das Erste, was wir hier haben, ist Random Funktion in JavaScript,

01:29:55.718 --> 01:29:59.218
nee, in CSS, kriegst du halt eine Random Zahl raus.

01:30:00.538 --> 01:30:05.018
Finde ich gut. Wenn man, weiß ich nicht, einen Sternenhintergrund mal machen

01:30:05.018 --> 01:30:07.658
möchte oder, weiß nicht, wofür würdest du es noch benutzen?

01:30:08.618 --> 01:30:11.378
Vielleicht Partikeleffekte? Ich wollte gerade sagen, so Animationen,

01:30:11.418 --> 01:30:13.878
wo du halt irgendwie sagen musst, du sollst halt in irgendwelche Richtungen fliegen.

01:30:14.658 --> 01:30:18.278
Und das ist halt nicht unmöglich,

01:30:18.538 --> 01:30:21.598
ohne so eine Random-Funktion, aber es ist halt extrem schwierig,

01:30:21.758 --> 01:30:25.658
weil man halt irgendwie sich seinen eigenen Zufalls- oder Pseudo-Zufalls-Generator

01:30:25.658 --> 01:30:27.838
bauen muss, indem man irgendwas Modulo, irgendwas anderes sind,

01:30:27.858 --> 01:30:29.718
aber wo nimmt man die beiden anderen Werte her?

01:30:29.998 --> 01:30:32.638
Alles extrem schwierig und mit einfach random ist besser.

01:30:32.998 --> 01:30:36.798
Genau, also ich glaube früher hat man dann, ich weiß nicht, hat CSS oder Sass,

01:30:36.978 --> 01:30:39.218
hat das eine random Funktion? Das weiß ich gar nicht.

01:30:39.838 --> 01:30:44.778
Aber das ist ja auch nur so mittelrandom, weil das ja halt eben dann vorgerechnet ist.

01:30:44.878 --> 01:30:49.778
Im Idealfall ermittelst du es ja aus irgendwelchen Quellen. Ja.

01:30:50.718 --> 01:30:57.238
Und das ist halt im Idealfall so das DOM drumherum, aber auch das ist ja nicht besonders einfach.

01:30:57.398 --> 01:31:00.498
Oder ist das auf einmal einfacher geworden, Shep? Nein.

01:31:01.624 --> 01:31:04.384
Ich dachte, dieses Tree-Counting macht genau das. Ach so, das,

01:31:04.644 --> 01:31:08.044
okay, diese Steilvorlage habe ich natürlich nicht verwandelt.

01:31:08.984 --> 01:31:16.984
Genau, es gibt noch Tree-Counting-Functions. Das ist dann sowas wie Sibling-Count und Sibling-Index.

01:31:17.664 --> 01:31:24.084
Da hatten wir auch mal ganz kurz mit dem Adam Argyle vor ein paar Wochen gesprochen

01:31:24.084 --> 01:31:29.644
drüber, dass man eben die quasi Kind-Elemente, die auf gleicher Ebene sind,

01:31:30.384 --> 01:31:33.684
durchzählen kann und dann eben diesen Index nutzen kann,

01:31:33.904 --> 01:31:39.944
um den in Math-Funktionen weiter zu verarbeiten oder, keine Ahnung,

01:31:40.104 --> 01:31:44.304
sowas wie einen List-Counter zu machen, wofür es ja die Counter schon gibt.

01:31:44.544 --> 01:31:46.364
Aber so theoretisch könnte man es damit auch machen.

01:31:46.824 --> 01:31:53.584
Und man kann auch eben den Sibling-Count abfragen und könnte dann vielleicht

01:31:53.584 --> 01:31:58.604
andere Layouts anwenden oder also in einem bestimmten Kontext.

01:32:00.733 --> 01:32:03.953
Sicherlich nicht unprachlich. Und der Counter-Counter ist ja tatsächlich,

01:32:04.113 --> 01:32:06.913
da kriegst du ja keine Zahlen raus, die du mit Kalk irgendwie verarbeiten kannst.

01:32:06.993 --> 01:32:08.593
Das ist ja irgendwie alles so String-Krams, ne?

01:32:10.173 --> 01:32:14.553
Doch, das geht sch- Ja, genau. Wir hatten da doch mal was.

01:32:16.753 --> 01:32:20.073
Irgendwas war da. Naja, jedenfalls, wenn wir jetzt wichtige Sachen kriegen,

01:32:20.193 --> 01:32:24.493
wie Zufall, pass auf, wir kriegen in CSS die Möglichkeit, zufällige Zahlen zu

01:32:24.493 --> 01:32:28.573
erzeugen und wir kriegen in JavaScript die Möglichkeit, Sachen zu addieren.

01:32:29.353 --> 01:32:31.313
Das ist Fortschritt. Yes!

01:32:32.133 --> 01:32:35.593
Jawohl. Das sind die einfachen Dinge im Leben. Nicht wahr?

01:32:35.813 --> 01:32:38.733
Die weniger einfachen Dinge im Leben sind zum Beispiel URL-Patterns.

01:32:38.833 --> 01:32:41.573
Wenn man sich seinen kleinseitigen Router selber baut, ihr kennt das,

01:32:42.113 --> 01:32:44.653
muss man sich da halt irgendwie selber seinen URL-Pass herausmachen,

01:32:44.733 --> 01:32:48.693
dass man irgendwie sowas schreiben kann wie foo.com slash doppelpunkt books

01:32:48.693 --> 01:32:51.533
doppelpunkt id und braucht er halt eben nicht mehr,

01:32:51.673 --> 01:32:55.913
weil es mittlerweile Webstandard-URL-Pattern-API kann man halt wunderbar solche

01:32:55.913 --> 01:33:00.133
Kisten mitmachen und da kann man halt, wie gesagt, seinen kleinseitigen oder

01:33:00.133 --> 01:33:04.113
wahrscheinlich auch serverseitigen Router mitbauen oder man kann halt eben das ganz allgemein zum,

01:33:05.033 --> 01:33:07.193
Parsen in Anführungszeichen von URLs verwenden.

01:33:09.088 --> 01:33:13.488
Sehr cool. Ist jetzt in Firefox gelandet und in Safari 26 und damit,

01:33:13.588 --> 01:33:14.508
glaube ich, in allen Browsern.

01:33:15.168 --> 01:33:17.188
Genau. Und alle können das. Die können einem halt, wie gesagt,

01:33:17.268 --> 01:33:22.088
dann so sagen, jup, ist irgendwie der Subfahrt Buchsch mit der ID 42 und passt

01:33:22.088 --> 01:33:24.748
halt eben sonst auch noch so anderen lustigen URL-Krempel raus,

01:33:24.808 --> 01:33:28.028
wie zum Beispiel welcher Host-Protokoll-Port der übliche Kram halt. Ja.

01:33:28.708 --> 01:33:31.448
Also wundert man sich halt, warum gab es das vorher nicht? Gute Frage,

01:33:31.568 --> 01:33:32.988
ja. Jetzt gibt es das. Voll gut. Ja.

01:33:34.388 --> 01:33:37.248
Genau. Und ich erinnerte mich auch, dass das eben in so diversen anderen APIs,

01:33:37.488 --> 01:33:41.448
die was mit URLs zu tun haben, auch hineinwandert, so als Primitive.

01:33:41.728 --> 01:33:44.508
Aber ich erinnerte mich dann leider nicht mehr, welche das war,

01:33:44.568 --> 01:33:46.388
wo ich das gesehen habe. Aber genau.

01:33:47.568 --> 01:33:51.188
Ist ja nur eine Frage der Zeit, wenn man jetzt wirklich so ein Standard-Pattern-Syntax

01:33:51.188 --> 01:33:54.188
hat, die ja auch vorher schon de facto Standard war. Ja.

01:33:55.248 --> 01:33:58.428
Also, ne, gibt's bestimmt irgendwo, haben wir nur vergessen.

01:33:59.288 --> 01:34:03.668
Genau, dann hat der Firefox was Interessantes Neues in CSS gebracht,

01:34:03.788 --> 01:34:09.088
nämlich die Doppelpunkt-Heading-Pseudoklasse, die alle Headings,

01:34:09.348 --> 01:34:12.288
egal welchen Levels, gleichermaßen erfasst.

01:34:12.648 --> 01:34:14.568
Auch nicht unpraktisch, würde ich sagen.

01:34:16.290 --> 01:34:19.590
Mal gucken, ob das dann in allen Browsern landet.

01:34:19.730 --> 01:34:23.370
Also ist jetzt so, ist nicht unbedingt nötig, aber ist irgendwie dann schon

01:34:23.370 --> 01:34:26.830
praktisch, weil sonst musst du ja so quasi ist, Klammer auf,

01:34:27.150 --> 01:34:29.910
H1, H2, H3 und so weiter machen, geht auch.

01:34:30.950 --> 01:34:33.090
Aber so ist vielleicht dann irgendwie noch netter.

01:34:34.450 --> 01:34:38.070
Ich bin ja weiterhin der Meinung, dass BEM das Problem auch ganz gut löst.

01:34:39.070 --> 01:34:43.810
Und dann hast du halt nicht irgendwie, ist das jetzt irgendwie ein quasi Klassenselektor,

01:34:43.970 --> 01:34:46.390
dann muss ich ja meinen anderen Selektor länger machen, Black X.

01:34:48.170 --> 01:34:51.670
Aber ich denke, für viele, die das halt eben nicht so durchziehen,

01:34:51.850 --> 01:34:53.470
ist das dann trotzdem eine super Erleichterung.

01:34:53.910 --> 01:34:56.490
Also, gib mal ruhig rüber. Ja.

01:34:59.330 --> 01:35:04.970
So, Field Sizing in CSS macht, dass meine Text Area automatisch größer wird, wenn ich reintippe.

01:35:05.190 --> 01:35:08.530
Genau. Ich glaube, das gab es nur in den Chromiums.

01:35:10.730 --> 01:35:15.570
Und wir haben es in der Tag Preview von Safari gesehen.

01:35:15.850 --> 01:35:20.370
Jetzt weiß ich natürlich nicht, ob das dann in Safari 26 gelandet ist.

01:35:21.230 --> 01:35:24.650
Es ist ... Nee, genau, ist noch nicht drin.

01:35:25.930 --> 01:35:29.550
Genau, und mit Firefox ... Wie sieht es bei Firefox aus? Der hat es auch noch

01:35:29.550 --> 01:35:32.010
nicht. Der hat das, aber ...

01:35:33.907 --> 01:35:38.727
Hat er nicht. Gibt nur einen Bug. Aber egal, ist ja was, was möglicherweise,

01:35:38.987 --> 01:35:41.207
also eine Text-Area-Scrollen ist jetzt nicht die größte Zumutung.

01:35:41.427 --> 01:35:44.847
Nee, man hat ja immer diese Anfasser unten rechts, auch wo man die dann irgendwie

01:35:44.847 --> 01:35:46.787
größer ziehen kann, wenn man möchte.

01:35:47.367 --> 01:35:50.187
Ist halt ein nettes Extra, das man einbauen kann, wenn man will.

01:35:52.107 --> 01:35:55.727
Genau, da haben wir was Großes. Das große Thema, dass wir beide sagen,

01:35:55.827 --> 01:35:58.167
das darf noch ein bisschen nachreifen, ehe wir uns reinfressen.

01:36:00.047 --> 01:36:04.667
Anchor-Positioning. Also im Prinzip nicht Position absolut, Left hast du nicht

01:36:04.667 --> 01:36:08.167
gesehen, sondern A-Element klemmt dich an dieses andere Element dran,

01:36:08.707 --> 01:36:11.527
Offset hast du nicht gesehen. So ungefähr.

01:36:12.987 --> 01:36:16.327
Klingt einfach, ist sehr viel komplizierter, aber das ist so grob die Idee, ne?

01:36:16.447 --> 01:36:19.427
Genau, also die Demos, die haben wir ja wahrscheinlich alle schon gesehen,

01:36:19.547 --> 01:36:24.447
also es gibt schon echt ein paar coole Sachen, sowas wie irgendwie, dass in einem Menü,

01:36:25.467 --> 01:36:30.607
möchte man ja gerne vielleicht, dass so der selektierte Menüpunkt vielleicht

01:36:30.607 --> 01:36:35.787
unterstrichen ist, und wenn man dann das nächste anklickt und die Seite scrollt dahin,

01:36:36.027 --> 01:36:41.207
dass das dann eben nicht so ruckartig dann markiert wird,

01:36:41.347 --> 01:36:45.227
sondern dass vielleicht der Strich da drunter dahin wandert und den könnte man

01:36:45.227 --> 01:36:54.087
mit Anker Positioning eben an diese Menü links zum Beispiel koppeln und kann dann die Anker,

01:36:54.227 --> 01:36:57.647
also das Referenz Element wechseln und das eben animieren.

01:36:58.227 --> 01:37:02.207
So, das geht oder ich habe auch gesehen, so diese wenn du so,

01:37:03.527 --> 01:37:06.987
Flussdiagramme machst, wo so Pfeile von einer Box in die nächste gehen und so,

01:37:07.047 --> 01:37:12.147
das haben auch Leute dann eben mit Anker Positioning mit quasi zwei Ankerpunkten

01:37:12.147 --> 01:37:14.147
gemacht und das ist schon cool.

01:37:14.607 --> 01:37:16.687
Also undenkbar früher in CSS.

01:37:18.127 --> 01:37:21.167
Ja, das hat man früher halt eben mit großem JavaScript-Aufwand gemacht und wenn

01:37:21.167 --> 01:37:23.767
das dann irgendwie nicht komplett rucklig war, war man sehr beeindruckt.

01:37:24.547 --> 01:37:28.247
Und das wird dann damit wieder schön einfach. Das heißt, dann fällt es wieder

01:37:28.247 --> 01:37:31.707
außer Mode und wir machen ja jetzt eben halt alle Liquid Glass. Korrekt.

01:37:35.311 --> 01:37:41.031
Und dann gibt es ja noch den großen Formkreis von Scroll-Driven Animations im weitesten Sinne.

01:37:42.911 --> 01:37:45.871
Die jetzt auch in Safari 26 gelandet sind, ne?

01:37:46.211 --> 01:37:51.171
So ist es. Das typische Ding, man kennt das halt auch von irgendwelchen sehr fancy Produktseiten.

01:37:51.291 --> 01:37:54.391
Je weiter ich runterscrolle, umso mehr dreht sich das iPhone,

01:37:54.491 --> 01:37:55.411
das da auf dem Bildschirm ist.

01:37:55.971 --> 01:37:59.851
Ohne halt eben mit JavaScript darum zu friemeln, sondern das halt eben auch

01:37:59.851 --> 01:38:04.191
deklarativ per CSS mit den Sprachmitteln von Animation. Ja.

01:38:05.311 --> 01:38:07.511
Genau. Leider auch noch nicht in Firefox.

01:38:09.071 --> 01:38:14.511
Aber ich weiß gar nicht, wir hatten ja mal kurz über Interop gesprochen, ob das war das?

01:38:14.531 --> 01:38:17.491
In Firefox ist es drin, aber hinter einem Fleck.

01:38:18.131 --> 01:38:22.731
Also es ist noch nicht reif, aber es ist zumindest da.

01:38:24.651 --> 01:38:27.931
Ich gucke mal gerade, was in Interop 2025 drin ist.

01:38:28.031 --> 01:38:30.871
Also wir hatten es ja eingangs erwähnt, dass es da Dinge gibt,

01:38:31.251 --> 01:38:35.231
wo die Browser-Steller gesagt haben, das kriegen wir, da arbeiten wir dran,

01:38:35.351 --> 01:38:39.711
dass wir das alle in unseren Browsern bis Ende 2025 drin haben.

01:38:40.291 --> 01:38:44.431
Genau, da ist Anchor-Positioning drin. Also insofern keine Überraschung,

01:38:44.511 --> 01:38:49.611
dass es irgendwann hier in unseren Neues in Browsern Sendungen auftaucht.

01:38:51.351 --> 01:38:57.091
Genau, URL-Pattern ist da auch drin, View-Transitions ist auch drin,

01:38:57.431 --> 01:39:00.491
genau, Score-Driven-Animations nicht, genau, das heißt aber,

01:39:00.671 --> 01:39:05.231
dass View-Transitions auch bis Ende des Jahres idealerweise im Firefox sein werden.

01:39:08.368 --> 01:39:10.808
Also halt die Same-Document, nicht die Cross-Document-Dinger,

01:39:10.908 --> 01:39:15.168
ne? Ja. Genau, die ist ja nochmal ein eigenes Ding. Ja.

01:39:16.488 --> 01:39:20.788
Ja, cool. Ja, vor allen Dingen gut finde ich, dass wir dann wirklich auch Addscope

01:39:20.788 --> 01:39:22.788
dann am Ende überall drin haben. Ja, ne?

01:39:23.308 --> 01:39:25.288
Weil dann kann man nämlich wirklich hingehen und kann das machen,

01:39:25.348 --> 01:39:30.248
was du eh schon die ganze Zeit tust, nämlich sagen, der ganze kleinseitige Lab-Component-Bullshit

01:39:30.248 --> 01:39:31.308
kann mir mal gestohlen bleiben.

01:39:31.648 --> 01:39:34.568
Machst du einfach ein Template, machst ein Script-Tag rein,

01:39:35.188 --> 01:39:37.948
Document, Current-Script, Parent-Element, da hängst du ein Event-Listener drauf,

01:39:37.948 --> 01:39:41.048
Ende aus Mickey Mouse, machst einen Style-Block rein, machst du Addscope um

01:39:41.048 --> 01:39:46.168
alles drumherum und dann hast du 90% von dem, was du von deinem fancy Komponentenmodell

01:39:46.168 --> 01:39:49.388
brauchst, für nix, für null, für nada.

01:39:50.008 --> 01:39:55.848
Und du lädst vielleicht dann auch weniger CSS, zumindest so in der klassischen

01:39:55.848 --> 01:40:01.428
Machart, bei den SPA Frameworks wird das ja auch alles immer so gebundelt.

01:40:03.048 --> 01:40:08.328
Das ist in der Fall komplett anderes. Das ist ja, also du brauchst bei diesen

01:40:08.328 --> 01:40:11.848
Single-Page-Application-Frameworks, du würdest ja am Ende notwendigerweise das

01:40:11.848 --> 01:40:14.768
gleiche Template und die gleichen Styles und das gleiche Scriptzeug schreiben.

01:40:15.068 --> 01:40:17.288
Weil du hast endlich viele Elemente,

01:40:17.348 --> 01:40:19.468
die du stylen willst, endlich viele Interaktionen, die du umsetzen willst.

01:40:20.108 --> 01:40:23.688
Und du schleppst halt immer eine, wie auch immer geartete, stützende Runtime

01:40:23.688 --> 01:40:25.308
mit dir rum und die wird halt eben ersetzt.

01:40:25.708 --> 01:40:28.848
Ja, aber es ist trotzdem ein Quatsch, was ich erzählt habe, weil wenn du die

01:40:28.848 --> 01:40:33.708
Styles direkt in einem Element drin hast und du hast von den Elementen 100 Stück,

01:40:33.708 --> 01:40:36.208
dann würdest du ja auch hundertmal diesen gleichen Style shippen,

01:40:36.248 --> 01:40:40.028
das wäre dann irgendwie auch nicht ideal. Ja, ja, ja.

01:40:42.986 --> 01:40:47.206
Egal, aber wir haben auf jeden Fall ganz viele tolle neue Sachen zum mit rumhantieren.

01:40:47.706 --> 01:40:53.166
Ich bin sehr zufrieden. Ich fülle auch immer aus hier bei den State of irgendwas,

01:40:53.626 --> 01:40:55.626
wenn es nicht gerade State of JS ist.

01:40:56.006 --> 01:40:59.446
Ich wollte es gerade sagen, du kannst mir nicht erzählen, dass du diese Umfrage

01:40:59.446 --> 01:41:01.926
ausgefüllt hast, wenn ich schon nach der dritten Seite aufgegeben habe.

01:41:01.926 --> 01:41:06.426
Ich habe die aufgemacht und habe nur gedacht so, nee, ich mache die wieder zu.

01:41:06.686 --> 01:41:09.426
Das ist also alles so sehr esoterisch.

01:41:10.066 --> 01:41:13.746
Nö, aber bei den anderen, so HTML und CSS, da schreibe ich auch immer rein.

01:41:14.506 --> 01:41:17.886
Da kommt immer am Ende die Frage, wie zufrieden bist du eigentlich so mit allem?

01:41:18.406 --> 01:41:20.766
Dann schreibe ich immer rein, passt, alles cool.

01:41:21.966 --> 01:41:25.466
Also ich finde, ist auch so. Es gibt immer irgendwas, was man machen kann,

01:41:25.626 --> 01:41:28.706
Aber so im Großen und Ganzen ist schon ganz, ganz nett.

01:41:29.766 --> 01:41:35.306
Ja, absolut. Ich sehe halt auch komplett ein, also ich könnte stundenlang lamentieren,

01:41:35.446 --> 01:41:38.906
aber ich sehe halt eben auch ein, dass ich da exakt nicht der Normalfall bin

01:41:38.906 --> 01:41:42.226
und dass meine ganzen Probleme sich ausschließlich ähm.

01:41:44.008 --> 01:41:47.448
Dass die ihre Ursache in mir haben, weil ich halt eben unvernünftiges Zeug auf

01:41:47.448 --> 01:41:50.768
unvernünftige Weise gerne machen möchte, weil ich das so für richtig halte.

01:41:52.148 --> 01:41:55.168
Aber die normalen Menschen sind, glaube ich, wirklich sehr gut von dem bedient,

01:41:55.268 --> 01:41:56.488
was der Browser so liefert.

01:41:57.888 --> 01:41:59.928
Das Problem ist halt immer, dass sie alle mit

01:41:59.928 --> 01:42:04.188
einem riesigen Rucksack im JavaScript-Framework auf die Welt kommen. Ja.

01:42:04.928 --> 01:42:09.608
Und wenn man sie davon befreien könnte, hätte es es noch besser.

01:42:10.128 --> 01:42:13.088
Genau. Und so generell bei so Features, da finde ich halt auch oft,

01:42:13.748 --> 01:42:17.048
Also, ich weiß nicht, Container-Queries wollten alle haben.

01:42:17.748 --> 01:42:19.748
Ja, sehe ich die so oft? Ich weiß es nicht.

01:42:21.368 --> 01:42:27.848
Also, Scroll-Driven-Animations, alle geil drauf. Werden die so viel benutzt? I don't know.

01:42:28.868 --> 01:42:32.748
Gleiches gilt hier für dieses neue Layout-Dings, was irgendwie,

01:42:33.228 --> 01:42:36.648
wo die Masonry Masonry, ja.

01:42:37.408 --> 01:42:42.388
Also, das braucht kein Schwein, ja, aber alle sind, alle machen da jetzt Druck,

01:42:42.528 --> 01:42:43.508
dass das irgendwie kommt.

01:42:44.708 --> 01:42:48.368
Ich finde, das passiert häufig. Also diese ganz großen Dinger,

01:42:48.548 --> 01:42:51.748
wo ganz viele Jusers sagen so, boah, ich brauche das unbedingt,

01:42:51.988 --> 01:42:54.388
sonst sterbe ich auf der Stelle und dann kommt es raus und.

01:42:56.459 --> 01:42:59.739
Keiner benutzt. Du, äh, Shep, wir sind ja nun auch schon ein bisschen länger

01:42:59.739 --> 01:43:02.639
dabei, aber du erinnerst dich an, was wir damals für einen Aufriss betrieben

01:43:02.639 --> 01:43:04.579
haben, um Runde Ecken zu kriegen. Mhm.

01:43:05.159 --> 01:43:09.219
Ja. Ja? Und dann kam, äh, dann kam hier, äh, Flat Design.

01:43:10.639 --> 01:43:14.559
Genau. Und das ist ja irgendwie auch logisch, ne? Du hast irgendwie so ein Pattern,

01:43:14.619 --> 01:43:17.639
das ist halt populär, weil, äh, Herdentrieb hast du nicht gesehen. Mhm.

01:43:18.139 --> 01:43:21.979
Und dann wird's halt wirklich so, dass, äh, ähm, jeder Honk das hinkriegt.

01:43:22.319 --> 01:43:26.339
Ja. Indem man einfach Border Radius dran klatscht. Natürlich will er dann keiner haben. Mhm.

01:43:27.119 --> 01:43:30.859
Das verliert ja instantan seinen Wert. Und das wird mit Masonry so sein.

01:43:31.319 --> 01:43:33.399
Das ist mit diesen Scroll-Driven Animations so.

01:43:34.499 --> 01:43:37.519
Das war halt krass, als du dann halt irgendwie so, wenn du auf eine Apple-Produktseite

01:43:37.519 --> 01:43:41.719
gegangen bist, du dieses Scroll-Driven Animation hast, die sie halt eben mit

01:43:41.719 --> 01:43:43.639
mehreren Gigabyte JavaScript umgesetzt haben.

01:43:43.799 --> 01:43:48.419
Aber weil das halt sonst keiner gemacht hat, weil das halt eine unvernünftig krasse Aufgabe war.

01:43:49.639 --> 01:43:52.559
Beeindruckend, ne? Früher war es beeindruckend, dass du von einem Kontinent

01:43:52.559 --> 01:43:53.579
zum nächsten geflogen bist.

01:43:53.639 --> 01:43:57.799
Jetzt denkst du dir, bla, anstrengend. habe ich genug Akku, hast du nicht gesehen.

01:43:58.839 --> 01:44:04.399
CO2-Fußabdruck. So, so, lauter so Sachen. Und das ist halt auch normal und in Ordnung. Ähm.

01:44:05.794 --> 01:44:08.234
Ich sehe halt auch nicht, dass diese Sachen verwendet werden,

01:44:08.334 --> 01:44:11.074
aber tatsächlich ist mein Ausschnitt der Realität, den ich halt bespiele,

01:44:11.654 --> 01:44:17.974
primär dadurch bedingt, dass die halt eben so teilweise in einer Welt der 2010er

01:44:17.974 --> 01:44:22.614
festsitzen, weil halt eben das ist, als die ganzen Frameworks in so die Welt gekommen sind.

01:44:22.934 --> 01:44:26.154
Und ja, die können in Angular auch Vue Transitions anschmeißen,

01:44:26.314 --> 01:44:29.094
aber dann kriegen sie halt Vue Transitions in Angular statt Vue Transitions

01:44:29.094 --> 01:44:34.974
von einfach instantan geladenen Webseiten, die einfach per HTTP-Cache sofort bei ihnen da sind. Ja.

01:44:35.794 --> 01:44:39.894
Und wo man halt einfach mal ein paar Megabyte JavaScript wegtun könnte. Ja, mal gucken.

01:44:40.914 --> 01:44:46.194
Ist halt auch die Frage, belohnen User so Seiten, die das nicht machen oder

01:44:46.194 --> 01:44:47.994
nicht? Da bin ich mir auch noch nicht so sicher.

01:44:49.294 --> 01:44:53.794
Auf dem Blatt Papier ist ja irgendwie weniger JavaScript benutzen immer besser,

01:44:54.174 --> 01:45:00.834
aber sag mal, merkt der normal User das dann oder stimmt der auch mit seinen Füßen ab?

01:45:01.834 --> 01:45:08.254
So. Indem er eben zu anderen Seiten geht oder sagt so. Also es ist ja nicht

01:45:08.254 --> 01:45:09.754
so, dass es eine Alternative gäbe.

01:45:10.874 --> 01:45:14.634
Ich würde ja schon behaupten, wir hier und zum Teil auch die geneigte Hörerschaft.

01:45:16.474 --> 01:45:19.294
Sind ja schon so ein bisschen die Exoten in der Welt heutzutage.

01:45:20.034 --> 01:45:24.574
Also entweder die Exoten oder die übrig gebliebenen Reste, die Rentner,

01:45:24.674 --> 01:45:25.914
die da kurz vor der Verklappung sind.

01:45:26.034 --> 01:45:30.854
Ja, ich hatte heute auch aus Spaß irgendwie, also wo wir es gerade von der State

01:45:30.854 --> 01:45:33.714
of sonst was hatten, also in der,

01:45:34.274 --> 01:45:37.594
die wird ja gesponsert auch von irgendwie Tokio Devs oder so,

01:45:37.754 --> 01:45:42.494
oder Devs Tokyo, das ist so eine Plattform, wo man irgendwie als Nicht-Japaner

01:45:42.494 --> 01:45:48.094
mal gucken kann, was haben die denn für Jobs so in Japan für Remote auch, und da gibt's,

01:45:48.734 --> 01:45:51.954
gibt's dann eben so JavaScript-Engineer, und dann gab's auch Frontend,

01:45:52.614 --> 01:45:54.934
Frontend-Engineer oder Frontend nur, und dann dachte ich, ja,

01:45:55.034 --> 01:45:58.314
JavaScript-Kram, so View-Dings und React.

01:46:00.114 --> 01:46:02.994
Ich setze mal den Filter auf Frontend und das war genau das Gleiche.

01:46:03.174 --> 01:46:09.774
Da gab es irgendwie nie irgendein Dings, wo Hunter Maddow der CSS eine Rolle gespielt hat.

01:46:12.653 --> 01:46:16.773
Naja, weil das halt eben, also ich bezeichne so ein Framework ja immer als so

01:46:16.773 --> 01:46:20.513
eine Art Linse oder Membran, durch die man halt eben die Realität manipuliert oder wahrnimmt.

01:46:21.193 --> 01:46:25.533
Und dann gibt es halt eben kein CSS oder HTML, maximal halt eben als Compiler-Output,

01:46:25.673 --> 01:46:29.613
weil das halt eben aus dem SSR rausfällt, oder CSS als Hindernis.

01:46:32.113 --> 01:46:36.413
Also die .NET-Konferenz, die ich letzte Woche bespaßt habe, letzte Woche,

01:46:36.493 --> 01:46:40.653
letzte Woche, guck mal hier, View-Transitions, kannst einfach HTML-Seiten haben,

01:46:40.793 --> 01:46:45.033
aber dazu müsste man ja in eine Welt erstmal rein navigieren,

01:46:45.113 --> 01:46:46.813
in der man einfach HTML-Seiten rausrendert.

01:46:47.853 --> 01:46:51.273
Und du bist halt maximal weit entfernt, um das zu machen. Du kannst halt dann

01:46:51.273 --> 01:46:53.593
diese SPA-View-Transitions machen.

01:46:53.873 --> 01:46:57.493
Aber was für mich ja da eigentlich der Benefit ist, ist ja viel mehr,

01:46:58.493 --> 01:47:02.233
dass du halt einfach in so ein epigeres Feeling reinkommen kannst,

01:47:02.393 --> 01:47:06.313
ohne das, ohne diesen ganzen Aufbau haben zu müssen, um diese ganze Infrastruktur haben zu müssen.

01:47:06.733 --> 01:47:11.033
Du könntest wirklich wie der letzte Barbar langweilige HTML-Seiten rausballern,

01:47:11.653 --> 01:47:15.993
die maximal im Cash-Pair-System und dann streuselst du ein bisschen CSS drüber,

01:47:17.273 --> 01:47:20.633
und dann bist du zu 80% da für 10% des Aufwandes.

01:47:21.333 --> 01:47:25.233
Das ist ja eigentlich der Deal. Aber du hast halt ein so großes Delta zwischen

01:47:25.233 --> 01:47:27.413
dem, wo wir jetzt sind und da, wo wir hinmüssten,

01:47:29.713 --> 01:47:34.093
der React-Mind-Virus hält dich halt davon ab, überhaupt sich eine solche Welt

01:47:34.093 --> 01:47:35.633
vorzustellen. Das ist so ein bisschen mein Verdacht.

01:47:38.085 --> 01:47:41.325
Ja, vielleicht. So Komponentenmodellen.

01:47:41.685 --> 01:47:44.145
Okay, ich brauche mein Komponentenmodell, um alles irgendwie in eine Komponente

01:47:44.145 --> 01:47:47.985
zu quetschen. A, brauchst du das nicht. B, könntest du das so machen, wie der Schep das tut.

01:47:48.845 --> 01:47:53.945
Gilt auch als Komponente, aber diese Abwehrreaktion, die dann da rauskommt.

01:47:54.025 --> 01:47:57.545
Aber das ist ja alles voll Oll und das ist ja nicht mal dieses und jenes und solches.

01:47:58.685 --> 01:48:07.525
Ja, das ist irgendwie eine Parallelwelt, die existiert und wo die Dinge einfach

01:48:07.525 --> 01:48:09.365
grundsätzlich ganz anders angegangen werden.

01:48:10.045 --> 01:48:13.525
Ja. Also ich glaube, dass es auch schon viele Leute gibt, die das so machen

01:48:13.525 --> 01:48:17.785
wie wir. Also es ist ja auch immer noch wahnsinnig viel PHP im Einsatz und alles.

01:48:18.385 --> 01:48:21.025
Also es spricht halt von keiner darüber. Da hörst du ja nichts. Genau.

01:48:21.825 --> 01:48:24.485
Da rät ja keiner drüber. Das ist ja langweilig. Wenn du halt nicht die neueste

01:48:24.485 --> 01:48:28.865
React-Version beklagen kannst, ist das ja auch so ein Ding.

01:48:29.765 --> 01:48:32.085
Ich bin ganz bei dir und das vergesse ich ja auch immer wieder,

01:48:32.165 --> 01:48:34.885
habe ich ja gerade auch getan, dass halt eben wir ja nur die wahrnehmen,

01:48:34.965 --> 01:48:38.285
die wir halt wahrnehmen Und die, die halt nicht über die Konferenzen springen,

01:48:38.305 --> 01:48:43.545
sondern weiterhin sagen, yes, jQuery 4.0 steht vor der Tür. Die gibt es halt.

01:48:45.872 --> 01:48:49.512
Cool. So, jetzt schaffen wir es aber trotzdem, nicht mehr trotz des letzten

01:48:49.512 --> 01:48:52.652
Schwenks noch irgendwie die zwei Stunden voll zu kriegen. Meinst du nicht?

01:48:54.232 --> 01:48:59.932
Nö. Ist das auch okay, ne? Ja. Ja, super. Nee, aber war viel,

01:49:00.052 --> 01:49:01.212
aber hat auch wieder Spaß gemacht.

01:49:01.412 --> 01:49:08.692
Gefällt mir immer gut. Sind ja unsere Aufgüsse eurer, also Stefans und deiner TypeScript Revision.

01:49:09.732 --> 01:49:16.252
Nur genau, dass wir dann so eher in den, bei der Web-Plattform rumwurschteln.

01:49:17.672 --> 01:49:19.732
Gleiche Gesprächstherapie, aber ohne Compiler. Genau.

01:49:21.512 --> 01:49:25.392
Vielen Dank. Ja, ich danke. Ich habe sehr vieles gelernt und mitgenommen und

01:49:25.392 --> 01:49:26.452
aufgeschrieben. Ja, ich auch. Ich auch.

01:49:26.972 --> 01:49:29.412
Sehr cool. Genau, das ist ja auch immer der tolle Nebeneffekt.

01:49:29.512 --> 01:49:31.072
Wir lernen ja mal voneinander. Das ist echt super.

01:49:32.152 --> 01:49:35.452
Und genau, vielen Dank fürs Zudern an alle Hörerinnen und Hörer,

01:49:35.512 --> 01:49:36.792
die es bis jetzt ausgehalten haben.

01:49:36.932 --> 01:49:40.672
Wenn ihr Feedback habt, ihr wisst, wo ihr uns findet. Auf der Webseite ist alles verlinkt.

01:49:41.172 --> 01:49:42.872
Unter anderem treiben wir uns

01:49:42.872 --> 01:49:46.092
in einem Community-Slack rum und lässt dann auch mal über den State of JS.

01:49:47.952 --> 01:49:52.032
Ja, und dann hören wir uns nächste Folge wieder und ich freue mich ja auch auf

01:49:52.032 --> 01:49:58.232
eure Folge, die ja noch kommt, wie ich gelernt habe, laut Release-Plan über React.

01:49:58.892 --> 01:50:01.852
React, Heilsbringer oder Höllenmaschine, genau. Ja, sehr gut.

01:50:02.212 --> 01:50:03.952
Alles klaro. Dann bis dann.

01:50:04.652 --> 01:50:06.712
Bis dann. Dankeschön. Tschüssi. Tschüss.

