In einem hochexzentrischen Orbit kreisen Vanessa und Peter um den diesjährigen Fragenkatalog zum State of JS herum. Bedingt durch zahllose Exkursionen schaffen sie es so gerade durch ersten ca. 20 % der Umfrage. Unser Sponsor Workshops.DE bietet IT-Schulungen für moderne Web-Entwicklung. Dabei arbeitet Workshops.DE nicht als reiner Vermittler, sondern bildet eine Community aus über 80 Trainer:innen, […]
In einem hochexzentrischen Orbit kreisen Vanessa und Peter um den diesjährigen Fragenkatalog zum State of JS herum. Bedingt durch zahllose Exkursionen schaffen sie es so gerade durch ersten ca. 20 % der Umfrage. Unser Sponsor Workshops.DE bietet IT-Schulungen für moderne Web-Entwicklung. Dabei arbeitet Workshops.DE nicht als reiner Vermittler, sondern bildet eine Community aus über 80 Trainer:innen, welche gemeinsam Material erstellen, sich gegenseitig unterstützen und weiterbilden, um möglichst nachhaltige und hochqualitative Weiterbildungsangebote zu schaffen. Ein starker Fokus liegt hierbei auf den Frontend-Frameworks Angular, React und Vue. Neben diesen gibt es aber auch Weiterbildungen im Bereich Docker, Kubernetes und Spring Boot. Zum Netzwerk gehören ebenfalls die Community-Portale Angular.DE, ReactJS.DE und VueJS.DE. Seid ihr auf der Suche nach einer qualitativen Weiterbildung im Bereich Web-Entwicklung oder möchtet euch selbst als Trainer:in einbringen? Dann seid ihr bei Workshops.DE genau richtig. Schaunotizen [00:01:50] State of JS 2022 Wir starten mit dem Proxy, von dessen Use Cases wir in unser beider Realitäten zu berichten haben. Promise.allSettled() ist weniger spannend, erlaubt uns aber einen Schwenk zum breiteren Konzept der Iterables. Fragen rund um Dynamic Import werden im Bundle mit Stilfragen rund um Skinny Jeans abgefühstückt, wonach Peter Nullish Coalescing und Vanessa Logical Assignment lobpreisen. Die Schockfrostung der Hölle erfolgt, also Peter (!) von seinen Vue-Abenteuern in Verbindung mit privaten Klassenfeldern berichtet und mit Vanessa diverse Fallen rund um String-Replacement (replace() ist eine Falle, matchAll und replaceAllsind viel besser) durchkaut. Beide Parteien scheitern in Folge daran, ihre Gegenüber von der Großartigkeit von Promise.any() und Array.prototype.at()zu überzeugen. Des Weiteren fallen uns zunehmend kürzer werdende Fun Facts zu Features wie Top-Level await, Temporal, Array.prototype.findLast(), Error.prototype.cause und Object.hasOwn() ein. Spätestens im zweiten Fragebogen, in dem es um Browser-APIS geht, verlässt uns ein wenig der Elan. Service Workers und Custom Elements sind alte Hüte, Shadow DOM darüber hinaus ohne Custom Elements nur bedingt interessant. Angesichts von Web Animations rafft sich Peter nochmal zu einem Rant wider die Frameworks auf, bei WebGL, WebRTC, WebSockets und WebSpeech müssen wir hingegen schlicht die etablierte Existenz der APIs anerkennen. Mit ein paar letzten Spekulationen zur Broadcast Channel API lassen wir die Folge ausklingen. Transkript WEBVTT 00:00.000 --> 00:03.000 Working Draft Revision 549. 00:30.000 --> 00:41.000 Workshops.de ist die Trainerinnen-Community, die IT-Schulungen mit Fokus auf Web-Entwicklung für deine Firma anbietet, mit einem Pool von über 500 Themenmodulen. 00:41.000 --> 00:45.000 Zum Beispiel zu den Themen Angular, React und View. 00:45.000 --> 00:55.000 Dabei gibt es erstklassige Basisschulungen und maßgeschneiderte In-Haus-Klasses, die dann zum Beispiel sechs Tage lang jeweils Halbtags-Remote stattfinden 00:55.000 --> 01:02.000 oder als Masterclass mit einem sehr hohen Selbstlernaranteil in Verbindung mit regelmäßigen Ask Me Anything Sessions. 01:02.000 --> 01:12.000 Die Trainerinnen sind regelmäßig in echten Projekten in der Wirtschaft unterwegs und lassen stets aktuelle Erfahrungen in ihre Materialien mit einfließen. 01:12.000 --> 01:21.000 Außerdem bilden sie sich sowohl gegenseitig fachlich als auch extern didaktisch regelmäßig weiter, um für alle Lerntypen Angebote zu schaffen. 01:21.000 --> 01:31.000 Vielleicht kennst Du Workshops.de auch schon von Projekten wie Angular.de oder den Community-Konferenzen NG.de und View.js.de Conference. 01:31.000 --> 01:36.000 Wenn Du jetzt mehr darüber erfahren möchtest, dann schau doch einfach mal bei Workshops.de vorbei. 01:36.000 --> 01:41.000 Dort kannst Du auch Teil der Trainerinnen[...]
In einem hochexzentrischen Orbit kreisen Vanessa und Peter um den diesjährigen Fragenkatalog zum State of JS herum. Bedingt durch zahllose Exkursionen schaffen sie es so gerade durch ersten ca. 20 % der Umfrage.
Workshops.DE bietet IT-Schulungen für moderne Web-Entwicklung. Dabei arbeitet Workshops.DE nicht als reiner Vermittler, sondern bildet eine Community aus über 80 Trainer:innen, welche gemeinsam Material erstellen, sich gegenseitig unterstützen und weiterbilden, um möglichst nachhaltige und hochqualitative Weiterbildungsangebote zu schaffen.
Ein starker Fokus liegt hierbei auf den Frontend-Frameworks Angular, React und Vue. Neben diesen gibt es aber auch Weiterbildungen im Bereich Docker, Kubernetes und Spring Boot. Zum Netzwerk gehören ebenfalls die Community-Portale Angular.DE, ReactJS.DE und VueJS.DE.
Seid ihr auf der Suche nach einer qualitativen Weiterbildung im Bereich Web-Entwicklung oder möchtet euch selbst als Trainer:in einbringen? Dann seid ihr bei Workshops.DE genau richtig.
WEBVTT 00:00.000 --> 00:03.000 Working Draft Revision 549. 00:30.000 --> 00:41.000 Workshops.de ist die Trainerinnen-Community, die IT-Schulungen mit Fokus auf Web-Entwicklung für deine Firma anbietet, mit einem Pool von über 500 Themenmodulen. 00:41.000 --> 00:45.000 Zum Beispiel zu den Themen Angular, React und View. 00:45.000 --> 00:55.000 Dabei gibt es erstklassige Basisschulungen und maßgeschneiderte In-Haus-Klasses, die dann zum Beispiel sechs Tage lang jeweils Halbtags-Remote stattfinden 00:55.000 --> 01:02.000 oder als Masterclass mit einem sehr hohen Selbstlernaranteil in Verbindung mit regelmäßigen Ask Me Anything Sessions. 01:02.000 --> 01:12.000 Die Trainerinnen sind regelmäßig in echten Projekten in der Wirtschaft unterwegs und lassen stets aktuelle Erfahrungen in ihre Materialien mit einfließen. 01:12.000 --> 01:21.000 Außerdem bilden sie sich sowohl gegenseitig fachlich als auch extern didaktisch regelmäßig weiter, um für alle Lerntypen Angebote zu schaffen. 01:21.000 --> 01:31.000 Vielleicht kennst Du Workshops.de auch schon von Projekten wie Angular.de oder den Community-Konferenzen NG.de und View.js.de Conference. 01:31.000 --> 01:36.000 Wenn Du jetzt mehr darüber erfahren möchtest, dann schau doch einfach mal bei Workshops.de vorbei. 01:36.000 --> 01:41.000 Dort kannst Du auch Teil der Trainerinnen-Community werden, der bereits 70 Menschen angehören. 01:41.000 --> 01:46.000 Wir danken Workshops.de für die Unterstützung dieser Folge vom Working Draft. 01:46.000 --> 01:55.000 Hallo und herzlich willkommen zu Working Draft Revision 549. Heute sind am Start die Vanessa. 01:55.000 --> 01:56.000 Hallo. 01:56.000 --> 02:04.000 Meine Wenigkeit, der Peter und neben diversen Katzen, die noch im Hintergrund herum wuseln, ist auch am Start der State of Javascript. 02:04.000 --> 02:11.000 Jahre des Herrn 2022, im Moment noch in der auszufüllenden Form und wir dachten uns, wir füllen das einfach mal aus 02:11.000 --> 02:17.000 und gucken mal, was wir da so an lustigen Frameworks von denen wir noch nie was gehört haben finden oder Features oder Ähnlichem. 02:17.000 --> 02:25.000 Ich würde sagen, wir steigen einfach mal ein in den Survey, wer mitspielen möchte, weiß jetzt gerade nicht, weil das hier released wird, 02:25.000 --> 02:29.000 aber State of Javascript, erstes Google Ergebnis drauf drücken und dann läuft die Kiste. 02:29.000 --> 02:35.000 Gut, dann würde ich sagen, fangen wir das mal an, ich würde sagen, wir beide spielen das parallel 02:35.000 --> 02:40.000 und beantworten einfach mal zusammen alle Fragen und gucken mal, worüber man was erzählen kann, oder? 02:40.000 --> 02:42.000 Cool. 02:42.000 --> 02:48.000 Dann, wenn ich mich nicht täusche, bin ich jetzt hier, zuerst gelandet bei Language Features von Javascript 02:48.000 --> 02:54.000 mit lauter neuen Features, wenn ich das richtig sehe, mit der Frage, ob man das denn mal benutzt hat oder nicht. 02:54.000 --> 02:58.000 Da bin ich ja mal sehr gespannt, was das eigentlich einem sagen soll, oder? 02:58.000 --> 03:01.000 Weil ich meine, wenn ich da jetzt sage, habe ich noch nie von gehört, weiß ich nicht, brauche ich nicht, 03:01.000 --> 03:06.000 kann das ja entweder heißen, das weiß keiner, es gibt ein PR-Problem oder das braucht keiner 03:06.000 --> 03:09.000 und es gibt halt mehr so ein Use Case-Problem. 03:09.000 --> 03:13.000 Genau, das Problem hatte ich die ganze Zeit bei dem Survey, wo wir hier durchgehen, 03:13.000 --> 03:18.000 dass ich mir gedacht habe, vor allem in meinem Use Case brauche ich es halt nicht. 03:18.000 --> 03:23.000 Also wir haben dann auch zum Beispiel die Antwortmöglichkeiten, habe ich von Gehören, würde ich gerne lernen, 03:23.000 --> 03:29.000 das will ich manchmal andrücken, weil würde ich jetzt so ein Projekt machen, dann würde ich das benutzen, 03:29.000 --> 03:34.000 aber ich mache nicht so ein Projekt, also eigentlich ist es mir egal. Schwierig zu antworten. 03:34.000 --> 03:38.000 Bei Proxies, das ist so der erste Kandidat hier, geht es mir ja immer so, 03:38.000 --> 03:42.000 das habe ich halt für manche so Experimente mal verwendet. 03:42.000 --> 03:46.000 Und immer wenn das Experiment dann sozusagen mehr geworden ist als wirklich nur ein Experiment, 03:46.000 --> 03:52.000 merke ich halt relativ schnell, so ein Proxies ist in fast allen Fällen, 03:52.000 --> 03:56.000 was das mehr Probleme und Verwirrung schafft, als es wirklich einem hilft. 03:56.000 --> 04:01.000 Bei den Proxies habe ich ja sofort angeklickt, habe ich benutzt, 04:01.000 --> 04:04.000 was mir aufgefallen ist, ich habe das ja gar nicht persönlich benutzt, 04:04.000 --> 04:09.000 aber ich schreibe sehr viel in View 3, was auf Proxies passiert, um die Reactivity zu steuern 04:09.000 --> 04:15.000 und das Observer-Pattern damit zu machen, indem man bei dem Proxy, wo man ja die Möglichkeit hat, 04:15.000 --> 04:21.000 sozusagen ein Objekt zu erstellen, das anstelle von dem original Objekt dann verwendet wird 04:21.000 --> 04:24.000 und man kann halt Mepper und Setter zum Beispiel neu definieren. 04:24.000 --> 04:29.000 Da haben wir uns halt die Reactivity rein, deswegen habe ich gleich gesagt, ja Proxies, war ich ja täglich. 04:29.000 --> 04:35.000 Ich glaube, das gilt nicht, weil ich selber schreibe gar keinen, sich nutzen, ist Framework dafür. 04:35.000 --> 04:41.000 Ja, interessant, und während du das gerade erzählt hast, merke ich tatsächlich mitten in dem Programm, 04:41.000 --> 04:44.000 an dem ich gerade die meiste Zeit rumschraube, mitten drinsitze ein riesiger Proxy 04:44.000 --> 04:47.000 und ich habe es tatsächlich komplett vergessen. 04:47.000 --> 04:54.000 Na ja, da habe ich eine Datenstruktur drin, das ist im Prinzip einfach so eine mehrfach gelingte Liste 04:54.000 --> 04:59.000 und ich verwende das vor allen Dingen aus so Convenience-Grunden, 04:59.000 --> 05:04.000 weil ich dann so diese Liste bzw. einzelne Member von dieser Liste halt an Funktionen übergeben kann 05:04.000 --> 05:08.000 und die kriegen dann halt eben einfach so eine Liste der ganzen Daten von ganz Anfang bis ganz Ende. 05:08.000 --> 05:11.000 Aber manchmal will ich aus bestimmten Gründen, denen die Illusion geben, 05:11.000 --> 05:16.000 dass die Liste früher aufhört oder später anfängt, als eigentlich der Fall ist 05:16.000 --> 05:20.000 und statt halt eben die Liste zu modifizieren, gebe ich der Funktion immer ein Proxy, 05:20.000 --> 05:24.000 wo halt eben dann so drin gegeben ist, aha, wenn du irgendwie jetzt hier da in das nächste Number reingehst, 05:24.000 --> 05:28.000 aber ist ab dem siebten halt eben Schluss und du fähigst einen undefined, 05:28.000 --> 05:31.000 damit ich halt die Datenstruktur sozusagen unangetastet lassen kann, 05:31.000 --> 05:36.000 aber halt den Proxy als View auf die Datenstruktur gleichsam habe. 05:36.000 --> 05:41.000 Was glaube ich auch insofern ganz gut ist, dass ich vergessen habe, dass ich das brauche, 05:41.000 --> 05:46.000 weil das hätte man auch anders machen können, aber so ist glaube ich irgendwie effizienter möglicherweise 05:46.000 --> 05:50.000 und es fällt halt nicht auf, was halt ganz nett ist, was ja eigentlich der Sinn von so einem Proxy ist. 05:50.000 --> 05:56.000 Ja, also ich weiß, ich würde gerne mal da in die Runde zu allen Hörern und Hörern fragen, 05:56.000 --> 06:03.000 ob wenn jemand da draußen Proxys benutzt, ob man das so hier und da mal für einen speziellen Case braucht 06:03.000 --> 06:07.000 oder ob es da draußen wirklich Leute gibt, die das ständig einsetzen. 06:07.000 --> 06:11.000 Ich habe ja auch mal gesehen, irgendwelche Menschen verwenden das so im Kontext von Web Components, 06:11.000 --> 06:16.000 dass man irgendwie so eine Art Datenstore damit macht. 06:16.000 --> 06:19.000 Halt ich halt auch mal für so eine gute Idee bis ich halt irgendwie mir denke, 06:19.000 --> 06:22.000 aber pass mal auf, du bist ja jeden in der Baumstruktur drin 06:22.000 --> 06:25.000 und der Datenstore könnte ja einfach auch ein Element sein. 06:25.000 --> 06:28.000 Und dann müsstest du halt nicht zwischen irgendwie Dom-Objekten und anderen Objekten unterscheiden 06:28.000 --> 06:32.000 und du müsstest irgendwie global wissen, was da irgendwie so ein Proxy-Objekt ist 06:32.000 --> 06:35.000 und ein Proxy-Objekt implementiert auf irgendeinem Parent-Element, 06:35.000 --> 06:38.000 was dann irgendwie der Datenprovider ist oder so. 06:38.000 --> 06:42.000 Und dann muss es halt nicht mal ein Proxy sein, weil dann nimmst du einfach normale Getter und Setter auf Verklassen 06:42.000 --> 06:43.000 oder irgendwie so was. 06:43.000 --> 06:46.000 Auf einer Klasse? Also keine Klasse. 06:46.000 --> 06:49.000 Wenn du Web Components schreibst, dann wahrscheinlich schon. 06:49.000 --> 06:51.000 Ja, okay. 06:51.000 --> 06:55.000 Okay, aber ich würde mal sagen für uns beide, wenn wir jetzt sozusagen unsere Proxy-Erfahrung zusammennehmen, 06:55.000 --> 07:01.000 also irgendwie so, bei dir ein halbes Benutzt durch View und bei mir ein ganzes Benutzt durch mein eigenes Ding, 07:01.000 --> 07:07.000 würde ich sagen, machen wir da mal einen für, haben wir benutzt, wir sind die Coolen, die das verwendet haben. 07:07.000 --> 07:10.000 Okay, promise all settled. 07:10.000 --> 07:13.000 Ich wundert es mich eigentlich, dass es sowas nicht früher gab. 07:13.000 --> 07:16.000 Gut, es gab auch einfach immer Workarounds dafür. 07:16.000 --> 07:18.000 Ich habe es noch nie benutzt. 07:18.000 --> 07:21.000 Das ist jetzt blöd, weil das heißt jetzt nicht, dass ich es nicht cool finde. 07:21.000 --> 07:25.000 Ich habe es einfach noch nie gebraucht, gerade in den letzten Monaten. 07:25.000 --> 07:27.000 Ich weiß auch noch gar nicht, seit's wanns genau gibt. 07:27.000 --> 07:31.000 Ich höre ja immer vorher, ah, irgendwann soll's mal sowas geben, ist ja total cool. 07:31.000 --> 07:35.000 Dann habe ich immer das Problem, dann vergesse ich wieder, dass das existieren wird in der Zukunft, 07:35.000 --> 07:38.000 weil ich kann es vielleicht noch nicht benutzen und irgendwann ist es plötzlich da. 07:38.000 --> 07:47.000 Also all settled nimmt als Parameter ein iteratable an und return dafür ein Einzelnis promise 07:47.000 --> 07:51.000 und das wird einfach Bescheid zeigen, sobald alle promises fertig sind, 07:51.000 --> 07:56.000 ob jetzt successful oder mit Fehler, aber auf jeden Fall sind sie dann alle fertig. 07:56.000 --> 08:01.000 Genau, ich überlege gerade, ob ich das als Antipätern bezeichnen möchte. 08:01.000 --> 08:08.000 Weil promise Fehler ist ja gleichsam die asynchrone exception. 08:08.000 --> 08:17.000 So, das heißt in meinem Fall finde ich halt so ein catchall für, 08:17.000 --> 08:21.000 interessiert mich nicht so richtig, ob das jetzt irgendwie Erfolg oder Fehler war. 08:21.000 --> 08:26.000 Ein bisschen fragwürdig, weil wenn ich den Fehler sozusagen handeln möchte, 08:26.000 --> 08:29.000 ohne dass es halt irgendwie exceptionmäßig ein Abriss des Programms geht, 08:29.000 --> 08:33.000 würde ich doch eher sagen, ich nehme das fehlschlagende promise und hänge dann catchhandler an. 08:33.000 --> 08:37.000 Also irgendwie finde ich das expliziter als zu sagen, schmeiß die da alle rein 08:37.000 --> 08:39.000 und hinterher interpretiere ich es um. 08:39.000 --> 08:44.000 Ausnahme natürlich, es gibt irgendwie eine API, wo häufig fehlende promises rauskommen. 08:44.000 --> 08:48.000 Also das jetzt meine Interpretation rejected as promise ist eine exception, 08:48.000 --> 08:50.000 de facto sieht es wahrscheinlich bei vielen anderen aus. 08:50.000 --> 08:53.000 Ich habe ein Beispiel dafür, wir haben auch bei uns auf der Plattform, 08:53.000 --> 08:58.000 dass wir das User bei uns andere URLs eingeben können, 08:58.000 --> 09:01.000 um was zu hinterlegen und dafür fetschen wir auch die Metadaten. 09:01.000 --> 09:04.000 Das ist natürlich alles mit Time Out, weil das kann unfassbar lange dauern 09:04.000 --> 09:07.000 und da kann auch wirklich mal nichts zurückkommen. 09:07.000 --> 09:11.000 Und da sagen wir zum Beispiel, wenn wir jetzt auch mehrere URLs hinlegen, 09:11.000 --> 09:17.000 wir versuchen es einfach für, ich glaube, 8 oder 10 Sekunden alles zu kriegen, was wir können. 09:17.000 --> 09:21.000 Und die werden dann halt Time Outed. 09:21.000 --> 09:24.000 Wenn nichts kommt und dann nehmen wir halt einfach alles, was kommt. 09:24.000 --> 09:28.000 Und wenn halt 3 URLs keine Metadaten liefern konnten, dann ist uns auch Wurscht 09:28.000 --> 09:32.000 und schreiben wir hin, Title, Description selber eintragen. 09:32.000 --> 09:36.000 Genau, und dass Metadaten konnten nicht geruhlt werden. 09:36.000 --> 09:39.000 Was also sozusagen einfach einer der normalen Fälle ist, 09:39.000 --> 09:41.000 das ist jetzt nicht der Happieste, der Happy Paths, 09:41.000 --> 09:43.000 aber einer, wo man sagt, macht jetzt auch keinen Unterschied, 09:43.000 --> 09:46.000 wird aber dann mit dem exceptionartigen Mechanismus modelliert, 09:46.000 --> 09:48.000 weil was willst du sonst nehmen? 09:48.000 --> 09:49.000 Ja. 09:49.000 --> 09:51.000 Und dafür will ich eigentlich auch kein Error Monitoring. 09:51.000 --> 09:54.000 Also ich kann vielleicht mitschreiben und mitlocken, 09:54.000 --> 09:56.000 wie oft es passiert, damit man überdenken kann, 09:56.000 --> 09:58.000 ob es überhaupt Sinn macht, dieses Video zu haben. 09:58.000 --> 10:01.000 Aber ich will jetzt auch nicht in Century irgendwie aufbingen. 10:01.000 --> 10:04.000 Metadaten nicht glatt, Metadaten nicht glatt. Ja, ja, schon klar, weiß ich. 10:04.000 --> 10:05.000 Ignore hier mal. 10:05.000 --> 10:08.000 Ja, nee, das ist kein Fehler, sondern halt irgendwie ein... 10:08.000 --> 10:10.000 Eine Info. 10:10.000 --> 10:12.000 Eine Info, genau, genau. 10:12.000 --> 10:16.000 Aber wie gesagt, wenn man jetzt das mal von der Synchrone übersetzen würde, 10:16.000 --> 10:19.000 wäre das ja quasi schon Control Flow durch Exception Handling, 10:19.000 --> 10:22.000 wo halt dann die Java Graubärte uns sagen würden, das macht man aber nicht. 10:22.000 --> 10:24.000 Ja. 10:24.000 --> 10:26.000 Also weiß ich, keine Ahnung, er hängt am Ende auch mit damit ab, 10:26.000 --> 10:28.000 mit was man es zu tun haben will. 10:28.000 --> 10:30.000 Und ich meine, wenn man das irgendwie auf einer API-Ebene entscheiden muss, 10:30.000 --> 10:34.000 gilt das jetzt als epischer Fehlschlag oder als Normalfall für Daten ist nicht da. 10:34.000 --> 10:36.000 Also ich habe nichts gegen All Zettel. 10:36.000 --> 10:39.000 Ich denke halt nur, immer wenn ich das wahrscheinlich gebrauchen würde, 10:39.000 --> 10:41.000 heutzutage würde ich es irgendwie anders handeln, 10:41.000 --> 10:44.000 aber ist jetzt wahrscheinlich auch echt kein großer Unterschied. 10:44.000 --> 10:46.000 Mhm. 10:46.000 --> 10:49.000 Also wir haben noch nicht benutzt Wissen, aber Bescheid. 10:49.000 --> 10:51.000 Ja. 10:51.000 --> 10:53.000 Aber eine Sache dazu habe ich noch zu sagen, 10:53.000 --> 10:56.000 weil ich habe ja gerade gemeint, als Parameter nimmt es ein Iterable Hand. 10:56.000 --> 10:59.000 Entschuldigung, es sind immer solche Wörter, die ich immer nur schreibe und dann steupe. 10:59.000 --> 11:01.000 Ich drüber beim Aussprechen. 11:01.000 --> 11:05.000 Du bist ja unser TypeScript-Experte, 11:05.000 --> 11:08.000 erklär wer, ein Iterable, 11:08.000 --> 11:10.000 sprich mal so aus. 11:10.000 --> 11:12.000 A-Tribble. 11:12.000 --> 11:14.000 Okay. 11:14.000 --> 11:16.000 Ein Array, Set, Map. 11:16.000 --> 11:18.000 Gibt es noch weitere Möglichkeiten? 11:18.000 --> 11:20.000 A-Tribble ist bloß ein Interface. 11:20.000 --> 11:23.000 Das kannst du im Prinzip auf jedem Objekt implementieren. 11:23.000 --> 11:28.000 Also du kannst doch dann dir eine ganz eigene Sorte von Listen-artigem Objekt machen. 11:28.000 --> 11:30.000 Wir tun jetzt mal so, als wäre es eine Klasse. 11:30.000 --> 11:33.000 Du hast ja gerade gesagt, Klassens sind jetzt irgendwie doof und riechen nach Lulu. 11:33.000 --> 11:35.000 Neckling nach Java. 11:35.000 --> 11:40.000 Irgendwann muss ich dich noch eine Sache zu View und Klassens fragen. 11:40.000 --> 11:43.000 Da habe ich letztens eine sehr schöne Frontalcarambolage bei einem Kunden gehabt. 11:43.000 --> 11:45.000 Aber nee. 11:45.000 --> 11:49.000 Also was du machst, du baust ein Objekt, definierst darauf ein Feld. 11:49.000 --> 11:53.000 Das Feld hat den Namen Symbol.iterator, also ein spezifisches Symbol 11:53.000 --> 11:55.000 von den globalen Wohlbekannten. 11:55.000 --> 12:00.000 Und darauf definierst du eine Funktion, die werden aufgerufen, ein Objekt returned. 12:00.000 --> 12:07.000 Das Objekt hat dann eine Methode Next und das Returnt wiederum Objekte mit Done und False. 12:07.000 --> 12:09.000 Und davon die Kurzform ist die Generator Function. 12:09.000 --> 12:13.000 Das ist einfach so das allgemeine Interface, was man da implementiert. 12:13.000 --> 12:19.000 Und das Promise All Zettel sollte halt mit all dem klar kommen, was das so macht. 12:19.000 --> 12:21.000 Ja. 12:21.000 --> 12:24.000 Generell glaube ich, dass Set und Map ein bisschen unterschätzt sind 12:24.000 --> 12:27.000 im Mein im JavaScript, TypeScript umfällt. 12:27.000 --> 12:29.000 Es ist immer sofort halt ein Array. 12:29.000 --> 12:31.000 Ich würde das gerne mal ein bisschen... 12:31.000 --> 12:33.000 Immer. 12:33.000 --> 12:36.000 Ich würde eigentlich gerne mal mehr mit Sets und Maps arbeiten, 12:36.000 --> 12:39.000 weil das ist halt irgendwie so unscharverskriptisch. 12:39.000 --> 12:41.000 Ja, nicht nur das. 12:41.000 --> 12:44.000 Ich glaube halt eben, der JavaScriptler ist auch generell der alternativen Datenstruktur 12:44.000 --> 12:46.000 eher skeptisch gegenüber eingestellt. 12:46.000 --> 12:49.000 Ich habe letztens für mich das sortierte Array entdeckt. 12:49.000 --> 12:51.000 So einfach total der Oberhammer. 12:51.000 --> 12:53.000 Also ich musste da zwar ein Algorithmus implementieren, den ich nicht verstanden habe, 12:53.000 --> 12:56.000 weil ich habe ja Geschichte und Film studiert und nichts Anständiges. 12:56.000 --> 12:59.000 Aber als ich den halt eben übertragen hatte nach TypeScript 12:59.000 --> 13:01.000 und halt eben dann noch Symbol.iterator draufgemacht habe, 13:01.000 --> 13:03.000 okay, ich habe jetzt keine Literal-Syntax dafür, 13:03.000 --> 13:05.000 aber ich habe ein Array, das einfach permanent sortiert ist, 13:05.000 --> 13:08.000 weil die Use-Case ist echt super ist und auch echt besser performt, 13:08.000 --> 13:11.000 als wenn man es halt irgendwie hin und wieder sortiert. 13:11.000 --> 13:13.000 Und das geht halt voll gut mit allem zusammen klar. 13:13.000 --> 13:16.000 Also kannst du ein Array from reinstecken, kriegst ein richtiges Array raus. 13:16.000 --> 13:18.000 Kannst du irgendwie in eine Voroffschleife verwenden? 13:18.000 --> 13:20.000 Das ist wirklich so quasi-native, 13:20.000 --> 13:23.000 ohne dass sich tatsächlich so klar sortet Array Extents Array. 13:23.000 --> 13:25.000 Ich habe es einfach von Fuß nochmal neu implementiert. 13:25.000 --> 13:27.000 Total großartig. 13:27.000 --> 13:29.000 Aber sowas sieht man irgendwo. 13:29.000 --> 13:32.000 Ja, schade. 13:32.000 --> 13:35.000 Außer halt eben natürlich irgendwie so Class-List oder so, 13:35.000 --> 13:37.000 was ja im Prinzip auch nicht ein Array ist, 13:37.000 --> 13:41.000 sondern halt so eine Dom-Token-List, Dom-String-List, eins von beiden. 13:41.000 --> 13:43.000 Das nimmt man dann. 13:43.000 --> 13:46.000 Aber irgendwie selber, die Dinger zu verwenden, ist nicht so das große Dritt. 13:46.000 --> 13:48.000 Ja, man nimmt schon an, wenn es da schon herkommt, 13:48.000 --> 13:50.000 aber man kommt nicht selber auf die Idee, das zu machen. 13:50.000 --> 13:52.000 Und ich finde das irgendwie komisch, 13:52.000 --> 13:54.000 wenn ich mich dann irgendwie mit anderen Developern unterhalte, 13:54.000 --> 13:56.000 wenn ich sage, ich habe einfach nur ein Array, 13:56.000 --> 13:58.000 und dann so ja ein Dictionary. 13:58.000 --> 14:00.000 Nee, halt ein Array, ein Liste halt. 14:00.000 --> 14:02.000 Ja, ist halt... 14:02.000 --> 14:04.000 Hat die eine fixe Länge? 14:04.000 --> 14:07.000 Wächst die? Was sind da so die Memory-Behaviours und so? 14:07.000 --> 14:09.000 Ist ja nicht so, als ob wir die Wahl hätten. 14:09.000 --> 14:12.000 Wie macht das denn der Garbage-Collector? 14:12.000 --> 14:14.000 Der Garbage-Collector, ja. 14:14.000 --> 14:16.000 Ja, macht das halt, ne? 14:16.000 --> 14:19.000 Also, ich beschuldige ja ganz knallhart Jason. 14:19.000 --> 14:22.000 Du kannst ja auch mit den ganzen Maps und Sets und Gedönsen 14:22.000 --> 14:24.000 nichts werden in Jason. 14:24.000 --> 14:26.000 Mhm. 14:26.000 --> 14:29.000 Und ich glaube, weil einfach alle Jason sprechen. 14:29.000 --> 14:31.000 Hat das halt einfach... 14:31.000 --> 14:33.000 So schon mal ist das einfach ein kompletter No-Starter. 14:35.000 --> 14:38.000 Also klar, du könntest halt irgendwie jetzt so 14:38.000 --> 14:40.000 eine Map verwenden oder ein Set oder so kram, 14:40.000 --> 14:42.000 aber das machst du ja wirklich 14:42.000 --> 14:44.000 in irgendwelchen JavaScript-Programmen, 14:44.000 --> 14:46.000 die sozusagen in sich selbst 14:46.000 --> 14:48.000 irgendwelche komplexen Sachen mit Datenstrukturen machen. 14:48.000 --> 14:51.000 Aber ich glaube, das findet halt bei vielen Menschen kaum statt. 14:51.000 --> 14:53.000 Weil die halt eben mehr so 14:53.000 --> 14:56.000 gibt Daten von API, bastet das hier ins React-Framework rein 14:56.000 --> 14:58.000 und dann ist fertig. 14:58.000 --> 15:00.000 Und dann spielt das halt auch keine Rolle, 15:00.000 --> 15:02.000 dass man da mehr Möglichkeiten hätte 15:02.000 --> 15:04.000 oder dass die irgendwie effizienter wären. 15:04.000 --> 15:07.000 Weil das halt einfach so ein ganz kleiner Problemslice 15:07.000 --> 15:09.000 von dem gesamten Kuchen ist. 15:09.000 --> 15:11.000 Ja, und bei jedem Video-Tutorial, 15:11.000 --> 15:13.000 wir haben ja mittlerweile diese Ära an Frameworks, 15:13.000 --> 15:15.000 die alle Developer-Relations haben 15:15.000 --> 15:17.000 und alle viel eigene Werbung haben 15:17.000 --> 15:19.000 und dann immer die besten Tutorials über, 15:19.000 --> 15:21.000 ja, wahrscheinlich, wie mache ich jetzt React mit, 15:21.000 --> 15:23.000 weil wir haben immer gerade der aktuelle Store 15:23.000 --> 15:25.000 für React heißt. 15:25.000 --> 15:27.000 Und das sind ja alles Errays. 15:27.000 --> 15:30.000 Und dann schaust du dabei den Experten-Expertinnen zu. 15:30.000 --> 15:33.000 Also, warum sollte jetzt jemand junioriges auf die Idee kommen, 15:33.000 --> 15:35.000 nach Set und Map überhaupt zu googeln, 15:35.000 --> 15:37.000 wenn man das noch nicht mehr gehört hat? 15:37.000 --> 15:39.000 Ja. 15:39.000 --> 15:41.000 Die haben alle ihre Use-Cases, 15:41.000 --> 15:43.000 aber ich finde, die sind auch alle so ein bisschen exotisch 15:43.000 --> 15:46.000 und so und da kann man wirklich dem 0815 15:46.000 --> 15:49.000 ehrlichen React-Arbeiterinnen und Arbeiter, weißt du? 15:49.000 --> 15:51.000 Ja. 15:51.000 --> 15:53.000 Die morgens aufstehen, den ganzen Tag in der React-Mine schuften 15:53.000 --> 15:55.000 und abends nach Hause fahren. 15:55.000 --> 15:57.000 Die vier Stunden in Meetings sind meinste. 15:57.000 --> 16:00.000 Äh, ja, stimmt, das habe ich vergessen. 16:00.000 --> 16:03.000 Also, die Person, die da acht Stunden am Coding ist 16:03.000 --> 16:05.000 und dann nach Hause fertig, kenne ich nicht. 16:05.000 --> 16:08.000 Nee, das ist wahrscheinlich eher nicht. 16:08.000 --> 16:10.000 Das sind dann mehr so die brotlosen Künstler. 16:13.000 --> 16:15.000 Herrlich. 16:15.000 --> 16:17.000 In Künstler ist auch der dynamische Import. 16:17.000 --> 16:19.000 Ein überlebenskünstler. 16:19.000 --> 16:23.000 Wo wir jetzt das Keyword await setzen können, 16:23.000 --> 16:25.000 bevor wir schreiben, Import, 16:25.000 --> 16:28.000 irgendein Shavascript-Module oder was auch immer. 16:28.000 --> 16:32.000 Ich gebe meinen Thumbs-Up für, habe ich benutzt, 16:32.000 --> 16:34.000 für wirklich diverse Sachen 16:34.000 --> 16:36.000 und fand es auch immer wieder praktisch, 16:36.000 --> 16:39.000 Sachen dynamisch nachzuladen. 16:39.000 --> 16:42.000 Ja, wir sehen mich ja mehr so dazu gezwungen, 16:42.000 --> 16:44.000 weil ich follow-on mich entschieden habe, 16:44.000 --> 16:47.000 ah, baut das Ding halt mit Next.js 16:47.000 --> 16:49.000 und dann bist du irgendwie so, 16:49.000 --> 16:51.000 du musst hast ja irgendwie so automatisch 16:51.000 --> 16:54.000 die Reakt-Komponente auf dem Server wie auf dem Client. 16:54.000 --> 16:57.000 Und dann kannst du ja erstmal nicht einfach so sagen, 16:57.000 --> 16:59.000 hier ist jetzt Web-Komponent angesagt, 16:59.000 --> 17:03.000 weil da müsstest du ja deine Class Extents HTML Element sagen 17:03.000 --> 17:06.000 und HTML Element auf Node ist einfach nur eine Exception. 17:06.000 --> 17:08.000 Also muss man dann irgendwo sagen, 17:08.000 --> 17:10.000 wenn der Mond richtig steht 17:10.000 --> 17:12.000 und ich über irgendwelche obskuren Mechanismen rausstelle, 17:12.000 --> 17:15.000 dass ich mich Reakt-Komponente jetzt gerade auf dem Client befinde, 17:15.000 --> 17:17.000 dann lade ich auch erst diese Library nach, 17:17.000 --> 17:20.000 die ansonsten einfach nur qua existenzende Exception auslöst 17:20.000 --> 17:22.000 und dann ist halt irgendwie plötzlich alles asynchron geworden. 17:22.000 --> 17:24.000 Ich will ja einfach nur eine HTML-Krams anzeigen, 17:24.000 --> 17:26.000 aber ich muss es jetzt halt irgendwie 17:26.000 --> 17:28.000 mit einem Ladespinner versehen, 17:28.000 --> 17:30.000 weil ich es halt dynamisch nachladen muss. 17:30.000 --> 17:32.000 Immerhin geht's, immerhin geht's. 17:32.000 --> 17:34.000 Immerhin geht's. 17:34.000 --> 17:36.000 Der eine Use Case, den ich habe, 17:36.000 --> 17:38.000 ist, dass ich genau wie du gerade meinst, 17:38.000 --> 17:40.000 eine Bibliothek nachladen muss, die relativ groß ist, 17:40.000 --> 17:42.000 aber die brauche ich halt auch nur in dem Fall, 17:42.000 --> 17:44.000 das ist ein Editor, 17:44.000 --> 17:46.000 und dann brauche ich aber nur in dem Fall, 17:46.000 --> 17:48.000 wenn die User auch tatsächlich sagen, 17:48.000 --> 17:50.000 dass sie das nicht editieren, 17:50.000 --> 17:52.000 sonst lade ich es nicht davor, 17:52.000 --> 17:54.000 sonst ist es halt nur eine View davon. 17:54.000 --> 17:56.000 Beim Anfang sind es, glaube ich, ein paar Icons, 17:56.000 --> 17:58.000 die ich nachladen, je nach Case, 17:58.000 --> 18:00.000 ob die User jetzt bestimmte Tools verknüpft haben, 18:00.000 --> 18:02.000 dann brauche ich in dem Fall, 18:02.000 --> 18:04.000 dass sie das verknüpft haben, 18:04.000 --> 18:06.000 dann auch die Icons. 18:06.000 --> 18:08.000 Das weiß ich natürlich nicht vorher, 18:08.000 --> 18:10.000 sondern das klingt ja dann von den Context-Usern ab. 18:10.000 --> 18:12.000 Und dann ist es halt so ein bisschen 18:12.000 --> 18:14.000 kleinseitige Single-Page-Application, 18:14.000 --> 18:16.000 dass ich da sage, ich habe da kleinseitiges Routing, 18:16.000 --> 18:18.000 Routing, 18:18.000 --> 18:20.000 und möchte halt tatsächlich den einen Teil nur laden, 18:20.000 --> 18:22.000 wenn die Page auch angeklickt wird. 18:22.000 --> 18:24.000 Und dann habe ich halt meinen 18:24.000 --> 18:26.000 Loading-Spinner, habe ich natürlich nicht. 18:26.000 --> 18:28.000 Wir haben natürlich so einen coolen, 18:28.000 --> 18:30.000 smoothen Loading-Biken. 18:30.000 --> 18:32.000 So Balken, 18:32.000 --> 18:34.000 cooler als Spinner? 18:34.000 --> 18:36.000 Ja, aktuell, glaube ich, 18:36.000 --> 18:38.000 ist das noch in Mode. 18:38.000 --> 18:40.000 Aber ich habe auch gehört, 18:40.000 --> 18:42.000 ich bin ja millennial, glaube ich, 18:42.000 --> 18:44.000 ich bin mir nicht ganz sicher, 18:44.000 --> 18:46.000 und habe ich über TikTok erfahren. 18:46.000 --> 18:48.000 Ich muss jetzt andere Routines kaufen. 18:48.000 --> 18:50.000 Also vielleicht sind Spinner auch jetzt wieder in. 18:50.000 --> 18:52.000 Und ich habe es noch nicht gemacht. 18:52.000 --> 18:54.000 Ich würde mir jedenfalls sagen, 18:54.000 --> 18:56.000 für so lange du noch Informationen von TikTok beziehst, 18:56.000 --> 18:58.000 ist das Grab noch nicht so nah? 18:58.000 --> 19:00.000 Das war meine Corona-Phase, 19:00.000 --> 19:02.000 wo ich gedacht habe, 19:02.000 --> 19:04.000 Fernsehen ist zu anstrengend. 19:04.000 --> 19:06.000 Ich versuche jetzt mal dieses TikTok, 19:06.000 --> 19:08.000 weil das war nicht ganz so anstrengend, 19:08.000 --> 19:10.000 das war so kurzlebig. 19:10.000 --> 19:12.000 Ich habe jedem geschworen, ich lösche es dann auch wieder. 19:12.000 --> 19:14.000 Oh je. 19:14.000 --> 19:16.000 Okay, also dann geben wir 19:16.000 --> 19:18.000 dem Dynamic Import unseren Daumen hoch. 19:18.000 --> 19:20.000 Und dann kommen wir zum 19:20.000 --> 19:22.000 Nallish Corlessing. Jawoll. 19:22.000 --> 19:24.000 Steht es 19:24.000 --> 19:26.000 und ständig bei mir? 19:26.000 --> 19:28.000 Tatsächlich. 19:28.000 --> 19:30.000 Ich weiß, was es ist. 19:30.000 --> 19:32.000 Ich habe es noch nie benutzt. 19:32.000 --> 19:34.000 Und dann frage ich mich die ganze Zeit, 19:34.000 --> 19:36.000 bin ich zu doof, mich zu dran erinnern 19:36.000 --> 19:38.000 und ich bräuchte es eigentlich, 19:38.000 --> 19:40.000 oder hatte ich tatsächlich den Use Case noch nicht? 19:40.000 --> 19:42.000 Also, wir reden ja davon 19:42.000 --> 19:44.000 von diesen doppelten Fragezeichen, 19:44.000 --> 19:46.000 zu sagen Null 19:46.000 --> 19:48.000 Fragezeichen, Fragezeichen 19:48.000 --> 19:50.000 oder eben was anderes. 19:50.000 --> 19:52.000 Und was ich natürlich schon häufig mache, 19:52.000 --> 19:54.000 ist, dass ich schreibe 19:54.000 --> 19:56.000 irgendwas 19:56.000 --> 19:58.000 oder oder irgendwas anderes. 19:58.000 --> 20:00.000 Und der Unterschied zwischen den beiden 20:00.000 --> 20:02.000 ist, dass dieses oder oder Zeichen, 20:02.000 --> 20:04.000 die Pi-Pipe, dafür steht, 20:04.000 --> 20:06.000 dass es irgendein Falsive Value sein kann, 20:06.000 --> 20:08.000 also auch eine Negatriefe 20:08.000 --> 20:10.000 oder ein leerer 20:10.000 --> 20:12.000 String. 20:12.000 --> 20:14.000 Eine negative Nummer ist doch Truthie. 20:14.000 --> 20:16.000 Eine Null ist 20:16.000 --> 20:18.000 Volzi. 20:18.000 --> 20:20.000 Korrekt, danke. 20:20.000 --> 20:22.000 Und hier bei dem 20:22.000 --> 20:24.000 Fragezeichen geht es nur um 20:24.000 --> 20:26.000 Null oder Andefind. 20:26.000 --> 20:28.000 Genau. Und du hast 20:28.000 --> 20:30.000 jetzt gerade ja auch die beste 20:30.000 --> 20:32.000 Erklärung geliefert, warum man lieber 20:32.000 --> 20:34.000 zwei Fragezeichen statt zwei Odas 20:34.000 --> 20:36.000 verwenden würde. 20:36.000 --> 20:38.000 Weil dann ist halt eben diese ganze Truthie 20:38.000 --> 20:40.000 Vollzieggeschichte, die halt aber echt nicht einfach 20:40.000 --> 20:42.000 selbst, wenn man sie irgendwie 20:42.000 --> 20:44.000 im Kopf hat, hat man sie halt immer noch nicht... 20:44.000 --> 20:46.000 Ist mir jetzt ganz fertig. 20:46.000 --> 20:48.000 Ja, minus Null ist nicht Truthie, aber minus 20:48.000 --> 20:50.000 eins. 20:50.000 --> 20:52.000 Also es sei denn, ich habe jetzt irgendwie 20:52.000 --> 20:54.000 Brainfog. 20:54.000 --> 20:56.000 Schon? 20:58.000 --> 21:00.000 Also, wenn man sich halt mal die Bits und Bytes anguckt, 21:00.000 --> 21:02.000 dann schon, ne? Ja, ja, ja. 21:02.000 --> 21:04.000 Aber sonst, das kannst du halt doch keinem 21:04.000 --> 21:06.000 machen. 21:06.000 --> 21:08.000 So, das teste ich jetzt auch nach. 21:08.000 --> 21:10.000 Ja, Truthie. 21:14.000 --> 21:16.000 Ja, gut. 21:16.000 --> 21:18.000 Gut, dass es das gibt. 21:18.000 --> 21:20.000 Nicht wahr? 21:20.000 --> 21:22.000 Also ich verwende das halt einfach ganz gern um zu sagen, 21:22.000 --> 21:24.000 halt die Klappe TypeScript, das passiert eh nicht. 21:24.000 --> 21:26.000 Also so. 21:26.000 --> 21:28.000 Der TypeScript vollzieht ja nach, wenn sozusagen 21:28.000 --> 21:30.000 man einen Programmfahrt genommen hat, der in der 21:30.000 --> 21:32.000 Exception endet. 21:32.000 --> 21:34.000 Das heißt einfach nur Fail, die schmeißt eine Exception. 21:34.000 --> 21:36.000 Und die hat nur den Grund, dass sich an Stellen, 21:36.000 --> 21:38.000 wo eine Expression stehen kann, eine Exception 21:38.000 --> 21:40.000 auslösen kann, also ein Programmablauf 21:40.000 --> 21:42.000 zu sagen kann. Also wenn ich halt irgendwie weiß, 21:42.000 --> 21:44.000 so, well, die variable Foo 21:44.000 --> 21:46.000 enthält laut Typsystem entweder 21:46.000 --> 21:48.000 ein String oder undyfeind. 21:48.000 --> 21:50.000 Ich weiß aber, aufgrund des Programmablaufs, 21:50.000 --> 21:52.000 dass es eigentlich nur undyfeind ist, 21:52.000 --> 21:54.000 wenn wirklich irgendwas krass schief gelaufen ist, 21:54.000 --> 21:56.000 dann habe ich halt irgendwie 21:56.000 --> 21:58.000 so was wie Foo, Fragezeichen, Fragezeichen, 21:58.000 --> 22:00.000 Fail, das sollte niemals passieren. 22:00.000 --> 22:02.000 Mhm, ja. 22:02.000 --> 22:04.000 So sieht es meistens aus. 22:04.000 --> 22:06.000 Ach so, ja, ja, ja, ja, verstehe, das ist 22:06.000 --> 22:08.000 ein bisschen eleganter als die Lösungen, die ich hab. 22:08.000 --> 22:10.000 Es gefällt mir, was du sagst. 22:10.000 --> 22:12.000 Wie sehen die aus? 22:12.000 --> 22:14.000 Ja, das ist dann so ein if 22:14.000 --> 22:16.000 Ausruckverzeichen, Objekt 22:16.000 --> 22:18.000 Schwerfen mal ein Error. 22:18.000 --> 22:20.000 Genau, genau, das ist es 22:20.000 --> 22:22.000 nur halt eben als Einzeiler. 22:22.000 --> 22:24.000 Und das Schöne ist halt, wenn du sowieso nicht 22:24.000 --> 22:26.000 davon ausgehst, dass das passiert, wenn 22:26.000 --> 22:28.000 alles einigermaßen normal läuft, 22:28.000 --> 22:30.000 dann steht das halt weniger im Weg rum als 22:30.000 --> 22:32.000 so ein if-Branch. 22:32.000 --> 22:34.000 Richtig, deswegen sage ich gerade, es ist 22:34.000 --> 22:36.000 ein bisschen elegante. 22:36.000 --> 22:38.000 Zu Minus 1 ist mir gerade noch eine andere Geschichte 22:38.000 --> 22:40.000 eingefallen, bei Inputfeldern vom Type Number 22:40.000 --> 22:42.000 kann ich ja Min und Max Werte eingeben 22:42.000 --> 22:44.000 und worüber 22:44.000 --> 22:46.000 ich selber auch immer wieder stolper, 22:46.000 --> 22:48.000 das bedeutet nicht zwangsweise, 22:48.000 --> 22:50.000 dass man nicht auch tatsächlich negative Zahlen 22:50.000 --> 22:52.000 eingeben kann. 22:52.000 --> 22:54.000 Das stimmt. 22:54.000 --> 22:56.000 Ich glaube, man kann per Pfeiltasten 22:56.000 --> 22:58.000 nicht unter 5 drücken, 22:58.000 --> 23:00.000 aber man kann es auf jeden Fall noch schaffen, 23:00.000 --> 23:02.000 den Minus zu schreiben. 23:02.000 --> 23:04.000 Genau. 23:04.000 --> 23:06.000 Und dann ist das, ich glaube, da haben wir 23:06.000 --> 23:08.000 jetzt so ein bisschen ein Problem 23:08.000 --> 23:10.000 von unseren Superduper Frameworks 23:10.000 --> 23:12.000 und wir haben alles im Klient 23:12.000 --> 23:14.000 und zur Frontend getrennt, 23:14.000 --> 23:16.000 ist, dass ich in der Wildnis 23:16.000 --> 23:18.000 immer weniger richtige Formular 23:18.000 --> 23:24.000 habe, die ich in der Wildnis 23:24.000 --> 23:26.000 immer weniger richtige Formulare 23:26.000 --> 23:28.000 mit so Buttons vom Typen Submit sehe, 23:28.000 --> 23:30.000 sondern eher so Buttons 23:30.000 --> 23:32.000 vom Typ Button 23:32.000 --> 23:34.000 und die machen dann halt 23:34.000 --> 23:36.000 einen API-Request, einen Fetch-Request, 23:36.000 --> 23:38.000 aber die schicken dann halt 23:38.000 --> 23:40.000 einzelne Inputfelder ab, aber das Ganze 23:40.000 --> 23:42.000 ist keine Form mehr. 23:42.000 --> 23:44.000 Da wird dann nichts mehr validiert. 23:44.000 --> 23:46.000 Das Problem ist ja, wenn ich eine Form, 23:46.000 --> 23:48.000 also das Diskute ist ja, wenn ich eine Form habe 23:48.000 --> 23:50.000 mit einem Button, der Submit ist, 23:50.000 --> 23:52.000 dann wird ja immer noch die HTML-Validierung 23:52.000 --> 23:54.000 eben gesagt, hey, dein Wert ist kleiner 23:54.000 --> 23:56.000 als null, aber wir brauchen 23:56.000 --> 23:58.000 hier halt einen positiven Wert, oder wir brauchen 23:58.000 --> 24:00.000 ein Datum in der Zukunft. Dann hat man 24:00.000 --> 24:02.000 diese In-House-Validierung gleich mit 24:02.000 --> 24:04.000 geliefert im Browser. 24:04.000 --> 24:06.000 Aber ist hier schon öfter, dass das einfach nur Buttons sind, 24:06.000 --> 24:08.000 die dann Request abfeuern, aber 24:08.000 --> 24:10.000 keine Forms mitmachen? 24:10.000 --> 24:12.000 Das gibt es also zu 24:12.000 --> 24:14.000 deinem, in der Erklärung zum Number 24:14.000 --> 24:16.000 würde ich noch hinzufügen, du hast ja gesagt mit den Falttasten 24:16.000 --> 24:18.000 und den kleinen Buttons rauf und runter 24:18.000 --> 24:20.000 kann man nicht dieses Limit reißen. 24:20.000 --> 24:22.000 Das sagt ja der Standard tatsächlich nicht. 24:22.000 --> 24:24.000 Das ist tatsächlich den Browser überlassen, 24:24.000 --> 24:26.000 dass sie das so umsetzen. Und das machen die, 24:26.000 --> 24:28.000 glaube ich, alle so. Aber der Punkt 24:28.000 --> 24:30.000 ist halt gedacht, also ein 24:30.000 --> 24:32.000 Feld, das am Ende ein 24:32.000 --> 24:34.000 Wert modelliert, der ein numerischer 24:34.000 --> 24:36.000 gültiger Wert ist, definiert 24:36.000 --> 24:38.000 durch MinMax und den ganzen anderen Kram. 24:38.000 --> 24:40.000 Das ist das eine. 24:40.000 --> 24:42.000 Und das andere ist, nee, die sind keine Forms mehr, 24:42.000 --> 24:44.000 weil wenn du halt eben hingehst und sagst, 24:44.000 --> 24:46.000 hier hast du mal fünf Formular-Validierung, 24:46.000 --> 24:48.000 dann kommt halt zuerst, ja, das sieht ja doof aus. 24:48.000 --> 24:50.000 Das ist halt, machst es halt schön. 24:50.000 --> 24:52.000 Das sieht ja doof aus. 24:52.000 --> 24:54.000 Das passt schon. 24:54.000 --> 24:56.000 Das ist so auch was, was 24:56.000 --> 24:58.000 ich sage, das habe ich aber in meinem 24:58.000 --> 25:00.000 Argumentationsarsenal hinten angestellt, 25:00.000 --> 25:02.000 weil das Konzept einer 80-20-Lösung 25:02.000 --> 25:04.000 in einer Welt, in der du dir auch 25:04.000 --> 25:06.000 einfach 17 Gigabyte NPM 25:06.000 --> 25:08.000 UI-Library installieren könntest, so gut nicht 25:08.000 --> 25:10.000 zählt. Aber eigentlich ist es ja so, 25:10.000 --> 25:12.000 du könntest das nehmen, du hättest 80% schon mal 25:12.000 --> 25:14.000 da, zack Prototypen ohne irgendwas zu tun 25:14.000 --> 25:16.000 gemacht und dann machst es halt noch schön 25:16.000 --> 25:18.000 aus deinen eigenen Formular-Validierungsregeln wieder 25:18.000 --> 25:20.000 da dran. Aber nein, bei Formular-Validierung 25:20.000 --> 25:22.000 ist es genauso wie mit irgendwie modernen Frontends. 25:22.000 --> 25:24.000 Statt dass man einfach irgendwie so einen Submit-Button 25:24.000 --> 25:26.000 zum Submitten nimmt, baut man alles aus Diffs neu auf 25:26.000 --> 25:28.000 oder im Falle von Formular-Validierung 25:28.000 --> 25:30.000 alles mit regulären Ausdrücken von Null wieder aufbauen. 25:30.000 --> 25:32.000 Ich verstehe das auch nicht. 25:32.000 --> 25:34.000 Wahrscheinlich bin ich einfach jetzt hier der alte Grandlar, 25:34.000 --> 25:36.000 der sagt, früher haben wir das doch auch. 25:36.000 --> 25:38.000 Nee, ich verstehe es nicht. 25:38.000 --> 25:40.000 Dass wir alle immer wieder von vorne 25:40.000 --> 25:42.000 von vorne immer wieder 25:42.000 --> 25:44.000 Validierung geschrieben müssen, das ist total getontant. 25:44.000 --> 25:46.000 Ich habe die letzten so paar interne Tools gebaut. 25:46.000 --> 25:48.000 Einfach nur für mich selber, einfach so 25:48.000 --> 25:50.000 Formular, Local Storage, 25:50.000 --> 25:52.000 komplett Vanilla und halt eben 25:52.000 --> 25:54.000 so eine ganze Menge inner HTML und 25:54.000 --> 25:56.000 zwei Web-Components. 25:56.000 --> 25:58.000 Das ist total gammelig, damit kannst du dich halt 25:58.000 --> 26:00.000 echt nicht blicken lassen. Aber ich war halt eben 26:00.000 --> 26:02.000 nach einem Nachmittag fertig und hatte mir drei interne Tools gebaut, 26:02.000 --> 26:04.000 die halt voll gut funktionieren. 26:04.000 --> 26:06.000 In der Zeit installiert sich 26:06.000 --> 26:08.000 Create-React-App nicht mal. 26:10.000 --> 26:12.000 Dann brauchen wir aber schnellere Suite, aber das kommt 26:12.000 --> 26:14.000 später, glaube ich, noch. 26:14.000 --> 26:16.000 Weil als nächstes kommen 26:16.000 --> 26:18.000 Private Feels und der Klasse. 26:18.000 --> 26:20.000 Da übergebe ich doch gleich an dich. 26:20.000 --> 26:22.000 Ja, super. Ständig benutzt 26:22.000 --> 26:24.000 immer, wenn ich eine Klasse schreibe, also Web-Komponent 26:24.000 --> 26:26.000 oder Gebömsel. Darf ich das 26:26.000 --> 26:28.000 Private zu verstehen, wie es in 26:28.000 --> 26:30.000 objektorientierten Sprachen auch einfach ist? 26:30.000 --> 26:32.000 Ist es halt nicht public, ist es private? 26:32.000 --> 26:34.000 So ist es. Das ist private. 26:34.000 --> 26:36.000 Und ich muss es nicht mehr mit einem underscore 26:36.000 --> 26:38.000 prefixen, um zu sagen, bitte, bitte nicht benutzen. 26:38.000 --> 26:40.000 Na, du musst es mit der Route prefixen. 26:40.000 --> 26:42.000 Aber ist es dann 26:42.000 --> 26:44.000 von außen sichtbar und ich weiß, 26:44.000 --> 26:46.000 ich darf es nicht benutzen, weil es eine Route hat 26:46.000 --> 26:48.000 oder ist es von außen tatsächlich nicht mehr sichtbar? 26:48.000 --> 26:50.000 Es ist von außen nicht 26:50.000 --> 26:52.000 accessible. 26:52.000 --> 26:54.000 Also es ist insofern sichtbar, 26:54.000 --> 26:56.000 als dass du, wenn du versuchst, 26:56.000 --> 26:58.000 einen Zugriff zu machen, eine sehr spezifische 26:58.000 --> 27:00.000 Fehlermeldung bekommst. 27:00.000 --> 27:02.000 Der Trick ist der folgende. 27:02.000 --> 27:04.000 Route am Start von einem Identifier war nicht gültig. 27:04.000 --> 27:06.000 Hat man jetzt zugelassen 27:06.000 --> 27:08.000 für den Spezialfall, 27:08.000 --> 27:10.000 in einer Klasse sich befindet, 27:10.000 --> 27:12.000 da darf man so ein Identifier schreiben. 27:12.000 --> 27:14.000 Weil man dann auch die Scope-Check-Regeln, 27:14.000 --> 27:16.000 wo man halt eben guckt, ist dieses Ding hier überhaupt 27:16.000 --> 27:18.000 accessible, gibt es einen 27:18.000 --> 27:20.000 Feld mit diesem Namen, 27:20.000 --> 27:22.000 von neu auf erfinden kann. 27:22.000 --> 27:24.000 Und hat dann sozusagen den gleichen Mechanismus, 27:24.000 --> 27:26.000 der dir ja auch sagt, wenn du irgendwie eine Variable 27:26.000 --> 27:28.000 zweimal definierst, let x, gleich 1, let x, gleich 2, 27:28.000 --> 27:30.000 dann kriegst du ja eine Exception, bevor das Programm 27:30.000 --> 27:32.000 läuft im Rahmen des Sündtags-Checks. 27:32.000 --> 27:34.000 Und der Mechanismus ist quasi für die privaten Felder 27:34.000 --> 27:36.000 in den Klassen gehighjacked, 27:36.000 --> 27:38.000 wenn wir mal einen OOP sprachen, 27:38.000 --> 27:40.000 da sind ja diese Features 27:40.000 --> 27:42.000 Public Private Protected, Features vom Typsystem, 27:42.000 --> 27:44.000 damit du einen Error kriegst, bevor das Programm läuft. 27:44.000 --> 27:46.000 Und du willst ja auch einen Error kriegen 27:46.000 --> 27:48.000 in JavaScript, bevor das Programm läuft, 27:48.000 --> 27:50.000 hast aber keinen Compile-Ergum, musst du den Sündtagschecker 27:50.000 --> 27:52.000 dazu highlighten, und deswegen ist die Route 27:52.000 --> 27:54.000 Namensbestandteil des Identifiers. 27:54.000 --> 27:56.000 Das ist voll gut, da kann man wunderbar 27:56.000 --> 27:58.000 so auch Java-Leute mit trollen, 27:58.000 --> 28:00.000 auf Konferenzen, wo man irgendwie so sagt, 28:00.000 --> 28:02.000 hier Web-Technologieüberblick für Backendler, 28:02.000 --> 28:04.000 kann man irgendwie so sagen, kannst du private Felder machen? 28:04.000 --> 28:06.000 Du kannst es auch mit TypeScript kombinieren. 28:06.000 --> 28:08.000 Yay, aber dann hast du sowohl 28:08.000 --> 28:10.000 das Rauteprivate als auch das Private Keyword 28:10.000 --> 28:12.000 von TypeScript, und die machen beide 28:12.000 --> 28:14.000 unterschiedliche Dinge, und dann ist es 28:14.000 --> 28:16.000 wieder so, braaaah, das hat Entwicklung. 28:16.000 --> 28:18.000 Das macht sehr viel Spaß. 28:18.000 --> 28:20.000 Da hätten wir halt alle mal was Kreins gelernt. 28:20.000 --> 28:22.000 So, aber benutzt hast du die noch nicht, 28:22.000 --> 28:24.000 weil Klassen doof sind? 28:24.000 --> 28:26.000 Ich sage nicht, dass Klassen doof sind, 28:26.000 --> 28:28.000 es ist nur absolut nicht in meinem Use-Case. 28:28.000 --> 28:30.000 Public static void main. 28:30.000 --> 28:32.000 Ja. 28:32.000 --> 28:34.000 Public static void main. 28:34.000 --> 28:36.000 Okay, aber dann würde ich sagen, 28:36.000 --> 28:38.000 runden wir mal auf zu I've used it, oder? 28:38.000 --> 28:40.000 Ja. 28:40.000 --> 28:42.000 Ich habe auch ein bisschen mal benutzt. 28:42.000 --> 28:44.000 Okay, dann zählt das. 28:44.000 --> 28:46.000 Ich hätte sowieso noch eine Frage, 28:46.000 --> 28:48.000 wo ich hier gerade mal die View-Expertin 28:48.000 --> 28:50.000 am Start habe. 28:50.000 --> 28:52.000 Ich war so bei Firma, guckst du an deren 28:52.000 --> 28:54.000 Source Code rein, und die so, 28:54.000 --> 28:56.000 ich habe hier unerklärliche 28:56.000 --> 28:58.000 Typefehler. 28:58.000 --> 29:00.000 In View verwendet man 29:00.000 --> 29:02.000 eigentlich unter gar keinen Umständen 29:02.000 --> 29:04.000 irgendwo mal eine Klasse, oder? 29:04.000 --> 29:06.000 Ich würde jetzt 29:06.000 --> 29:08.000 darauf tippen, dass das ein View 2 29:08.000 --> 29:10.000 Projekt war mit der 29:10.000 --> 29:12.000 Class Style API. 29:12.000 --> 29:14.000 Das war 3. 29:14.000 --> 29:16.000 Das war 3, nee. 29:16.000 --> 29:18.000 Die haben nämlich so ihre ganzen 29:18.000 --> 29:20.000 Geschichten 29:20.000 --> 29:22.000 für Backend-Anbindung, API-Calls und 29:22.000 --> 29:24.000 Zeug halt in Klassen ausmodelliert, 29:24.000 --> 29:26.000 weil die kannten das halt, das waren 29:26.000 --> 29:28.000 Backendler. 29:28.000 --> 29:30.000 Die haben halt so Sachen gemacht, wie 29:30.000 --> 29:32.000 wir nehmen diese Klassen-Instanzen, 29:32.000 --> 29:34.000 die mit TypeScript geschrieben sind, 29:34.000 --> 29:36.000 die sie halt auch so public und private 29:36.000 --> 29:38.000 und protected und so Zeug sind, 29:38.000 --> 29:40.000 und stopfen die halt in solche View- 29:40.000 --> 29:42.000 Konstruktionen, wie so Refs rein. 29:42.000 --> 29:44.000 Ja. 29:44.000 --> 29:46.000 Und dann kamen die halt eben da raus 29:46.000 --> 29:48.000 mit so einer ungefähr gleichen 29:48.000 --> 29:50.000 API, so das lief zur Laufzeit 29:50.000 --> 29:52.000 alles, aber TypeScript hat dann halt 29:52.000 --> 29:54.000 eben behauptet, diese Dinger seien 29:54.000 --> 29:56.000 tatsächlich keine exakten Instanzen 29:56.000 --> 29:58.000 für die Teile, die so Reaktivität 29:58.000 --> 30:00.000 implementieren. 30:00.000 --> 30:02.000 Ja, genau. 30:02.000 --> 30:04.000 So sah das nämlich für mich dann auch irgendwann aus, 30:04.000 --> 30:06.000 dass da man irgendwie A reinsteckt, 30:06.000 --> 30:08.000 man kriegt aber B raus und B hat halt 30:08.000 --> 30:10.000 irgendwie... Ja, das sind die Proxis, die rauskommen. 30:10.000 --> 30:12.000 Genau. 30:12.000 --> 30:14.000 Und weil diese Proxis natürlich dann die 30:14.000 --> 30:16.000 ganzen Privatheiten von diesen Klassen 30:16.000 --> 30:18.000 nicht beinhalten, sind die natürlich 30:18.000 --> 30:20.000 nicht mehr der exakt gleiche Typ. 30:20.000 --> 30:22.000 Nee, überhaupt nicht. 30:22.000 --> 30:24.000 Das macht halt nicht so Sinn. 30:24.000 --> 30:26.000 Das muss man schon so machen. 30:26.000 --> 30:28.000 Aber es ist halt dann komisch. 30:28.000 --> 30:30.000 Ja, man muss halt überall dann SA 30:30.000 --> 30:32.000 nicht ranklatschen, damit man halt eben 30:32.000 --> 30:34.000 TypeScript sagt so, ich weiß, dass es 30:34.000 --> 30:36.000 technisch gesehen nicht exakt ist, aber... 30:36.000 --> 30:38.000 Ja, aber dann... 30:38.000 --> 30:40.000 Also es ist halt wirklich so, es sollte 30:40.000 --> 30:42.000 schon irgendwie einfach ein Objekt, es 30:42.000 --> 30:44.000 darf ein Objekt sein, es darf ein 30:44.000 --> 30:46.000 Area sein und jeder primitiver Typ. 30:46.000 --> 30:48.000 Aber alles, was zu über hinaus geht, macht 30:48.000 --> 30:50.000 dann halt einfach nicht mehr so viel Sinn, 30:50.000 --> 30:52.000 dass man dann ein Proxytraum rumhaut. 30:52.000 --> 30:54.000 Das ist ein normaler, daher gelaufene 30:54.000 --> 30:56.000 View-Entwicklerin oder View-Entwickler. 30:56.000 --> 30:58.000 Also weiß man das. 30:58.000 --> 31:00.000 Weil wir mussten da echt einen ganzen Name 31:00.000 --> 31:02.000 darauf rumkommen, bis wir überhaupt auf die Idee 31:02.000 --> 31:04.000 gekommen sind, dass das sein könnte. 31:04.000 --> 31:06.000 Die hatten keine Ahnung von TypeScript, ich hatte 31:06.000 --> 31:08.000 keine Ahnung von View. 31:08.000 --> 31:10.000 Ich denke, das Problem ist, dass die 31:10.000 --> 31:12.000 Standard-View-Entwickler-Personen 31:12.000 --> 31:14.000 nicht von dieser TypeScript-Back-Entrichtung 31:14.000 --> 31:16.000 kommen. Also wir würden nicht auf die Idee 31:16.000 --> 31:18.000 kommen, eine Klasse zu schreiben. 31:18.000 --> 31:20.000 Wir schreiben halt einfach nur Areas und 31:20.000 --> 31:22.000 sind nicht in meiner Wappel. 31:22.000 --> 31:24.000 Und dann besteht auch 31:24.000 --> 31:26.000 keine sozusagen Veranlassung, 31:26.000 --> 31:28.000 das groß zu dokumentieren oder zu 31:28.000 --> 31:30.000 besprechen, dass man das einfach so wüsste. 31:30.000 --> 31:32.000 Ja, weil es ist ja irgendwie klar, 31:32.000 --> 31:34.000 dass es dann so funktioniert. 31:34.000 --> 31:36.000 Also der einzige Streit, den sonst immer 31:36.000 --> 31:38.000 nur gibt, nimmt man jetzt Ref oder Reactive. 31:38.000 --> 31:40.000 Es ist ungefähr das Gleiche, bei 31:40.000 --> 31:42.000 dem einschreibste Punkt Value dahinter, 31:42.000 --> 31:44.000 beim anderem nicht. 31:44.000 --> 31:46.000 Das ist mal kurob zusammengefasst. 31:46.000 --> 31:48.000 Aber es gab 31:48.000 --> 31:50.000 Ref und Reactive. 31:50.000 --> 31:52.000 Ansonsten gibt es keine weiteren Fragen. 31:52.000 --> 31:54.000 Es gibt andere TypeScript-Fragen. 31:54.000 --> 31:56.000 Das ist aber eher so was 31:56.000 --> 31:58.000 konzeptspezifischeres. 31:58.000 --> 32:00.000 Und ansonsten 32:00.000 --> 32:02.000 bei View und TypeScript zusammen 32:02.000 --> 32:04.000 ist es so, ich weiß immer 32:04.000 --> 32:06.000 gar nicht, ob ich jetzt sagen soll, ich benutze 32:06.000 --> 32:08.000 TypeScript, weil ich fühle mich immer nur, 32:08.000 --> 32:10.000 als würde ich TypeScript-Light verwenden. 32:10.000 --> 32:12.000 Wenn ich jetzt in 32:12.000 --> 32:14.000 VS Code in der IDE schreibe, 32:14.000 --> 32:16.000 const items equals 32:16.000 --> 32:18.000 und dann halt ein Array da drinnen, 32:18.000 --> 32:20.000 dann weiß 32:20.000 --> 32:22.000 VS Code und die 32:22.000 --> 32:24.000 Extensions, die wissen ja schon automatisch, 32:24.000 --> 32:26.000 dass das jetzt ein Typ ist 32:26.000 --> 32:28.000 von Array, von Typen items 32:28.000 --> 32:30.000 automatisch. 32:30.000 --> 32:32.000 Die meiste Magie hat man dann damit schon 32:32.000 --> 32:34.000 fast erledigt. 32:34.000 --> 32:36.000 Oder ich habe halt irgendwie meinen Store, 32:36.000 --> 32:38.000 mein State Management und sage an, 32:38.000 --> 32:40.000 hier erwarte ich entweder einen User-Objekt 32:40.000 --> 32:42.000 oder halt andefined 32:42.000 --> 32:44.000 oder null, ich weiß immer nicht, was besser 32:44.000 --> 32:46.000 ist dann die meiste TypeScript-Magie 32:46.000 --> 32:48.000 schon dahinter. 32:48.000 --> 32:50.000 Na ja, aber das finde ich eigentlich 32:50.000 --> 32:52.000 ist genau der, 32:52.000 --> 32:54.000 da wo man eigentlich sein möchte. 32:54.000 --> 32:56.000 Ja, ich bin da supergerne. 32:56.000 --> 32:58.000 Ich predige auch immer, dass man dahin will. 32:58.000 --> 33:00.000 Also wenn man halt eben genau das macht, was du grad beschrieben hast, 33:00.000 --> 33:02.000 man bewegt sich halt innerhalb dieses Frameworks, 33:02.000 --> 33:04.000 da ist ja wirklich die Idee, 33:04.000 --> 33:06.000 man schreibt ja im Prinzip den Code 33:06.000 --> 33:08.000 und füllt im Prinzip, es ist ja so ein bisschen 33:08.000 --> 33:10.000 malen nach Zahlen, ne? Nimm diesen Standard Store 33:10.000 --> 33:12.000 und nimm dieses Standard Schreibweise, 33:12.000 --> 33:14.000 das Standard Komponente zu bauen 33:14.000 --> 33:16.000 und dann beschreibe im Prinzip wie aus den Daten am Ende 33:16.000 --> 33:18.000 der schöne View wird. 33:18.000 --> 33:20.000 Das heißt du bist ja ständig 33:20.000 --> 33:22.000 im Kontakt mit irgendwelchen Dingern, die sozusagen 33:22.000 --> 33:24.000 dafür sorgen, dass 33:24.000 --> 33:26.000 die Typen 33:26.000 --> 33:28.000 required und halt eben auch vergeben werden 33:28.000 --> 33:30.000 und dann musst du das nicht machen und diese ganze 33:30.000 --> 33:32.000 advanced TypeScript hier, was der Stefan und ich immer 33:32.000 --> 33:34.000 so rum fabulieren, 33:34.000 --> 33:36.000 das brauchst du halt um das zu ermöglichen, aber wenn es dir schon ermöglicht wird, 33:36.000 --> 33:38.000 weil View halt eben ordentlich aufgezogen ist, 33:38.000 --> 33:40.000 dann profitierst du einfach nur 33:40.000 --> 33:42.000 und dann ist das nicht TypeScript Lite, sondern dann stehst du halt 33:42.000 --> 33:44.000 eben einfach auf den Schultern von Riesen und das ist voll gut 33:44.000 --> 33:46.000 und wenn man da nicht steht und ständig an Variablen 33:46.000 --> 33:48.000 Typen dranschreiben muss, dann macht entweder 33:48.000 --> 33:50.000 man was falsch oder das 33:50.000 --> 33:52.000 Framework, mit dem man zu tun hat, macht was falsch. 33:52.000 --> 33:54.000 Das ist nicht TypeScript Lite, das ist TypeScript 33:54.000 --> 33:56.000 TypeScript Right. 33:56.000 --> 33:58.000 Sehr gut. 33:58.000 --> 34:00.000 Sehr gut. 34:00.000 --> 34:02.000 Komm wir als nächstes, 34:02.000 --> 34:04.000 ich glaube wieder zu anders Kurs, 34:04.000 --> 34:06.000 wenn ich mich nicht täusche bei den 34:06.000 --> 34:08.000 Numeric Separators. 34:08.000 --> 34:10.000 Wenn ich das richtig verstehe, ist das 34:10.000 --> 34:12.000 einfach nur für Menschenlesbarkeit, 34:12.000 --> 34:14.000 dass wenn ich jetzt eine lange Zahl habe, so 34:14.000 --> 34:16.000 eine Milliarde oder sowas, da wo ich schon gar nicht 34:16.000 --> 34:18.000 mehr weiß, wie viele Nullen das hat, 34:18.000 --> 34:20.000 dass ich mir dann anders score, so nach allen 34:20.000 --> 34:22.000 drei Ziffern schreiben kann, 34:22.000 --> 34:24.000 die der Computer ignoriert, 34:24.000 --> 34:26.000 aber ich kann es besser lesen, ist das korrekt? 34:26.000 --> 34:28.000 Genau, so ist das. 34:28.000 --> 34:30.000 Der einzige Unterschied ist halt nur, 34:30.000 --> 34:32.000 du musst noch deinen inneren Troll channeln. 34:32.000 --> 34:34.000 Du kannst diese anders score 34:34.000 --> 34:36.000 nach allen drei Zeichen machen, aber eigentlich 34:36.000 --> 34:38.000 ist das einfach nur ein Know-of 34:38.000 --> 34:40.000 in der Sonntags. 34:40.000 --> 34:42.000 Du kannst auch irgendwie nach jedem Zeichen 34:42.000 --> 34:44.000 einen anders score machen. 34:44.000 --> 34:46.000 Kann ich auch zwei schreiben, anders score, anders score? 34:46.000 --> 34:48.000 Das weiß ich jetzt natürlich nicht. 34:48.000 --> 34:50.000 Ausprobieren? 34:50.000 --> 34:52.000 Keine Ahnung, eins, anders score, anders score, 34:52.000 --> 34:54.000 eins, anders score, anders score, eins. 34:54.000 --> 34:56.000 Nee, das geht nicht. 34:56.000 --> 34:58.000 The only one anders score is allowed as a Numeric 34:58.000 --> 35:00.000 Separator. Also genau für den Fall 35:00.000 --> 35:02.000 ist im Browser ein String hinterlegt mit der 35:02.000 --> 35:04.000 korrekten Fehlermeldung. 35:04.000 --> 35:06.000 Ja, dieser Aufristin, 35:06.000 --> 35:08.000 die beim Browser programmieren, 35:08.000 --> 35:10.000 betreiben müssen einfach nur, weil hier zwei Leute 35:10.000 --> 35:12.000 ... 35:12.000 --> 35:14.000 Oh, schon wieder eine Extension in Sentry. 35:14.000 --> 35:16.000 Da darfst du schon wieder ausprobieren. 35:16.000 --> 35:18.000 Okay. 35:18.000 --> 35:20.000 Das ist also auch eigentlich 35:20.000 --> 35:22.000 eine schöne Trollmethode. 35:22.000 --> 35:24.000 Wenn man irgendwo 35:24.000 --> 35:26.000 detected, dass die Seite Sentry hat, 35:26.000 --> 35:28.000 braucht man eine Browser Extension, die einfach 35:28.000 --> 35:30.000 so random garbage auslöst. 35:30.000 --> 35:32.000 Ja, das wäre ganz toll. 35:32.000 --> 35:34.000 Das funktioniert 35:34.000 --> 35:36.000 schon immer jedes Mal, wenn Safari Update 35:36.000 --> 35:38.000 rauskommt, dass 35:38.000 --> 35:40.000 Stunden später beim Sentry 35:40.000 --> 35:42.000 mal rot ist. Alle fragen mich, was 35:42.000 --> 35:44.000 los passiert, geht unsere Webseite 35:44.000 --> 35:46.000 noch? Ja, ja, es ist eine neue Safari. 35:46.000 --> 35:48.000 Die wissen das in Early Birds, die wissen 35:48.000 --> 35:50.000 schon Bescheid gar keine Webseite. 35:50.000 --> 35:52.000 Nee, ich weiß gar nicht, dass Safari war, 35:52.000 --> 35:54.000 glaube ich, sogar ganz gut. 35:54.000 --> 35:56.000 Man könnte da wirklich auch schöne 35:56.000 --> 35:58.000 Exceptions auslösen, einfach so 35:58.000 --> 36:00.000 besser zum Spaß. Also so was wie mit den 36:00.000 --> 36:02.000 Stringfroton-Types. 36:02.000 --> 36:04.000 Ja, super. 36:04.000 --> 36:06.000 Da hast du normale Menschen, die halt 36:06.000 --> 36:08.000 das gar nicht wissen, dass es existiert. 36:08.000 --> 36:10.000 Die müssen erst mal gucken, 36:10.000 --> 36:12.000 was? 36:12.000 --> 36:14.000 Oder weißt du, 36:14.000 --> 36:16.000 einfach so eine Exception 36:16.000 --> 36:18.000 schmeißen in eines Händes überwachter Webseite. 36:18.000 --> 36:20.000 Verdammt, der Bitcoin-Mainer ist abgestürzt 36:20.000 --> 36:22.000 und muss neu gestartet werden. 36:22.000 --> 36:24.000 Oh je. 36:24.000 --> 36:26.000 Gehen wir lieber ganz schnell weiter 36:26.000 --> 36:28.000 zu Stringfroton-Type 36:28.000 --> 36:30.000 Ja, gut, ich replace 36:30.000 --> 36:32.000 tatsächlich. Replace du 36:32.000 --> 36:34.000 Sachen in Strings 36:34.000 --> 36:36.000 in der Realität? 36:38.000 --> 36:40.000 Sagen wir mal so, 36:40.000 --> 36:42.000 das kommt 36:42.000 --> 36:44.000 durchaus schon vor, weil ich ja auch 36:44.000 --> 36:46.000 viel 80-20 Gramm schreibe. 36:46.000 --> 36:48.000 Weißt du? 36:48.000 --> 36:50.000 Und wenn es halt irgendwie nicht 36:50.000 --> 36:52.000 wasserfest sein muss, dann ist das 36:52.000 --> 36:54.000 irgendwie so eine ad hoc Template, 36:54.000 --> 36:56.000 so einen Tag, den ich mir gerade akut selber 36:56.000 --> 36:58.000 interpoliert. 36:58.000 --> 37:00.000 Kommt schon mal vor. 37:00.000 --> 37:02.000 Aber sagen wir mal so, 37:02.000 --> 37:04.000 es ist halt einfach nur besser als die Alternative, 37:04.000 --> 37:06.000 das ist halt das Wichtigste. 37:06.000 --> 37:08.000 Ja, also ich glaube, das Problem ist, 37:08.000 --> 37:10.000 dass die Alternative 37:10.000 --> 37:12.000 schon sehr irreführend ist. 37:12.000 --> 37:14.000 Also wenn ich jetzt einen String habe 37:14.000 --> 37:16.000 und ich sage, ich möchte da jetzt 37:16.000 --> 37:18.000 ein Wort davon replacen, 37:18.000 --> 37:20.000 dieses Wort kommt aber mehrfach 37:20.000 --> 37:22.000 in dem String vor, dann wird nur das erste 37:22.000 --> 37:24.000 genau das erste davon ersetzt, 37:24.000 --> 37:26.000 das ist nicht vorgestellt. 37:26.000 --> 37:28.000 Wenn ich da sage, replace mir, 37:28.000 --> 37:30.000 das Beispiel ist 37:30.000 --> 37:32.000 Dog mit Monkey, 37:32.000 --> 37:34.000 dann hätte ich auch erwartet, 37:34.000 --> 37:36.000 dass alle Dogs nach Monkey sind. 37:36.000 --> 37:38.000 Aber dafür braucht man dann 37:38.000 --> 37:40.000 replace all. 37:40.000 --> 37:42.000 Ja. 37:42.000 --> 37:44.000 Ja und vor allen Dingen, also 37:44.000 --> 37:46.000 nicht nur das, 37:46.000 --> 37:48.000 aber es ist halt so, wenn man halt so 37:48.000 --> 37:50.000 replaced, ich weiß jetzt gar nicht, 37:50.000 --> 37:52.000 also das normale replaced, ich hatte mal 37:52.000 --> 37:54.000 so einen Replacement durchgeführt 37:54.000 --> 37:56.000 habe, 37:56.000 --> 37:58.000 in einem 37:58.000 --> 38:00.000 JavaScript Bundle, das erzeugt wurde. 38:00.000 --> 38:02.000 Da sollte man halt tendenziell nicht machen, 38:02.000 --> 38:04.000 aber so 80, 20 regelmäßig. 38:04.000 --> 38:06.000 Da gibt es halt am Ende den Default Export 38:06.000 --> 38:08.000 und aus irgendwelchen Gründen will ich 38:08.000 --> 38:10.000 in einem Postbildscript einfach sagen, 38:10.000 --> 38:12.000 der variable Name soll jetzt ersetzt werden 38:12.000 --> 38:14.000 durch dieses und jenes. 38:14.000 --> 38:16.000 Kann man ja machen, einfach nur, 38:16.000 --> 38:18.000 weil ich das halt eben zu dem Zeitpunkt Webpack 38:18.000 --> 38:20.000 nicht irgendwie beibringen konnte, 38:20.000 --> 38:22.000 weil ich das alles kaputtgeht beim nächsten Update, 38:22.000 --> 38:24.000 mache ich halt eben einfach mal ein replace 38:24.000 --> 38:26.000 oder so. Aber weißt du, bei replace 38:26.000 --> 38:28.000 kannst du ja nicht nur sagen string gegen string 38:28.000 --> 38:30.000 oder string gegen rackax, sondern du kannst 38:30.000 --> 38:32.000 halt eben auch so Spezien machen wie 38:32.000 --> 38:34.000 so spezielle Zeichenersetzungsketten, die mit 38:34.000 --> 38:36.000 ein Dollar anfangen. 38:36.000 --> 38:38.000 Und wenn du das halt irgendwie in deinem 38:38.000 --> 38:40.000 JavaScript Bundle irgendwie drin hast, weil 38:40.000 --> 38:42.000 irgendeine NPM-Dipendent, die sich geupdated hat, 38:42.000 --> 38:44.000 dann passieren unerwartete Dinge mit deinem Code. 38:44.000 --> 38:46.000 Deswegen wollte ich auch gerade 38:46.000 --> 38:48.000 einwerfen, deswegen habe ich gerade so 38:48.000 --> 38:50.000 den für das gebildete, was 38:50.000 --> 38:52.000 im Endeffekt rauskommt. 38:52.000 --> 38:54.000 Da habe ich jetzt doch auch viele Meinungen gehört, 38:54.000 --> 38:56.000 es wäre doch schon am besten, wenn man einfach 38:56.000 --> 38:58.000 lokal und im Endeffekt auf Production 38:58.000 --> 39:00.000 den gleichen Code hat, vielleicht minifiziert 39:00.000 --> 39:02.000 und abgeliefert und da, da, da. Aber 39:02.000 --> 39:04.000 bei so Themen wie sollte man 39:04.000 --> 39:06.000 Datatest-Attribute zum Beispiel entfernen 39:06.000 --> 39:08.000 oder nicht, weil es ist ja mehr 39:08.000 --> 39:10.000 Kilobyte, was man ausliefert im Endeffekt 39:10.000 --> 39:12.000 oder mehr Bits, für ein bisschen 39:12.000 --> 39:14.000 Datatest, aber dann wieder die andere 39:14.000 --> 39:16.000 Seite, ja, aber dann würde man ja 39:16.000 --> 39:18.000 quasi Code ausliefern, den man nie lokal 39:18.000 --> 39:20.000 getestet hat, wenn man das modifiziert 39:20.000 --> 39:22.000 und replaced. 39:22.000 --> 39:24.000 Das stimmt. 39:24.000 --> 39:26.000 Ja, ich würde es mit ausliefern, weil 39:26.000 --> 39:28.000 ganz ehrlich die Kilobytes zählen, 39:28.000 --> 39:30.000 glaube ich, nicht so richtig, wenn man ohnehin 39:30.000 --> 39:32.000 irgendwie so moderne Webentwicklung 39:32.000 --> 39:34.000 nach allen Regeln der Kunst betreibt 39:34.000 --> 39:36.000 und einfach nur, ich würde halt gar nicht 39:36.000 --> 39:38.000 drüber nachdenken wollen, da sind halt 39:38.000 --> 39:40.000 Datatestinger drin, finde ich damit ab, 39:40.000 --> 39:42.000 der du eh nicht in den Quellcode guckst. 39:42.000 --> 39:44.000 Ich würde auch argumentieren für, 39:44.000 --> 39:46.000 es gibt, sehr wahrscheinlich gibt es 39:46.000 --> 39:48.000 bessere Stellen, wo man optimieren kann, 39:48.000 --> 39:50.000 als Datatest equals Item 1 39:50.000 --> 39:52.000 und das andere ist dieses, aber das ist 39:52.000 --> 39:54.000 hier dann sichtbar und dann kann ich mir 39:54.000 --> 39:56.000 den Quellcode anzeigen. 39:56.000 --> 39:58.000 Ja, gut, ich mein, ist halt so. 39:58.000 --> 40:00.000 Dann sehe ich auch, dass da 100 40:00.000 --> 40:02.000 Tauben Klassen stehen oder dass da 40:02.000 --> 40:04.000 jemand View-Apps mit wie benutzt 40:04.000 --> 40:06.000 oder dass jemand 12 benutzt ist. 40:06.000 --> 40:08.000 Und wenn ich das Datatest sehe, 40:08.000 --> 40:10.000 denke ich mir, yay, das ist getestet. 40:10.000 --> 40:12.000 Also von all den Sachen, die man 40:12.000 --> 40:14.000 mir dann anheften kann, wenn man sich den 40:14.000 --> 40:16.000 Quelltecks anguckt, wären irgendwelche 40:16.000 --> 40:18.000 Attribute echt das letzte, das ein Problem darstellt. 40:20.000 --> 40:22.000 Oh Mann. 40:22.000 --> 40:24.000 Den nächsten String Prototype Match All 40:24.000 --> 40:26.000 kenne ich nicht. 40:26.000 --> 40:28.000 Also, beziehungsweise 40:28.000 --> 40:30.000 habe ich dann ge-googelt 40:30.000 --> 40:32.000 und nicht ganz verstanden. 40:32.000 --> 40:34.000 Also hier gibt es, glaube ich, in Richtung 40:34.000 --> 40:36.000 Reg X, dass ich jetzt sagen möchte, 40:36.000 --> 40:38.000 ich möchte schauen, ob in dem String 40:38.000 --> 40:40.000 was Spezielles vorhanden ist. Ich möchte 40:40.000 --> 40:42.000 lesen. Ich möchte einfach nur als Ergebnis 40:42.000 --> 40:44.000 einen Array haben 40:44.000 --> 40:46.000 wie von den Vorkommen 40:46.000 --> 40:48.000 in dem String. Und das 40:48.000 --> 40:50.000 Match All. 40:50.000 --> 40:52.000 Aber ich glaube, mein Problem ist nicht, dass ich die 40:52.000 --> 40:54.000 Methode nicht verstehe, sondern dass ich 40:54.000 --> 40:56.000 Reg X nicht lesen kann. 40:56.000 --> 40:58.000 Ach, wieso kannst du kein 40:58.000 --> 41:00.000 Reg X lesen? Ja, da war ich das 41:00.000 --> 41:02.000 Beispiel, dass ich das erste, was auf Google 41:02.000 --> 41:04.000 kommt, das erste ist irgendwas mit Test 41:04.000 --> 41:06.000 und eine Nummer danach. Also D für digit, 41:06.000 --> 41:08.000 habe ich verstanden. Aber da ist es 41:08.000 --> 41:10.000 ein Klammern. Ich glaube, das heißt 41:10.000 --> 41:12.000 optional. 41:12.000 --> 41:14.000 Kannst du klammern? 41:14.000 --> 41:16.000 Also das erste Beispiel. 41:16.000 --> 41:18.000 Ich Google das mal kurz raus. 41:18.000 --> 41:20.000 Das ist ein h-T, 41:20.000 --> 41:22.000 das da geschrieben ist. Und dann 41:22.000 --> 41:24.000 kommt ein e in Klammern 41:24.000 --> 41:26.000 und dann kommt wieder in Klammern 41:26.000 --> 41:28.000 ein st. 41:28.000 --> 41:30.000 Und dann wieder in Klammern 41:30.000 --> 41:32.000 ein backslash 41:32.000 --> 41:34.000 D für digit. 41:34.000 --> 41:36.000 Und da ist ein Fragezeichen dahinter. 41:36.000 --> 41:38.000 Das ist optional. 41:38.000 --> 41:40.000 Und wenn ich jetzt Match verwende, 41:40.000 --> 41:42.000 dann kommt da Test 1 41:42.000 --> 41:44.000 und Test 2 raus, wenn das mein String 41:44.000 --> 41:46.000 ist. Wenn ich jetzt aber Match All 41:46.000 --> 41:48.000 verwende mit diesen Klammern 41:48.000 --> 41:50.000 für e und st, dann kommt raus 41:50.000 --> 41:52.000 Test 1, e, st 41:52.000 --> 41:54.000 1 und 1. 41:54.000 --> 41:56.000 Genau. 41:56.000 --> 41:58.000 Weil er dir die Gruppen rauspickt, diese 41:58.000 --> 42:00.000 geklammerten Dinger. Ah, das sind Gruppen. 42:00.000 --> 42:02.000 Das ist nicht optional, das sind Gruppen. 42:02.000 --> 42:04.000 Genau, optional ist halt das Fragezeichen 42:04.000 --> 42:06.000 mit den Runden. Klammern sind halt die Gruppen. 42:06.000 --> 42:08.000 Und das Match All macht halt 42:08.000 --> 42:10.000 gib mir halt die ganzen Gruppen, die da drin gematched sind. 42:10.000 --> 42:12.000 Das normale Match ist ja nur 42:12.000 --> 42:14.000 Pastas ja oder nein. 42:14.000 --> 42:16.000 Und du wirst ja normalerweise exec verwenden, um 42:16.000 --> 42:18.000 sozusagen das zu machen. 42:18.000 --> 42:20.000 Parse mir aus diesen String diese und jenen 42:20.000 --> 42:22.000 Parts raus. Und das Match All 42:22.000 --> 42:24.000 macht das halt eben in der etwas zivilisierteren 42:24.000 --> 42:26.000 Variante, dass du halt diesen iterator 42:26.000 --> 42:28.000 bekommst, kannst du eine Voraufschleife reinschmeißen. 42:28.000 --> 42:30.000 So verstehe ich das. 42:30.000 --> 42:32.000 Okay. 42:32.000 --> 42:34.000 Ich kann dir jetzt nicht genau sagen, wo, aber ich 42:34.000 --> 42:36.000 würde mal annehmen das. 42:36.000 --> 42:38.000 Ja, ich nicht. 42:40.000 --> 42:42.000 Bin glücklich ohne ausgekommen. 42:42.000 --> 42:44.000 Habe jetzt auch nicht das Gefühl, oh, da muss 42:44.000 --> 42:46.000 jetzt was refactorn. Nee, gar nicht. 42:46.000 --> 42:48.000 Nee, also reguläre Ausdrücke ist auch so was 42:48.000 --> 42:50.000 wie so ein Proxy. Das ist halt echt so eine 42:50.000 --> 42:52.000 sehr gute, schnelle Lösung, die dann halt 42:52.000 --> 42:54.000 auch mal zum Problem auswachsen kann. 42:54.000 --> 42:56.000 Ja, ich glaube, mein Highlight an 42:56.000 --> 42:58.000 regularen Expressions war, 42:58.000 --> 43:00.000 nee, ich glaube, wenn ich bei dir es code 43:00.000 --> 43:02.000 machen möchte, wenn ich jetzt einen Refactoring 43:02.000 --> 43:04.000 machen möchte, zum Beispiel habe ich grad 43:04.000 --> 43:06.000 mir spezielle Design-Token, 43:06.000 --> 43:08.000 Custom Properties, CSS 43:08.000 --> 43:10.000 Variablen erstellt. Und ich wollte 43:10.000 --> 43:12.000 so eine bestimmte Verknüpfung, die ich immer 43:12.000 --> 43:14.000 habe bei Tabling-Klassen. Das ist immer so ein 43:14.000 --> 43:16.000 Background 43:16.000 --> 43:18.000 gray background white, 43:18.000 --> 43:20.000 aber im Dark Mode background gray 43:20.000 --> 43:22.000 900 und schon dessen habe ich mir so einen 43:22.000 --> 43:24.000 Namen dafür erstellt und wollte ihn überall 43:24.000 --> 43:26.000 replacen. Ist natürlich das Problem, dass ich 43:26.000 --> 43:28.000 nicht immer durch die automatische Sortierung 43:28.000 --> 43:30.000 bin. Es ist nicht immer so background-farbe 43:30.000 --> 43:32.000 und dark background-farbe, sondern ich glaube 43:32.000 --> 43:34.000 so alle Attribute, alle CSS-Klassen 43:34.000 --> 43:36.000 und dann kommen alle Dark-Klassen 43:36.000 --> 43:38.000 und so weiter und dann kommen alle 43:38.000 --> 43:40.000 Focus-Klassen. Und da muss ich, das ist das 43:40.000 --> 43:42.000 einzige, was ich dann mache, dass ich sage, 43:42.000 --> 43:44.000 ich suche einen String, das fängt an 43:44.000 --> 43:46.000 mit dieser Klasse, dann kommt 43:46.000 --> 43:48.000 irgendetwas dazwischen und dann kommt 43:48.000 --> 43:50.000 die Dark-Klasse dazu und ich möchte 43:50.000 --> 43:52.000 das ersetzen, aber den Rest natürlich 43:52.000 --> 43:54.000 nicht rauswerfen. 43:54.000 --> 43:56.000 Mehr mache ich nicht. 43:56.000 --> 43:58.000 Da hätte ich da eine Stunde dran gesetzt, 43:58.000 --> 44:00.000 aber ich bin ganz stolz darauf, 44:00.000 --> 44:02.000 dass ich stattdessen 40 Minuten 44:02.000 --> 44:04.000 versucht habe, die richtige 44:04.000 --> 44:06.000 Rackings zu finden. 44:06.000 --> 44:08.000 Naja, sagen wir mal so, ich glaube 44:08.000 --> 44:10.000 Rack-Ax ist so ein, 44:10.000 --> 44:12.000 also wenn man das ausrechnen 44:12.000 --> 44:14.000 gut kann, ist das halt, kann das halt 44:14.000 --> 44:16.000 echt so in manchen Situationen 44:16.000 --> 44:18.000 der große Power-Move sein. 44:18.000 --> 44:20.000 Total. Ich will jetzt nicht behaupten, 44:20.000 --> 44:22.000 dass ich das kann, aber wenn man halt 44:22.000 --> 44:24.000 eben wirklich mal so ein Komplex ist, 44:24.000 --> 44:26.000 was aus diesem String daraus friemelnd 44:26.000 --> 44:28.000 ding macht und wirklich dann auch mal 44:28.000 --> 44:30.000 sich einfach nur einmal drauf schafft, 44:30.000 --> 44:32.000 wie das irgendwie so ist mit irgendwie so 44:32.000 --> 44:34.000 Look-A-Hats und Zeug, also der ganze 44:34.000 --> 44:36.000 etwa-anste Kram. 44:36.000 --> 44:38.000 Und dann vielleicht auch mal den Schritt weiter geht, 44:38.000 --> 44:40.000 kann man es halt auch konvinient machen, 44:40.000 --> 44:42.000 weil gerade so diese Gruppen-Matching 44:42.000 --> 44:44.000 mit den runden Klammern, da geht ja normalerweise 44:44.000 --> 44:46.000 so, dass du dann halt irgendwelche Indizes rausbekommst, 44:46.000 --> 44:48.000 so die erste, zweite und dritte Gruppe, 44:48.000 --> 44:50.000 aber den Dinger kann man ja auch Namen geben. 44:50.000 --> 44:52.000 Und dann kriegst du da halt eben aus deinem 44:52.000 --> 44:54.000 String daraus und wenn man halt irgendwie so 44:54.000 --> 44:56.000 diese Dinger dann mal entlockt, dann macht man 44:56.000 --> 44:58.000 irgendwie so einen regulären Ausdruck, 44:58.000 --> 45:00.000 der ist so lang ist der, 45:00.000 --> 45:02.000 aber der funktioniert halt eben auch einfach. 45:02.000 --> 45:04.000 Es kann halt echt so, 45:04.000 --> 45:06.000 im Editor, klar, sicherlich, aber auch so manches 45:06.000 --> 45:08.000 Programm, wo halt eben da, 45:08.000 --> 45:10.000 schreib halt in einem String in so eine 45:10.000 --> 45:12.000 Micro-DSL-Werternutzer rein was du haben willst 45:12.000 --> 45:14.000 und dann fummelt es das schon raus. 45:14.000 --> 45:16.000 Das kann echt so ein Power-Move werden. 45:16.000 --> 45:18.000 Also, gibt ja dieses schöne Buch, 45:18.000 --> 45:20.000 so Regular Expressions von O'Reilly, 45:20.000 --> 45:22.000 das habe ich mal gelesen, also die ersten 20 Seiten. 45:22.000 --> 45:24.000 Und dann habe ich so gesagt, 45:24.000 --> 45:26.000 ah, okay, das ist keine schwarze Magie, das kann man verstehen. 45:26.000 --> 45:28.000 Dann habe ich es nicht wieder angefasst, 45:28.000 --> 45:30.000 aber das hat halt eben gereicht, um mir dann so 45:30.000 --> 45:32.000 im Laufe der nächsten Zeit das irgendwann drauf zu schaffen. 45:32.000 --> 45:34.000 Und wenn da draußen irgendwer ist, der oder die, 45:34.000 --> 45:36.000 immer noch sagt, reguläre Ausdrücke, schwarze Magie. 45:36.000 --> 45:38.000 Nee, ist es nicht. 20 Seiten von diesem Buch lesen. 45:38.000 --> 45:40.000 Das reicht. 45:40.000 --> 45:42.000 Sehr gut. 45:42.000 --> 45:44.000 Das nächste, ich weiß es nicht, ob es ein 45:44.000 --> 45:46.000 absoluter Power-Move ist, aber ich finde es cool, 45:46.000 --> 45:48.000 weil ich das von anderen Programmiersprachen 45:48.000 --> 45:50.000 so gewohnt war, ist Logical Assignment. 45:50.000 --> 45:52.000 Das heißt, ich kann jetzt 45:52.000 --> 45:54.000 mit Pipe-Pipe ist gleich 45:54.000 --> 45:56.000 Werte zu weisen, 45:56.000 --> 45:58.000 sollten sie davor noch 45:58.000 --> 46:00.000 undefined Fallzieh gewesen sein. 46:00.000 --> 46:02.000 Zum Beispiel kann ich jetzt sagen, 46:02.000 --> 46:04.000 wenn ich einen Objekt habe hier in dem Beispiel, 46:04.000 --> 46:06.000 das ist ein Objekt heißt A, 46:06.000 --> 46:08.000 ziemlich guter Name für so ein Objekt. 46:08.000 --> 46:10.000 Kunst A. 46:10.000 --> 46:12.000 Equals Duration 50, 46:12.000 --> 46:14.000 Title Empty String. 46:14.000 --> 46:16.000 Und jetzt kann ich schreiben 46:16.000 --> 46:18.000 A.Duration, 46:18.000 --> 46:20.000 Pipe-Pipe ist gleich, also oder oder ist gleich 46:20.000 --> 46:22.000 10, dann kommt 50 46:22.000 --> 46:24.000 raus, weil die Duration war ja schon vorher 46:24.000 --> 46:26.000 gesetzt, also bleibst einfach bei 50. 46:26.000 --> 46:28.000 Und wenn ich das Ganze mit dem A. 46:28.000 --> 46:30.000 Title mache und sage, 46:30.000 --> 46:32.000 jetzt kommt da ein String rein, 46:32.000 --> 46:34.000 dann kommt am Ende dieser String rein, 46:34.000 --> 46:36.000 weil es davor ja ein Falsie Value war. 46:36.000 --> 46:38.000 Und das habe ich, 46:38.000 --> 46:40.000 das kannte ich vor, 46:40.000 --> 46:42.000 vor einigen, vielen 46:42.000 --> 46:44.000 Jahren so ungefähr, 46:44.000 --> 46:46.000 8, nicht mehr sicher. 46:46.000 --> 46:48.000 Bei Ruby, 46:48.000 --> 46:50.000 dass ich das immer geschrieben hatte. 46:50.000 --> 46:52.000 Ja, der gemeine 46:52.000 --> 46:54.000 JavaScriptler hätte geschrieben 46:54.000 --> 46:56.000 A.Duration 46:56.000 --> 46:58.000 gleich A.Duration oder 46:58.000 --> 47:00.000 Ja, deswegen sagen absolut 47:00.000 --> 47:02.000 oder geiler PowerMove ist nicht, 47:02.000 --> 47:04.000 aber man spart halt ein paar Zeichen 47:04.000 --> 47:06.000 und auf der anderen Seite kann man argumentieren, 47:06.000 --> 47:08.000 aber was ist jetzt mit der Leserbarkeit, 47:08.000 --> 47:10.000 weil was ist jetzt der Wert davon, 47:10.000 --> 47:12.000 dass ich mir jetzt ungefähr 10 Zeichen gespart habe, 47:12.000 --> 47:14.000 aber vielleicht kennen viele Leute 47:14.000 --> 47:16.000 diese Schreibweise sind tags noch nicht 47:16.000 --> 47:18.000 oder mögen sie nicht. 47:18.000 --> 47:20.000 Und dann geht es wieder los mit Code Reviews, 47:20.000 --> 47:22.000 dass da einer sagt, das könnte man doch hier so schreiben 47:22.000 --> 47:24.000 und die andere Person sagt, 47:24.000 --> 47:26.000 nee, ich will es aber lieber so schreiben, 47:26.000 --> 47:28.000 weil ich finde meinen Style cooler 47:28.000 --> 47:30.000 und dann ist man mit Code Review blockiert wegen nichts. 47:30.000 --> 47:32.000 Also ich finde es cool. 47:32.000 --> 47:34.000 Ich würde aber auch immer dazu tendieren, 47:34.000 --> 47:36.000 den Streit aus dem Weg zu gehen 47:36.000 --> 47:38.000 und zu sagen, vielleicht hält man es auch einfach beim Alten 47:38.000 --> 47:40.000 und sagt halt eben, was du gerade meintest, 47:40.000 --> 47:42.000 wie cool ist es, Titel oder oder 47:42.000 --> 47:44.000 neuer String. 47:44.000 --> 47:46.000 Ja, das ist definitiv nicht irgendwie was, 47:46.000 --> 47:48.000 was einen großen Kampf wert ist. 47:48.000 --> 47:50.000 Nee. 47:50.000 --> 47:52.000 Ich finde halt, 47:52.000 --> 47:54.000 also ich nutze die halt eher sparser 47:54.000 --> 47:56.000 und das ist jetzt das absolute Nichtargument, 47:56.000 --> 47:58.000 damit kann ich halt auch im Code Review 47:58.000 --> 48:00.000 den großen Blockator geben. 48:00.000 --> 48:02.000 Also so rein, so vom Aussehen her 48:02.000 --> 48:04.000 finde ich, es macht den Coach schon so ein bisschen neusey, 48:04.000 --> 48:06.000 so ein Operator, der aus 3 Teilen besteht. 48:06.000 --> 48:08.000 Ja, ich bin es halt gewohnt. 48:08.000 --> 48:10.000 So das meine ich, ich bin damit so auch, 48:10.000 --> 48:12.000 bin damit mal aufgewachsen. 48:12.000 --> 48:14.000 Von daher schaut es für mich gar nicht komisch aus. 48:16.000 --> 48:18.000 Ich kann zum Beispiel keinen Pfeifen schreiben, 48:18.000 --> 48:20.000 weil ich schon bei der IF-Abfrage 48:20.000 --> 48:22.000 scheitere mit irgendwelchen Doppelpunkten 48:22.000 --> 48:24.000 oder sowas. 48:24.000 --> 48:26.000 Bin aber trotzdem, ich würde immer unterschreiben, 48:26.000 --> 48:28.000 dann schrat man lieber das Leserliche. 48:28.000 --> 48:30.000 Die Sache, mit der ich 48:30.000 --> 48:32.000 auf ein bisschen, 48:32.000 --> 48:34.000 die eine Sache, die ich wirklich persönlich nicht so toll finde, 48:34.000 --> 48:36.000 ist dieses, was es in JavaScript gibt, 48:36.000 --> 48:38.000 mit, 48:38.000 --> 48:40.000 dass ich mir die IF-Abfrage 48:40.000 --> 48:42.000 und die InDention danach 48:42.000 --> 48:44.000 spare, 48:44.000 --> 48:46.000 wenn ich sage, irgendein Boolean Value, 48:46.000 --> 48:48.000 zum Beispiel 48:48.000 --> 48:50.000 ist enabled und 48:50.000 --> 48:52.000 und Funktionsaufruf. 48:52.000 --> 48:54.000 Und das, 48:54.000 --> 48:56.000 das ist halt schon 48:56.000 --> 48:58.000 so trufi-mäßig 48:58.000 --> 49:00.000 und das funktioniert in vielen anderen Programmen, 49:00.000 --> 49:02.000 wir sprachen nicht 49:02.000 --> 49:04.000 immer sagen, können wir nicht einfach 49:04.000 --> 49:06.000 if, is enabled, klammer auf, 49:06.000 --> 49:08.000 andere klammer zu, 49:08.000 --> 49:10.000 andere klammer auf, Funktionsaufruf 49:10.000 --> 49:12.000 und dann halt wieder raus in Dention. 49:12.000 --> 49:14.000 Da bin ich immer auf der Sache. 49:14.000 --> 49:16.000 Ich finde es einfach leserlicher. 49:16.000 --> 49:18.000 Ja, da wäre ich auch 49:18.000 --> 49:20.000 auf dem Zug. 49:20.000 --> 49:22.000 Es dauert einfach länger, bis ich capiere, 49:22.000 --> 49:24.000 dass da quasi ein if drumrum ist. 49:24.000 --> 49:26.000 Wenn du es kapierst, 49:26.000 --> 49:28.000 im schlimmsten Fall landest du in so einer Go-to-Fail-Situation 49:28.000 --> 49:30.000 und glaubst du, das passt schon und das passt halt nicht. 49:30.000 --> 49:32.000 Ja. 49:32.000 --> 49:34.000 Das ist auch ein if überliste halt nicht. 49:34.000 --> 49:36.000 Ansonsten ist meine goldene Regel, 49:36.000 --> 49:38.000 wenn das da jetzt schon irgendwie steht 49:38.000 --> 49:40.000 und ich muss da was dran tun, 49:40.000 --> 49:42.000 dann würde ich das an sich einfach auch nicht anfassen 49:42.000 --> 49:44.000 und nicht refactern. 49:44.000 --> 49:46.000 Weil ich dann, dann kommt wieder 49:46.000 --> 49:48.000 im Code-Review wieder. 49:48.000 --> 49:50.000 Weil da hast du eigentlich was anderes geändert, das könnte live gehen 49:50.000 --> 49:52.000 und das ist eigentlich ein super tolles Feature 49:52.000 --> 49:54.000 und dann geht wieder der Streit in den Puller, 49:54.000 --> 49:56.000 das ist los und die Leute sind aufgehalten, 49:56.000 --> 49:58.000 weil ich mag den Style lieber 49:58.000 --> 50:00.000 und ja, wir haben doch schon so viele Linter-Reviews 50:00.000 --> 50:02.000 und dafür gibt es halt noch keine. 50:02.000 --> 50:04.000 Ja, das ist halt schwer. 50:04.000 --> 50:06.000 Man kann halt leider nicht wirklich jede 50:06.000 --> 50:08.000 Unstimmigkeit auf diesem Planeten mit Linter-Regeln. 50:08.000 --> 50:10.000 Ja. 50:10.000 --> 50:12.000 Und dann ja, so Forsake of Consistency 50:12.000 --> 50:14.000 sage ich dann eigentlich auch gerne, 50:14.000 --> 50:16.000 aber dann auf der anderen Seite, 50:16.000 --> 50:18.000 jetzt ist es schon so, jetzt mach mal weiter. 50:18.000 --> 50:20.000 Ja. 50:20.000 --> 50:22.000 Das ist sehr vernünftig, das ist die erwachsenen Variante 50:22.000 --> 50:24.000 zu sagen. 50:24.000 --> 50:26.000 Bin ich jetzt alt, bin ich offiziell jetzt erwachsen. 50:26.000 --> 50:28.000 Erwachsen und alt sind glaube ich 50:28.000 --> 50:30.000 zwei unterschiedliche Konzepte. 50:30.000 --> 50:32.000 Ja, stimmt. 50:32.000 --> 50:34.000 Möchte ich jedenfalls glauben. 50:34.000 --> 50:36.000 Ja. 50:36.000 --> 50:38.000 Okay, hey, pass auf hier. 50:38.000 --> 50:40.000 Das nächste, promise.any, 50:40.000 --> 50:42.000 hat nichts mit Typescript zu tun. 50:42.000 --> 50:44.000 Ah, any. 50:44.000 --> 50:46.000 Ja. 50:46.000 --> 50:48.000 Ja, musste ich mich gerade nochmal 50:48.000 --> 50:50.000 per MDN dran erinnern, was das eigentlich 50:50.000 --> 50:52.000 macht. 50:52.000 --> 50:54.000 Nein, das finde ich, also ich hab's 50:54.000 --> 50:56.000 auch noch nicht geschrieben, 50:56.000 --> 50:58.000 aber ich glaub, weil es das damals noch nicht gab 50:58.000 --> 51:00.000 und ich hatte dann andere Varianten 51:00.000 --> 51:02.000 Workarounds, das zu schreiben. 51:02.000 --> 51:04.000 Ich find's schon ziemlich praktisch, du kannst 51:04.000 --> 51:06.000 halt mehrere promises abfeuern, hast du wieder 51:06.000 --> 51:08.000 in deinem Erratingens 51:08.000 --> 51:10.000 als Parameter 51:10.000 --> 51:12.000 bekommst du auch nur ein Promise zurück 51:12.000 --> 51:14.000 und das ist dann aber quasi 51:14.000 --> 51:16.000 fertig, wenn irgendeines davon 51:16.000 --> 51:18.000 fertig ist. Ich bin mir hier nicht 51:18.000 --> 51:20.000 hundertprozentig sicher, ob das 51:20.000 --> 51:22.000 successful sein muss, ob es auf erstes 51:22.000 --> 51:24.000 oder einfach nur auf irgendeines. 51:26.000 --> 51:28.000 Der war doch 51:28.000 --> 51:30.000 successful, weil irgendeines war ja 51:30.000 --> 51:32.000 all settled. 51:32.000 --> 51:34.000 Nee, all settled war, 51:34.000 --> 51:36.000 wenn alle fertig sind. Gott, ich weiß es auch nicht. 51:36.000 --> 51:38.000 Also das Ding ist, der Use Case, den du beschreibst, 51:38.000 --> 51:40.000 das ist auch immer der, wenn ich so sage, 51:40.000 --> 51:42.000 ja, ja, 51:42.000 --> 51:44.000 schon bei promise, 51:44.000 --> 51:46.000 was war das noch? Race, genau. 51:46.000 --> 51:48.000 Promise.race ist ja ein ganz alter Kamerad so. 51:48.000 --> 51:50.000 Alle promises rennen los und das erste, 51:50.000 --> 51:52.000 wenn es wieder Erfolg oder Fehlschlag ist, 51:52.000 --> 51:54.000 bestimmt mit seinem Erfolg oder Fehlschlag, 51:54.000 --> 51:56.000 was das resultierende Promise dann wird. 51:56.000 --> 51:58.000 Und dann sagen die Leute immer, ah, super 51:58.000 --> 52:00.000 Sache, ich kann also irgendwie so sagen, mach 52:00.000 --> 52:02.000 Request nach A und Request nach B 52:02.000 --> 52:04.000 und der, der zuerst was wird, den nehme ich 52:04.000 --> 52:06.000 dann und dann sage ich eben, ja okay, aber 52:06.000 --> 52:08.000 wenn du jetzt den Request für A bekommen hast, 52:08.000 --> 52:10.000 dann musst du ja daran denken, den für B 52:10.000 --> 52:12.000 abzubrechen. Ja, das ist wahr. 52:12.000 --> 52:14.000 Und das wird 52:14.000 --> 52:16.000 dann selten bedacht und noch seltener 52:16.000 --> 52:18.000 gemacht, würde ich behaupten. Ja. 52:18.000 --> 52:20.000 Das ist sinnvoller ist ein Promise als 52:20.000 --> 52:22.000 eine Art Rapper-Objekt, um einen Wert 52:22.000 --> 52:24.000 zu verstehen, der dann halt irgendwann errechnet 52:24.000 --> 52:26.000 wird. Und so diese ganzen 52:26.000 --> 52:28.000 Controller-Management-Geschichten, da sind wir wieder bei 52:28.000 --> 52:30.000 unseren Rejections oder halt auch dieses 52:30.000 --> 52:32.000 Bündeln von Daten-Streams 52:32.000 --> 52:34.000 gleichsam, ist, glaube ich, mit denen nicht so 52:34.000 --> 52:36.000 gut gemacht. Ich glaube, dazu wäre dann wirklich 52:36.000 --> 52:38.000 ein observable oder was ähnliches sinnvoller, 52:38.000 --> 52:40.000 weil die halt eben lazy sind, weil dann halt 52:40.000 --> 52:42.000 eben der Request auf den keiner mehr wartet, 52:42.000 --> 52:44.000 dann auch automatisch abgebaut wird. 52:44.000 --> 52:46.000 Aber guter Punkt, dass du gerade das mit 52:46.000 --> 52:48.000 was du hast, weil ich jetzt gerade dachte, 52:48.000 --> 52:50.000 Moment, was jetzt eigentlich raised, was 52:50.000 --> 52:52.000 eigentlich Annie, und das Sinnvollere 52:52.000 --> 52:54.000 bei Annie, meiner Meinung nach, ist, 52:54.000 --> 52:56.000 du bekommst 52:56.000 --> 52:58.000 das Successful zurück, wenn jetzt eben 52:58.000 --> 53:00.000 Annie irgendeinst davon successful ist, 53:00.000 --> 53:02.000 aber du bekommst es nur dann rejected, 53:02.000 --> 53:04.000 wenn, glaube ich, alle Promises 53:04.000 --> 53:06.000 rejected sind. Nicht irgendein erstes. 53:06.000 --> 53:08.000 Ja, also okay, 53:08.000 --> 53:10.000 irgendein von den Promises muss ein Erfolg 53:10.000 --> 53:12.000 werden, ansonsten, 53:12.000 --> 53:14.000 das ist halt schief, aber ich mache hier drei 53:14.000 --> 53:16.000 Promises. 53:16.000 --> 53:18.000 Ja. 53:18.000 --> 53:20.000 Ja. 53:20.000 --> 53:22.000 Ich verwende ziemlich wenig von den 53:22.000 --> 53:24.000 Promises immer, wenn es halt irgendwie so 53:24.000 --> 53:26.000 mehr macht, als mach Fetch, gib mir 53:26.000 --> 53:28.000 ein Datum, dass ich dann paarse 53:28.000 --> 53:30.000 und gut ist. 53:30.000 --> 53:32.000 Dann denke ich halt immer, entweder muss 53:32.000 --> 53:34.000 da irgendwie was drum gerappt werden, was das 53:34.000 --> 53:36.000 entweder wegabstrahiert, oder ich brauche 53:36.000 --> 53:38.000 gleich was anderes wie ein observable, und 53:38.000 --> 53:40.000 dann habe ich ein ganz anderes Problem. 53:40.000 --> 53:44.000 Okay, aber gemäß uns auf Produkstechnik, 53:44.000 --> 53:46.000 okay, dann geben wir den mal 53:46.000 --> 53:48.000 einen Daumen hoch. 53:48.000 --> 53:50.000 Bei dem nächsten 53:50.000 --> 53:52.000 fällt mir noch nicht mal Newscase ein. 53:52.000 --> 53:54.000 Keine Ahnung. 53:54.000 --> 53:56.000 Also, wir reden einfach... Halleluja! 53:56.000 --> 53:58.000 Halleluja, echt? 53:58.000 --> 54:00.000 Area Prototype Add. 54:00.000 --> 54:02.000 Also, ich erkläre erst, damit jetzt auch 54:02.000 --> 54:04.000 alle gleich anderen aufschreien können, 54:04.000 --> 54:06.000 wow, da habe ich schon ewig darauf gewartet, 54:06.000 --> 54:08.000 worum geht es, wenn ich jetzt 54:08.000 --> 54:10.000 meine schönen, eckigen Klammern um mit 54:10.000 --> 54:12.000 dem Index auf ein Item darauf 54:12.000 --> 54:14.000 zuzugreifen, dann geht es ja quasi, 54:14.000 --> 54:16.000 dann mache ich ja quasi, wenn ich jetzt 54:16.000 --> 54:18.000 eins von hinten bekommen will, schreibe 54:18.000 --> 54:20.000 ich ja dann rein, area length minus 1, 54:20.000 --> 54:22.000 hat schon immer so gut funktioniert. 54:22.000 --> 54:24.000 Stattdessen gibt es jetzt Add, wo ich auch 54:24.000 --> 54:26.000 negative Werte reinschreiben kann, und der 54:26.000 --> 54:28.000 geht dann von hinten nach vorne. Was es 54:28.000 --> 54:30.000 nicht tut, das habe ich extra ausprobiert, 54:30.000 --> 54:32.000 ich kann nicht einen größeren Wert 54:32.000 --> 54:34.000 angeben, und der loop nicht fuhr, also 54:34.000 --> 54:36.000 wenn ich jetzt ein area habe mit fünf 54:36.000 --> 54:38.000 Händen, und ich schreibe Acht, 54:38.000 --> 54:40.000 dann bekomme ich nicht das Dritt daraus, 54:40.000 --> 54:42.000 ich bekomme Andefind. 54:42.000 --> 54:44.000 Das hätte ich auch sehr weird 54:44.000 --> 54:46.000 gefunden. Ja, ich wollte es mal ausprobieren. 54:46.000 --> 54:48.000 Das ist gut, weil 54:48.000 --> 54:50.000 wir haben ja gelernt, wenn wir es nicht 54:50.000 --> 54:52.000 ausprobieren, gibt es keine lustigen 54:52.000 --> 54:54.000 Klammermeldung. Das sind schon etwas, ja. 54:54.000 --> 54:56.000 Ja, aber ich meine, die negativen 54:56.000 --> 54:58.000 Indizes, das ist auch großartig. 54:58.000 --> 55:00.000 Ja, okay. 55:00.000 --> 55:02.000 Ah, es hat doch schon immer 55:02.000 --> 55:04.000 funktioniert mit area length minus 55:04.000 --> 55:06.000 1. Ja, 55:06.000 --> 55:08.000 wenn du halt nicht permanent dich damit 55:08.000 --> 55:10.000 rumfuhr werken musst. 55:10.000 --> 55:12.000 Außerdem natürlich auch, die Länge ist 55:12.000 --> 55:14.000 natürlich auch ein Faktor, wenn dein 55:14.000 --> 55:16.000 area jetzt irgendwie customers filtert 55:16.000 --> 55:18.000 bei, keine Ahnung, place of birth 55:18.000 --> 55:20.000 oder irgendwie sowas, wenn das dein area ist, 55:20.000 --> 55:22.000 dann musst du ja schreiben, um dann das 55:22.000 --> 55:24.000 letzte rauszukriegen, customers filtert 55:24.000 --> 55:26.000 bei place of birth, eckige Klammern, 55:26.000 --> 55:28.000 customers filtert bei place of birth 55:28.000 --> 55:30.000 dort length minus 1, und dann ist 55:30.000 --> 55:32.000 irgendwie dein Bildschirm zu Ende, 55:32.000 --> 55:34.000 ganz so toll. 55:34.000 --> 55:36.000 Ja, das ist super. 55:36.000 --> 55:38.000 Ich finde es großartig, 55:38.000 --> 55:40.000 kriegt einen Daumen. 55:40.000 --> 55:42.000 So, und beim, 55:42.000 --> 55:44.000 so, jetzt haben wir top level await. 55:44.000 --> 55:46.000 Verstehe ich hier irgendwie nicht, 55:46.000 --> 55:48.000 worum es geht. Ich kenne await. 55:48.000 --> 55:50.000 Aber was ist denn top level await? 55:50.000 --> 55:52.000 Naja, das ist nicht in der Essung Funktion stehen muss. 55:52.000 --> 55:54.000 Hä? Das gibt's? 55:54.000 --> 55:56.000 In Modulen, ja. 55:56.000 --> 55:58.000 In Modulen, ah ja. 55:58.000 --> 56:00.000 Ne? Weil, also 56:00.000 --> 56:02.000 das Problem ist ja, du kannst ja, du musst ja 56:02.000 --> 56:04.000 await in der Assumkronen Funktion haben. 56:04.000 --> 56:06.000 Ach so, ich kann await importen. 56:08.000 --> 56:10.000 await importen? 56:10.000 --> 56:12.000 Import. 56:12.000 --> 56:14.000 Import, ja, entweder per import 56:14.000 --> 56:16.000 oder halt eben so bis in einem script type module 56:16.000 --> 56:18.000 drin. Ja. Weil, das Ding ist ja, 56:18.000 --> 56:20.000 es kommt ja immer wieder zurück, 56:20.000 --> 56:22.000 Oper erzählt vom Krieg, das kommt ja immer wieder zurück 56:22.000 --> 56:24.000 auf document write. Daran 56:24.000 --> 56:26.000 scheitert ja alles. 56:26.000 --> 56:28.000 Weil document write 56:28.000 --> 56:30.000 im script füttert ja den html-Paser 56:30.000 --> 56:32.000 mit neuem input zu dem Zeitpunkt, wo das script 56:32.000 --> 56:34.000 gepasst wird. 56:34.000 --> 56:36.000 Das heißt, deswegen blockieren ja normales 56:36.000 --> 56:38.000 scripts den html-Pasern, deswegen sollte man die entweder 56:38.000 --> 56:40.000 nicht benutzen oder ans Ende der Seite verfrachten. 56:40.000 --> 56:42.000 Das Problem ist halt, wenn du document write 56:42.000 --> 56:44.000 hast, wenn das als feature existiert, kannst 56:44.000 --> 56:46.000 du nicht top level await haben, weil ja notwendiger 56:46.000 --> 56:48.000 Weise await ein promise 56:48.000 --> 56:50.000 auspackt, sprich, es gibt ein trip 56:50.000 --> 56:52.000 über die micro task queue. Das heißt, 56:52.000 --> 56:54.000 der html-Paser muss weiterlaufen 56:54.000 --> 56:56.000 und das script muss also in chron ausgeführt werden. 56:56.000 --> 56:58.000 Du kannst nicht beides haben. 56:58.000 --> 57:00.000 Und weil in Modulen document write verboten 57:00.000 --> 57:02.000 ist und diese Module immer asengrunden sind, 57:02.000 --> 57:04.000 kann man da ein ganz anderes Ausführungsmodell 57:04.000 --> 57:06.000 machen unter anderem mit top level await. 57:06.000 --> 57:08.000 Und das ist großartig. 57:10.000 --> 57:12.000 Das ist großartig. 57:12.000 --> 57:14.000 Ich brauche das jetzt nicht in meinem Alter, 57:14.000 --> 57:16.000 aber mein Ansatz ist mehr so der, 57:16.000 --> 57:18.000 Erzähl, erklär irgendwelchen Leuten auf 57:18.000 --> 57:20.000 möglichst effizienter Art und Weise, in irgendwie 57:20.000 --> 57:22.000 so einem Webtec Workshop, moderne Webentwicklung. 57:22.000 --> 57:24.000 So, je mehr Ausnahmen du hast 57:24.000 --> 57:26.000 umso schwieriger ist es. Und ich habe ja schon 57:26.000 --> 57:28.000 vor sehr langer Zeit, bin ich dazu 57:28.000 --> 57:30.000 übergegangen zu sagen, script ohne type module 57:30.000 --> 57:32.000 ist falsch. 57:32.000 --> 57:34.000 Normales script 57:34.000 --> 57:36.000 ich will jetzt nicht päpslicher sein, 57:36.000 --> 57:38.000 als der Papst, es gibt selber da 57:38.000 --> 57:40.000 es gibt 57:40.000 --> 57:42.000 okay, aber im Allgemeinen, 57:42.000 --> 57:44.000 ist script type module der einzig wahre Weg 57:44.000 --> 57:46.000 und wenn man das macht, kann man halt, da muss man halt 57:46.000 --> 57:48.000 über so kaum wie document write nichts erst sagen. 57:48.000 --> 57:50.000 Da muss man den strict mode gar nicht erst erwähnen 57:50.000 --> 57:52.000 und da muss man gar nicht erst sagen, await 57:52.000 --> 57:54.000 ist halt so ein Ding, das benutzt du. 57:54.000 --> 57:56.000 Ender aus, mit ihm aus. 57:56.000 --> 57:58.000 Sehr gut. 57:58.000 --> 58:00.000 Kannst du genauso gut reden 58:00.000 --> 58:02.000 über temporal, 58:02.000 --> 58:04.000 dass die Probleme von 58:04.000 --> 58:06.000 date ersetzen möchte? 58:06.000 --> 58:08.000 Darüber kann ich nur reden, 58:08.000 --> 58:10.000 ist eine extrem gute und überfällige 58:10.000 --> 58:12.000 Geschichte, 58:12.000 --> 58:14.000 habe ich noch nie benutzt. 58:14.000 --> 58:16.000 Wer da mal reinschauen möchte, 58:16.000 --> 58:18.000 die Seite, die auf der ich gerne ganz 58:18.000 --> 58:20.000 lese, weil die ist auch ganz witzig, 58:20.000 --> 58:22.000 die Seite von TC39 58:22.000 --> 58:24.000 proposal temporal 58:24.000 --> 58:26.000 beziehungsweise, ich sag's mal so, 58:26.000 --> 58:28.000 wer da draußen das Glück hatte, 58:28.000 --> 58:30.000 noch nicht allzu viel mit date zu arbeiten, 58:30.000 --> 58:32.000 da passieren witzige Dinge drauf 58:32.000 --> 58:34.000 und temporal sollte das dann 58:34.000 --> 58:36.000 doch eigentlich fixen, 58:36.000 --> 58:38.000 basiert, glaub ich, auf dem 58:38.000 --> 58:40.000 namespace von math und ist dann korrekt. 58:42.000 --> 58:44.000 Ja, wir brauchen halt halt keine libraries mehr, 58:44.000 --> 58:46.000 aber heutzutage kannst du dich ja dem date-Objekt nicht nähren, ohne irgendwie 58:46.000 --> 58:48.000 date.fn oder so zu verwenden. 58:48.000 --> 58:50.000 Ja, bei mir ist es date.js. 58:52.000 --> 58:54.000 Was ist das? 58:54.000 --> 58:56.000 Date.js. 58:56.000 --> 58:58.000 Okay, ist das das neue Kuhle? 58:58.000 --> 59:00.000 Das ist schon seit 3 Jahren, glaub ich, 59:00.000 --> 59:02.000 das neue Kuhle von moment.js. 59:02.000 --> 59:04.000 Also nicht von moment.js, 59:04.000 --> 59:06.000 aber davon sind alle weggegangen aus Gründen, 59:06.000 --> 59:08.000 weil das dann noch nicht modular war 59:08.000 --> 59:10.000 und dann war es aber schon modular, 59:10.000 --> 59:12.000 weil wir waren, glaub ich, schon alle bei date.js. 59:12.000 --> 59:14.000 Das scheint die etwas schlankere 59:14.000 --> 59:16.000 Version zu sein. 59:16.000 --> 59:18.000 Also dann haben wir modular erweitert, 59:18.000 --> 59:20.000 wenn du sagen willst, du brauchst aber jetzt noch 59:20.000 --> 59:22.000 eine timezone Berechnung, dann nimmst du 59:22.000 --> 59:24.000 halt das timezone Pluckin noch mit rein. 59:24.000 --> 59:26.000 Was ist übrigens auch da draußen? 59:26.000 --> 59:28.000 Gibt es, würde ich auch wieder so immer 59:28.000 --> 59:30.000 ein bisschen als erstes nehmen, 59:30.000 --> 59:32.000 ist die Funktion to local date string 59:32.000 --> 59:34.000 oder so ähnlich, 59:34.000 --> 59:36.000 um das in die Browser Sprache 59:36.000 --> 59:38.000 einfach zu transferieren, ohne dass man 59:38.000 --> 59:40.000 jetzt ein Hiccat hat, wie dass man das 59:40.000 --> 59:42.000 richtige Format angeben muss, wie Datum 59:42.000 --> 59:44.000 und ähnliches, weil das kann ja pro Land 59:44.000 --> 59:46.000 sein. Wir in Deutschland haben vielleicht dieses 59:46.000 --> 59:48.000 tagtagpunktmonatmonatpunkt 59:48.000 --> 59:50.000 ja, ja, ja, ja, ja, was für uns 59:50.000 --> 59:52.000 das macht. Aber das ist ja in anderen 59:52.000 --> 59:54.000 Sprachen, würdest du das anders ausdrücken. 59:54.000 --> 59:56.000 Wir fangen jetzt bitte nicht an mit 59:56.000 --> 59:58.000 monatmonatpunkttagtag, also nee. 59:58.000 --> 01:00:00.000 Nee. Aber alles andere 01:00:00.000 --> 01:00:02.000 mag jetzt legitim und valid sein. 01:00:02.000 --> 01:00:04.000 Hä? Ja, 01:00:04.000 --> 01:00:06.000 ist halt die Frage, ob man das haben will, 01:00:06.000 --> 01:00:08.000 weil Browser Sprache muss ja nicht gleich 01:00:08.000 --> 01:00:10.000 Webseitsprache sein. Nee, das stimmt, 01:00:10.000 --> 01:00:12.000 aber das hast du ja bei der HTML-Validierung 01:00:12.000 --> 01:00:14.000 zum Beispiel auch. Wenn du die Browser Sprache 01:00:14.000 --> 01:00:16.000 hast, weil du hast eine englische Webseite, 01:00:16.000 --> 01:00:18.000 aber das ist ein Formular drin und da haben 01:00:18.000 --> 01:00:20.000 wir dieses Inputfeld und sollte größer 0 sein, 01:00:20.000 --> 01:00:22.000 dann hast du auch dastehen, du musst 01:00:22.000 --> 01:00:24.000 einen Wert größer 01:00:24.000 --> 01:00:26.000 gleich 1 angeben oder so was. 01:00:26.000 --> 01:00:28.000 Na gut. 01:00:28.000 --> 01:00:30.000 Okay, also aber Temporal würde ich mal sagen, 01:00:30.000 --> 01:00:32.000 wir wissen, was es ist, aber benutzt haben wir es noch nicht, 01:00:32.000 --> 01:00:34.000 wenn ich das richtig verstanden habe, oder? 01:00:34.000 --> 01:00:36.000 Nö. Weil wir noch auf 01:00:36.000 --> 01:00:38.000 dem Library treppen. Jupp. 01:00:38.000 --> 01:00:40.000 Genau. 01:00:40.000 --> 01:00:42.000 So, das nächste ist deshalb so geil wie 01:00:42.000 --> 01:00:44.000 .add, 01:00:44.000 --> 01:00:46.000 weil hier haben wir array 01:00:46.000 --> 01:00:48.000 find last. 01:00:48.000 --> 01:00:50.000 Ja, 01:00:50.000 --> 01:00:52.000 das ist jetzt meine handgeschriebene 01:00:52.000 --> 01:00:54.000 Implementierung davon sicherlich eines 01:00:54.000 --> 01:00:56.000 Tagesmal. Ja. 01:00:56.000 --> 01:00:58.000 Oder loadish oder so was Verwendungen. 01:00:58.000 --> 01:01:00.000 Ja, 01:01:00.000 --> 01:01:02.000 loadish ist auch so ein 01:01:02.000 --> 01:01:04.000 so ein Map und Set Verhinderer, 01:01:04.000 --> 01:01:06.000 finde ich. 01:01:06.000 --> 01:01:08.000 Meister, das kommt halt ja noch aus der Zeit, 01:01:08.000 --> 01:01:10.000 ich habe es das ja nicht. 01:01:10.000 --> 01:01:12.000 Da war halt eben eine Key Value Datenstruktur 01:01:12.000 --> 01:01:14.000 in plain Object. 01:01:14.000 --> 01:01:16.000 Muss halt nicht notwendiger 01:01:16.000 --> 01:01:18.000 Weise sein. 01:01:18.000 --> 01:01:20.000 Ne, ja, 01:01:20.000 --> 01:01:22.000 ich habe ja nichts gegen loadish. 01:01:22.000 --> 01:01:24.000 Ich denke mir halt nur so, ja okay Boomer, 01:01:24.000 --> 01:01:26.000 aber komm, gib mir ne Map. 01:01:26.000 --> 01:01:28.000 Also mir fällt 01:01:28.000 --> 01:01:30.000 spontan, fällt mir kein Use Case 01:01:30.000 --> 01:01:32.000 so in der Sekunde 01:01:32.000 --> 01:01:34.000 gerade ein, aber ich hätte es sicher schon mal gebrauchen können, 01:01:34.000 --> 01:01:36.000 wo ich stattdessen halt irgendwie eine eigene Implementierung hatte, 01:01:36.000 --> 01:01:38.000 die mir keine Ahnung, Array mehr umgedreht, 01:01:38.000 --> 01:01:40.000 ich weiß es gerade gar nicht mehr. 01:01:40.000 --> 01:01:42.000 Irgendwas habe ich schon gemacht. 01:01:42.000 --> 01:01:44.000 Irgendwie sowas schrecklich ineffizient ist, 01:01:44.000 --> 01:01:46.000 das kann man bestimmt irgendwie voll schlau machen, 01:01:46.000 --> 01:01:48.000 wenn man es ordentlich macht. 01:01:48.000 --> 01:01:50.000 Apropos schrecklich ineffizient, 01:01:50.000 --> 01:01:52.000 jetzt schweif ich wieder kurz ab, 01:01:52.000 --> 01:01:54.000 was würdest du sagen, wenn du ein, 01:01:54.000 --> 01:01:56.000 durch ein Array itagieren musst, 01:01:56.000 --> 01:01:58.000 und du musst irgendwie halt 2 Sachen drauf machen, 01:01:58.000 --> 01:02:00.000 2, zum Beispiel Filter 01:02:00.000 --> 01:02:02.000 und Map irgendwie in dem Sinne. 01:02:02.000 --> 01:02:04.000 Bevor du es, 01:02:04.000 --> 01:02:06.000 dann sowas wie ein If-Case drinnen, 01:02:06.000 --> 01:02:08.000 um halt zu filtern, 01:02:08.000 --> 01:02:10.000 und wenn der If-Case true ist, 01:02:10.000 --> 01:02:12.000 dann veränderst du dieses Item irgendwie. 01:02:12.000 --> 01:02:14.000 Oder bist du der Fan 01:02:14.000 --> 01:02:16.000 von den Array-Funktionen 01:02:16.000 --> 01:02:18.000 Filter und Map, 01:02:18.000 --> 01:02:20.000 was ja aber 2-mal durch das Array itagiert. 01:02:22.000 --> 01:02:24.000 Ja, also 01:02:24.000 --> 01:02:26.000 ich bin beim 1. 01:02:26.000 --> 01:02:28.000 aber nicht aus dem Grund, 01:02:28.000 --> 01:02:30.000 den du jetzt für das 2. genannt hast. 01:02:30.000 --> 01:02:32.000 Weil, dass der da wirklich 2-mal durchgeht, 01:02:32.000 --> 01:02:34.000 das mag so sein, 01:02:34.000 --> 01:02:36.000 aber ich weiß nicht, ob das auch nach der 7. 01:02:36.000 --> 01:02:38.000 Compiler-Optimierungsstufe immer noch so ist, 01:02:38.000 --> 01:02:40.000 wenn der da auf Maschinen-Ebene 01:02:40.000 --> 01:02:42.000 diese ganzen Dinger hin und her schiebt. 01:02:42.000 --> 01:02:44.000 Aber ich bin wirklich extrem zum 01:02:44.000 --> 01:02:46.000 imperativen Programmier-Primitivismus 01:02:46.000 --> 01:02:48.000 übergewechselt, 01:02:48.000 --> 01:02:50.000 seitdem ich verstanden habe, 01:02:50.000 --> 01:02:52.000 dass gerade auch so die Power von Async 01:02:52.000 --> 01:02:54.000 gerade erst so richtig erweckt wird, 01:02:54.000 --> 01:02:56.000 je weniger Callbacks man an den Backen hat. 01:02:58.000 --> 01:03:00.000 Das Erweight ist ja auch wenn es global verfügbar ist, 01:03:00.000 --> 01:03:02.000 sobald schon irgendeiner Funktion drin, 01:03:02.000 --> 01:03:04.000 das geht das nicht mehr. Und dann irgendwie 01:03:04.000 --> 01:03:06.000 Mapfilter, Reduce, bla bla bla. 01:03:06.000 --> 01:03:08.000 Das Ding ist ja, Callbacks sind ja im Prinzip 01:03:08.000 --> 01:03:10.000 ein Workaround dafür, dass man nicht rein 01:03:10.000 --> 01:03:12.000 imperativ durchprogrammieren kann, 01:03:12.000 --> 01:03:14.000 weil kein Multithreading. 01:03:14.000 --> 01:03:16.000 Das ist ja, dieser Stil ist ja quasi ein Hack. 01:03:16.000 --> 01:03:18.000 Und jetzt, wo der weg ist, 01:03:18.000 --> 01:03:20.000 kann man ja tatsächlich, wenn man will, 01:03:20.000 --> 01:03:22.000 konsequent ein Programmierparadigma 01:03:22.000 --> 01:03:24.000 bestreiten, nämlich das langweilige 01:03:24.000 --> 01:03:26.000 imperative Programmieren, if, 01:03:26.000 --> 01:03:28.000 as for while, und kann den ganzen 01:03:28.000 --> 01:03:30.000 Funktionen so was stehen, wo ich ja auch 01:03:30.000 --> 01:03:32.000 behaupten würde, dass JavaScript 01:03:32.000 --> 01:03:34.000 eine bessere Imperative als eine 01:03:34.000 --> 01:03:36.000 funktionale Programmiersprache ist. 01:03:36.000 --> 01:03:38.000 So, if, as for while, try, catch, 01:03:38.000 --> 01:03:40.000 kannst ganz gut, mit Async await noch so 01:03:40.000 --> 01:03:42.000 besser, aber der ganze funktionale 01:03:42.000 --> 01:03:44.000 Krempel, da ist es dann ja immer noch so, 01:03:44.000 --> 01:03:46.000 dann erzählen dir die FP-Tutorials, 01:03:46.000 --> 01:03:48.000 wie irgendwie Currying geht, und so, 01:03:48.000 --> 01:03:50.000 ja, so kannst du das machen, 01:03:50.000 --> 01:03:52.000 in der richtigen funktionalen Programmiersprache 01:03:52.000 --> 01:03:54.000 ist das aber einfach da. 01:03:54.000 --> 01:03:56.000 Und hier ist das nicht einfach da. 01:03:56.000 --> 01:03:58.000 Wenn man anfängt, so Reibungsverluste 01:03:58.000 --> 01:04:00.000 zu geben, beim Versuch, 01:04:00.000 --> 01:04:02.000 mit JavaScript Funktional zu arbeiten, 01:04:02.000 --> 01:04:04.000 dann denke ich mir halt immer schon so, 01:04:04.000 --> 01:04:06.000 ja... 01:04:06.000 --> 01:04:08.000 Außerdem im Mutable Data kann 01:04:08.000 --> 01:04:10.000 JavaScript halt echt so schlecht. 01:04:10.000 --> 01:04:12.000 Ein großes Projekt von mir, wo ich irgendwie 01:04:12.000 --> 01:04:14.000 früher mal das im Mutable gemacht habe, 01:04:14.000 --> 01:04:16.000 es war so langsam, und seitdem ich einfach 01:04:16.000 --> 01:04:18.000 sage, hier Object as any, steckt die Property 01:04:18.000 --> 01:04:20.000 drauf, und deklariere dich jetzt als 01:04:20.000 --> 01:04:22.000 anderer Typ, das ist so schnell, 01:04:22.000 --> 01:04:24.000 das ist unglaublich. 01:04:24.000 --> 01:04:26.000 Das ist voll auf dem Primitivismus-Trip. 01:04:26.000 --> 01:04:28.000 Also 100% massiv maximal 01:04:28.000 --> 01:04:30.000 aus einer Reihe 01:04:30.000 --> 01:04:32.000 von Gründen einfach auch in den mentalen Loads 01:04:32.000 --> 01:04:34.000 zu vereinfachen. If Else For a while 01:04:34.000 --> 01:04:36.000 gimme weg mit dem ganzen 01:04:36.000 --> 01:04:38.000 Flatmap-Latest. 01:04:38.000 --> 01:04:40.000 Blah! 01:04:42.000 --> 01:04:44.000 Ich glaube, das Neuste, was kommen wird, 01:04:44.000 --> 01:04:46.000 ist Group By. 01:04:46.000 --> 01:04:48.000 Auch das ist wunderbar, weil 01:04:48.000 --> 01:04:50.000 da kann ich auch wieder meine persönliche 01:04:50.000 --> 01:04:52.000 Implementierung in die Tonne treten. 01:04:52.000 --> 01:04:54.000 Das ist ja irgendwie nur grad 01:04:54.000 --> 01:04:56.000 bei Firefox 01:04:56.000 --> 01:04:58.000 irgendwas beta. Ich weiß es nicht ganz genau, 01:04:58.000 --> 01:05:00.000 aber ungefähr ein ganz neuer Browse 01:05:00.000 --> 01:05:02.000 unterstützt und kein anderer. 01:05:02.000 --> 01:05:04.000 Das ist 01:05:04.000 --> 01:05:06.000 tatsächlich auch überraschend nicht trivial 01:05:06.000 --> 01:05:08.000 mit diesem Group By. 01:05:08.000 --> 01:05:10.000 Hab ich schon öfter solche Sachen implementiert. 01:05:10.000 --> 01:05:12.000 Das heißt, 01:05:12.000 --> 01:05:14.000 das wäre jetzt meine Sache, wo ich sagen würde, 01:05:14.000 --> 01:05:16.000 geil, dass es das endlich gibt, 01:05:16.000 --> 01:05:18.000 weil da habe ich schon Stunden immer 01:05:18.000 --> 01:05:20.000 reingesteckt, bis es dann wirklich korrekt war. 01:05:20.000 --> 01:05:22.000 Das habe ich auch richtig durchgetestet. 01:05:22.000 --> 01:05:24.000 Das ist kompliziert. 01:05:24.000 --> 01:05:26.000 Aber ist super, weil 01:05:26.000 --> 01:05:28.000 da kannst du das daraus resultieren, der iterable 01:05:28.000 --> 01:05:30.000 nehmen. Kannst das in den Map-Konstrukte reinpacken 01:05:30.000 --> 01:05:32.000 und zack! 01:05:32.000 --> 01:05:34.000 Genau bei dieser Funktion bin ich das erste Mal 01:05:34.000 --> 01:05:36.000 über das Wort iterable gestoßen, weil 01:05:36.000 --> 01:05:38.000 dann hatte ich eben das auch so geschrieben 01:05:38.000 --> 01:05:40.000 mit Array from Array 01:05:40.000 --> 01:05:42.000 und hab auch den Kommentar bekommen 01:05:42.000 --> 01:05:44.000 Hä? Aber du gibst doch schon Array rein. 01:05:44.000 --> 01:05:46.000 Warum machst du Array from Array? 01:05:46.000 --> 01:05:48.000 Und ich sag ganz klug, ja, kann ja auch 01:05:48.000 --> 01:05:50.000 sein. Gut, wir verwenden keine Sets. 01:05:50.000 --> 01:05:52.000 Aber könnte ja sein. 01:05:52.000 --> 01:05:54.000 Könnte ja passieren. 01:05:54.000 --> 01:05:56.000 Man muss ja Future-Proofing betreiben. 01:05:56.000 --> 01:05:58.000 Ja, total. 01:05:58.000 --> 01:06:00.000 Okay, Error-Prototype-Course. 01:06:00.000 --> 01:06:02.000 Ich muss mich outen. 01:06:02.000 --> 01:06:04.000 Was ist das? 01:06:04.000 --> 01:06:06.000 Ich weiß es auch nicht, aber jetzt, wo ich 01:06:06.000 --> 01:06:08.000 sehe, weiß ich es und ich finde es gut, glaube ich. 01:06:08.000 --> 01:06:10.000 Also ich habe jetzt dann, ich kann das schreiben 01:06:10.000 --> 01:06:12.000 beim so einen Try-Catch 01:06:12.000 --> 01:06:14.000 Throw-New-Error. 01:06:14.000 --> 01:06:16.000 Wenn ich da korrekt bin, ist es egal, ob man 01:06:16.000 --> 01:06:18.000 so Error schreibt oder nur Throw-New-Error. 01:06:18.000 --> 01:06:20.000 Und dann schreibe ich halt 01:06:20.000 --> 01:06:22.000 Connecting to Database Failed 01:06:22.000 --> 01:06:24.000 und dann gebe ich Cause-Error ein. 01:06:24.000 --> 01:06:26.000 Ah, doch, das klingt gut. 01:06:26.000 --> 01:06:28.000 Ja, weil du ja im Prinzip den 01:06:28.000 --> 01:06:30.000 Fehler sozusagen aufbereitest. 01:06:30.000 --> 01:06:32.000 Ja, das ist sehr gut. 01:06:32.000 --> 01:06:34.000 Oh, das ist ja großartig. Das brauche ich. 01:06:34.000 --> 01:06:36.000 Also, scenario also nochmal 01:06:36.000 --> 01:06:38.000 um es jetzt runterzubrechen. 01:06:38.000 --> 01:06:40.000 Wir händeln eine Exception 01:06:40.000 --> 01:06:42.000 und das Exception-Händling besteht daraus 01:06:42.000 --> 01:06:44.000 auch einen Fehler wieder zu werfen 01:06:44.000 --> 01:06:46.000 oder enthält das zumindest 01:06:46.000 --> 01:06:48.000 und man will den Fehler zurückführer machen 01:06:48.000 --> 01:06:50.000 und dann gibt man das bei Cause-Error. 01:06:50.000 --> 01:06:52.000 Finde ich super. 01:06:52.000 --> 01:06:54.000 Ja, jetzt ist die Frage. 01:06:54.000 --> 01:06:56.000 Weißt du, wir können das jetzt hier auswählen. 01:06:56.000 --> 01:06:58.000 Wir wissen, was das ist, aber haben es noch nicht benutzt. 01:06:58.000 --> 01:07:00.000 Zählt das auch, wenn wir jetzt gerade 01:07:00.000 --> 01:07:02.000 erst beim Betrachten des Code-Samples verstanden haben, 01:07:02.000 --> 01:07:04.000 was es ist? 01:07:04.000 --> 01:07:06.000 Also, ich habe ja hier manche Sachen durchgegangen 01:07:06.000 --> 01:07:08.000 und habe dann zum Beispiel 01:07:08.000 --> 01:07:10.000 bei Temporal hatte ich kurz nicht auf dem Schirm 01:07:10.000 --> 01:07:12.000 so, hey, was ist das denn jetzt gerade? 01:07:12.000 --> 01:07:14.000 Ich habe mich googelt und dachte mir 01:07:14.000 --> 01:07:16.000 ja, ja, ja, kenne ich. 01:07:16.000 --> 01:07:18.000 Ich glaube, das steht extra ganz oben. 01:07:18.000 --> 01:07:20.000 Ne, bei dem war es nicht. 01:07:20.000 --> 01:07:22.000 Bei irgendeinem anderen Section 01:07:22.000 --> 01:07:24.000 stand irgendwie dabei. 01:07:24.000 --> 01:07:26.000 Man sollte es auch nur ankreuzen, 01:07:26.000 --> 01:07:28.000 wenn man es jetzt aktuell gerade verwendet 01:07:28.000 --> 01:07:30.000 und nicht so von vor zehn Jahren. 01:07:30.000 --> 01:07:32.000 Aha, okay. 01:07:32.000 --> 01:07:34.000 Na, das ist doch die Legacy-Abteilung. 01:07:34.000 --> 01:07:36.000 Das sind wir ja nicht. 01:07:36.000 --> 01:07:38.000 Ja, nee, aber hier ist, weiß ich, 01:07:38.000 --> 01:07:40.000 ich weiß auch nicht. 01:07:40.000 --> 01:07:42.000 Ich habe noch nie gehört, 01:07:42.000 --> 01:07:44.000 es fühlt sich so an, als hätte ich versagt. 01:07:44.000 --> 01:07:46.000 Ja, genau, und wir versagen nicht 01:07:46.000 --> 01:07:48.000 und deswegen kriegen wir hier ein grünes Häkchen. 01:07:48.000 --> 01:07:50.000 So, läuft. 01:07:50.000 --> 01:07:52.000 So, das nächste. 01:07:52.000 --> 01:07:54.000 Object Has Own. 01:07:54.000 --> 01:07:56.000 Wer jetzt drauf wartet, dass ich sage 01:07:56.000 --> 01:07:58.000 Property, genau, das ist der Sinn davon. 01:07:58.000 --> 01:08:00.000 Wir haben ja auch das gehabt, 01:08:00.000 --> 01:08:02.000 dieses Has Own Property. 01:08:02.000 --> 01:08:04.000 Wenn ich mich bei der Schreibweise 01:08:04.000 --> 01:08:06.000 nicht irre, dann müsste das sein 01:08:06.000 --> 01:08:08.000 Objektname 01:08:08.000 --> 01:08:10.000 mit Has Own Property 01:08:10.000 --> 01:08:12.000 und es ist auch immer nicht ganz trivial, 01:08:12.000 --> 01:08:14.000 was da genau, also man kann da drüber, 01:08:14.000 --> 01:08:16.000 es kann ein paar Steuerbesteine 01:08:16.000 --> 01:08:18.000 und jetzt haben wir stattdessen 01:08:18.000 --> 01:08:20.000 die neue Variante, dass ich wirklich Object schreibe 01:08:20.000 --> 01:08:22.000 mit einem großen O 01:08:22.000 --> 01:08:24.000 und nicht enderbar so ein Object Has Own 01:08:24.000 --> 01:08:26.000 und dann als Parameter gebe ich mein Objektname, 01:08:26.000 --> 01:08:28.000 also mein Objekt rein 01:08:28.000 --> 01:08:30.000 und schreibe welche Property 01:08:30.000 --> 01:08:32.000 als String und funktioniert. 01:08:32.000 --> 01:08:34.000 Genau, wenn ich jetzt mal 01:08:34.000 --> 01:08:36.000 das Acrylic der Java-Übersetzung hernehmen darf, 01:08:36.000 --> 01:08:38.000 es ist jetzt keine Instanz-Methode 01:08:38.000 --> 01:08:40.000 von Objekten mehr, sondern eine statische 01:08:40.000 --> 01:08:42.000 Methode der Object-Klasse. 01:08:42.000 --> 01:08:44.000 Wunderschön. 01:08:44.000 --> 01:08:46.000 Was für eine Aufwertung. 01:08:46.000 --> 01:08:48.000 Naja, das Schöne ist halt, der 01:08:48.000 --> 01:08:50.000 wichtigste Scholperstein ist, du kannst ja 01:08:50.000 --> 01:08:52.000 ein Objekt erzeugen ohne Prototype 01:08:52.000 --> 01:08:54.000 und Has Own Property wohnt hier auf dem Prototype 01:08:54.000 --> 01:08:56.000 und wenn du Object Create mit Null machst, 01:08:56.000 --> 01:08:58.000 dann hast du gar kein Has Own Property mehr 01:08:58.000 --> 01:09:00.000 und das passiert jetzt hiermit nicht mehr. 01:09:00.000 --> 01:09:02.000 Außerdem wieder irgendwie ein so dämliches Ding, 01:09:02.000 --> 01:09:04.000 was ich einfach wegignorieren kann, 01:09:04.000 --> 01:09:06.000 wie ich das in der Skript erkläre. 01:09:06.000 --> 01:09:08.000 So, es gibt keine eingebauten Methoden, 01:09:08.000 --> 01:09:10.000 irgendwie Ja to String und Value Off, 01:09:10.000 --> 01:09:12.000 kannst du alle ignorieren. Willst du wissen, 01:09:12.000 --> 01:09:14.000 ob Property drauf ist, nimmst du Has Own. 01:09:14.000 --> 01:09:16.000 Bada Bing, Bada Bung läuft. 01:09:16.000 --> 01:09:18.000 Was ist, gibt es jetzt noch 01:09:18.000 --> 01:09:20.000 ein Use Case für 01:09:20.000 --> 01:09:22.000 Property 01:09:22.000 --> 01:09:24.000 in Object? 01:09:24.000 --> 01:09:26.000 Der wichtigste ist für mich, 01:09:26.000 --> 01:09:28.000 dass TypeScript das als TypeGuard checkt. 01:09:28.000 --> 01:09:30.000 Moment, aber könnte ich das jetzt nicht auch 01:09:30.000 --> 01:09:32.000 dann einfach mit Object Has Own schreiben? 01:09:32.000 --> 01:09:34.000 Ja, probieren wir mal aus. 01:09:34.000 --> 01:09:36.000 Kommt halt drauf an, weil 01:09:36.000 --> 01:09:38.000 ist schwierig, weil 01:09:38.000 --> 01:09:40.000 wenn ich das jetzt irgendwie typen wollte, 01:09:40.000 --> 01:09:42.000 müsste ich ja den 01:09:42.000 --> 01:09:44.000 ersten Parameter, das fragliche Objekt 01:09:44.000 --> 01:09:46.000 als Typ Parameter haben, 01:09:46.000 --> 01:09:48.000 um das gegebenenfalls zu constrain, 01:09:48.000 --> 01:09:50.000 dass man nur gültige Keys angibt, 01:09:50.000 --> 01:09:52.000 aber das will man ja auch nicht, weil man will ja erstmal rausfinden, 01:09:52.000 --> 01:09:54.000 ob dieser Key da drauf ist, das müsste gleichsam ein TypeGuard sein. 01:09:54.000 --> 01:09:56.000 Aber für was? 01:09:56.000 --> 01:09:58.000 Ich glaube, das ist alles zu kompliziert. 01:09:58.000 --> 01:10:00.000 Würde ich jetzt mal raten, ich habe nicht nachgeschaut. 01:10:00.000 --> 01:10:02.000 Ja, und von zu kompliziert 01:10:02.000 --> 01:10:04.000 gehen wir jetzt wieder zum Letzten, 01:10:04.000 --> 01:10:06.000 und wir sind hier wieder bei RecApps. 01:10:06.000 --> 01:10:08.000 Ich habe gehört, es ist da gar keine 01:10:08.000 --> 01:10:10.000 dunkle Magie. 01:10:10.000 --> 01:10:12.000 Es geht um RecApps 01:10:12.000 --> 01:10:14.000 Match Indices. 01:10:14.000 --> 01:10:16.000 Ja. 01:10:16.000 --> 01:10:18.000 Ja, wenn man jetzt so was braucht, 01:10:18.000 --> 01:10:20.000 dann ist bestimmt gut. 01:10:20.000 --> 01:10:22.000 Ja, wobei, ich würde das 01:10:22.000 --> 01:10:24.000 eventuell 01:10:24.000 --> 01:10:26.000 doch in dem Fall schon, 01:10:26.000 --> 01:10:28.000 und an welchen Indices 01:10:28.000 --> 01:10:30.000 ist das eben aufgetreten, 01:10:30.000 --> 01:10:32.000 wenn man das braucht. 01:10:34.000 --> 01:10:36.000 Ich glaube, ich schließe mich da in einer Bewertung an. 01:10:36.000 --> 01:10:38.000 Wenn man das braucht, ist das etwas, 01:10:38.000 --> 01:10:40.000 was man braucht. 01:10:40.000 --> 01:10:42.000 Ich kann es davor nicht, 01:10:42.000 --> 01:10:44.000 aber ich habe mir das Code Beispiel durchgelesen, 01:10:44.000 --> 01:10:46.000 und es kam mir sofort einleuchtend vor, 01:10:46.000 --> 01:10:48.000 also würde ich schreiben, know what it is. 01:10:48.000 --> 01:10:50.000 Ich glaube, ich mache hier 01:10:50.000 --> 01:10:52.000 das ganze Testergebnis falsch. 01:10:52.000 --> 01:10:54.000 Okay, never heard of it. 01:10:54.000 --> 01:10:56.000 Alles super hier. 01:10:56.000 --> 01:10:58.000 My not sure what it is. 01:10:58.000 --> 01:11:00.000 Sie hätten vielleicht das Code Example nicht dazu schreiben dürfen, 01:11:00.000 --> 01:11:02.000 weil dann hätte ich wirklich gesagt, 01:11:02.000 --> 01:11:04.000 worum geht es? 01:11:04.000 --> 01:11:06.000 Ja, aber ich glaube, 01:11:06.000 --> 01:11:08.000 dann ist das nicht so. 01:11:08.000 --> 01:11:10.000 Bei einigen haben sie es ja gemacht. 01:11:10.000 --> 01:11:12.000 Promise All Zettel hat kein Code Beispiel. 01:11:12.000 --> 01:11:14.000 Proxies sind nicht mal richtig gemarkt, 01:11:14.000 --> 01:11:16.000 da ist der Hintergrund gar nicht grau. 01:11:16.000 --> 01:11:18.000 Interessant. 01:11:18.000 --> 01:11:20.000 Ja, aber das ist wahrscheinlich, weil das halt Code ist. 01:11:20.000 --> 01:11:22.000 Ja, das ist nicht die 01:11:22.000 --> 01:11:24.000 der Proxy Constructor. 01:11:24.000 --> 01:11:26.000 Nach welcher Logik sind hier manchmal Code Beispieler dabei 01:11:26.000 --> 01:11:28.000 und manchmal nicht? 01:11:28.000 --> 01:11:30.000 Na ja, 01:11:30.000 --> 01:11:32.000 wir müssen ja auch sagen, es geht hier um JavaScript, 01:11:32.000 --> 01:11:34.000 deswegen ist glaube ich Logik 01:11:34.000 --> 01:11:36.000 eine nachgeordnete Priorität. 01:11:40.000 --> 01:11:42.000 So, Browser APIs. 01:11:42.000 --> 01:11:44.000 Auf geht's. 01:11:44.000 --> 01:11:46.000 Service Workers. 01:11:46.000 --> 01:11:48.000 Ja, auf jede. 01:11:48.000 --> 01:11:50.000 In meinem Universum 01:11:50.000 --> 01:11:52.000 ist es aber schon so, 01:11:52.000 --> 01:11:54.000 dass dieser ganze Progressive Web App Hype 01:11:54.000 --> 01:11:56.000 ein bisschen vorbeizusein scheint. 01:11:56.000 --> 01:11:58.000 In meiner Welt scheint es für mich auch 01:11:58.000 --> 01:12:00.000 vorbeizusein, bzw. 01:12:00.000 --> 01:12:02.000 vielleicht ist es einfach von Frameworks schon 01:12:02.000 --> 01:12:04.000 Web wegabstrahiert. 01:12:06.000 --> 01:12:08.000 Also entweder ist schon dabei 01:12:08.000 --> 01:12:10.000 oder man macht es manuell nicht selber 01:12:10.000 --> 01:12:12.000 oder man hat irgendwie ein speziellen Case 01:12:12.000 --> 01:12:14.000 und da macht man es halt, aber 01:12:14.000 --> 01:12:16.000 ja. 01:12:16.000 --> 01:12:18.000 Also immer wenn mir eine Website kommt mit 01:12:18.000 --> 01:12:20.000 und ich mir auch installiere, 01:12:20.000 --> 01:12:22.000 tendiere ich tendenziell eher dazu zu sagen, 01:12:22.000 --> 01:12:24.000 nee, komm, geh weg, einfach so, 01:12:24.000 --> 01:12:26.000 weil das eine weitere Sorte von Programme 01:12:26.000 --> 01:12:28.000 sie dann auf meinem Rechner rumklappert. 01:12:28.000 --> 01:12:30.000 Und ich habe ja schon zwei Sorten von Programmen, 01:12:30.000 --> 01:12:32.000 nämlich die normalen Programme und die, 01:12:32.000 --> 01:12:34.000 die halt als Tab in meinem Browser wohnen 01:12:34.000 --> 01:12:36.000 und so ein Hybrid brauche ich nicht unbedingt, 01:12:36.000 --> 01:12:38.000 so gefühlt. 01:12:38.000 --> 01:12:40.000 Also hier, wir haben jetzt wieder die Antwortmöglichkeiten, 01:12:40.000 --> 01:12:42.000 wie habt ihr es noch nie gehört? 01:12:42.000 --> 01:12:44.000 Ich weiß, was es ist, aber noch nie benutzt. 01:12:44.000 --> 01:12:46.000 Ich habe es benutzt, es geht jetzt nicht drum, 01:12:46.000 --> 01:12:48.000 ja, ich würde es auch wieder benutzen, 01:12:48.000 --> 01:12:50.000 wenn der Use Case sich bieten würde, aber irgendwie, 01:12:52.000 --> 01:12:54.000 ja, er würde es sich halt schon bieten, 01:12:54.000 --> 01:12:56.000 aber es ist halt alles irgendwie noch so, 01:12:56.000 --> 01:12:58.000 also man vergrößert dann ja das Problem 01:12:58.000 --> 01:13:00.000 mit, ich will eine Web-App publizieren, 01:13:00.000 --> 01:13:02.000 dass ja an sich genommen schon keine Trivialität ist, 01:13:02.000 --> 01:13:04.000 das wird dadurch nicht wirklich einfacher, 01:13:04.000 --> 01:13:06.000 wenn man das noch dazu packt. 01:13:06.000 --> 01:13:08.000 Ja. 01:13:08.000 --> 01:13:10.000 Und der Mehrwert, 01:13:10.000 --> 01:13:12.000 manchmal nicht ganz so klar. 01:13:12.000 --> 01:13:14.000 Deswegen, also ich würde sagen, haben wir benutzt 01:13:14.000 --> 01:13:16.000 und enthalten uns jedes weiteren Kommentar 01:13:16.000 --> 01:13:18.000 über die Toten nur Gutes. 01:13:18.000 --> 01:13:20.000 Genau, das nächste ist, 01:13:20.000 --> 01:13:22.000 ich finde es schaut immer so schön aus, 01:13:22.000 --> 01:13:24.000 Intel, also Internationalization, 01:13:24.000 --> 01:13:26.000 hier mein ähnlicher Punkt wieder wieder vor, 01:13:26.000 --> 01:13:28.000 ich habe halt ein kleiner Library 01:13:28.000 --> 01:13:30.000 für Internationalization 01:13:30.000 --> 01:13:32.000 und kümmere nämlich um nichts weiteres. 01:13:32.000 --> 01:13:34.000 Ja. 01:13:34.000 --> 01:13:36.000 Ich verrichte keine ehrliche Arbeit, 01:13:36.000 --> 01:13:38.000 die Internationalisierung bräuchte, 01:13:38.000 --> 01:13:40.000 von daher stellt sich das Problem nicht, 01:13:40.000 --> 01:13:42.000 aber wir wissen, was es ist. 01:13:42.000 --> 01:13:44.000 Für Open Source, 01:13:44.000 --> 01:13:46.000 Leute wahrscheinlich wichtiger, 01:13:46.000 --> 01:13:48.000 ich benutze dann die Open Source, 01:13:48.000 --> 01:13:50.000 sonst sagt eine Danke oder spendieren Kaffee. 01:13:50.000 --> 01:13:52.000 So macht man das. 01:13:52.000 --> 01:13:54.000 So, WebGL 01:13:54.000 --> 01:13:56.000 ist weit entfernt von dem, 01:13:56.000 --> 01:13:58.000 was ich im Alltag tue. 01:14:00.000 --> 01:14:02.000 Also irgendwann in der frühen Kreidezeit 01:14:02.000 --> 01:14:04.000 habe ich mal ein WebGL Shader geschrieben, 01:14:04.000 --> 01:14:06.000 einfach nur zum Ausprobieren 01:14:06.000 --> 01:14:08.000 und dann habe ich so ein grünes Quadrat im Browser gehabt 01:14:08.000 --> 01:14:10.000 und habe da irgendwie 50 Zellen für gebraucht 01:14:10.000 --> 01:14:12.000 und ich mache jetzt wieder Background Color Green. 01:14:12.000 --> 01:14:14.000 Ich habe das im Studium gehabt. 01:14:14.000 --> 01:14:16.000 Ich weiß nicht mehr, ob Bachelor oder Master 01:14:16.000 --> 01:14:18.000 und ich dachte, das wird jetzt total geil 01:14:18.000 --> 01:14:20.000 und wir mussten irgendwie ein Roboter zeichnen 01:14:20.000 --> 01:14:22.000 und den Arm schwenken lassen 01:14:22.000 --> 01:14:24.000 von dem Roboter. 01:14:24.000 --> 01:14:26.000 Ne, 01:14:26.000 --> 01:14:28.000 das war, 01:14:28.000 --> 01:14:30.000 er hat keinen Spaß. 01:14:30.000 --> 01:14:32.000 Also da fand ich so Turing-Maschine 01:14:32.000 --> 01:14:34.000 und der Terministik und so was ausrechnen 01:14:34.000 --> 01:14:36.000 und Matrixen auszurechnen 01:14:36.000 --> 01:14:38.000 und Hashtabels 01:14:38.000 --> 01:14:40.000 auf Papier zu schreiben 01:14:40.000 --> 01:14:42.000 hat mir mehr Spaß gemacht. 01:14:42.000 --> 01:14:44.000 Ja, 01:14:44.000 --> 01:14:46.000 da gehe ich mit 01:14:46.000 --> 01:14:48.000 nur weil wir uns keine Hashtabels 01:14:48.000 --> 01:14:50.000 sondern mehr so der Untergang des römischen Reiches. 01:14:50.000 --> 01:14:52.000 Aber, wir haben es beide benutzt, ja? 01:14:52.000 --> 01:14:54.000 Ja, wir haben es beide benutzt. 01:14:54.000 --> 01:14:56.000 Ja, hallo. 01:14:56.000 --> 01:14:58.000 Stimmt, wir fragen uns ja gar nicht, 01:14:58.000 --> 01:15:00.000 ja, ja, ja, haben es benutzt, Thumbs Up. 01:15:00.000 --> 01:15:02.000 Web Animations 01:15:02.000 --> 01:15:04.000 habe ich nicht benutzt. 01:15:04.000 --> 01:15:06.000 Nicht ein einziges Mal Element.Animate 01:15:06.000 --> 01:15:08.000 Keyframe-Frame geben. 01:15:08.000 --> 01:15:10.000 Nein, tatsächlich kein einziges Mal. 01:15:10.000 --> 01:15:12.000 Bei View bekommst du Transitions 01:15:12.000 --> 01:15:14.000 out of the box mit. 01:15:14.000 --> 01:15:16.000 Da gibt es die Komponente Transition, 01:15:16.000 --> 01:15:18.000 da kannst du ein bisschen Werte angeben 01:15:18.000 --> 01:15:20.000 und weiter ging es 01:15:20.000 --> 01:15:22.000 bei meinen Newscases bisher nicht. 01:15:22.000 --> 01:15:24.000 Ich sage es nicht, dass es gut oder schlecht ist, 01:15:24.000 --> 01:15:26.000 aber es ist einfach so. 01:15:26.000 --> 01:15:28.000 Ja, das ist halt die Pest der modernen Webframeworks, 01:15:28.000 --> 01:15:30.000 wo manche Sachen so einfach sein könnten, 01:15:30.000 --> 01:15:32.000 wie, ah, okay, es ist hier gerade 01:15:32.000 --> 01:15:34.000 ein Ereignis passiert 01:15:34.000 --> 01:15:36.000 wenn als Nebenwirkung gleichsam 01:15:36.000 --> 01:15:38.000 die Animationen abgespielt werden. 01:15:38.000 --> 01:15:40.000 Erstens passiert hier nichts, es gibt hier 01:15:40.000 --> 01:15:42.000 nur Daten und Nebenwirkungen schon gar nicht. 01:15:42.000 --> 01:15:44.000 Hier ist React angesagt, ja, ja, ja, ja, ja. 01:15:44.000 --> 01:15:46.000 Und dann nimmst du halt lieber diese Library mit 01:15:46.000 --> 01:15:48.000 in den 7 Megabyte JavaScript, wenn du eine Animation haben willst, 01:15:48.000 --> 01:15:50.000 aber wehe, du rufst einfach eine Standardfunktion auf. 01:15:50.000 --> 01:15:52.000 Ich würde es ja gerne benutzen, 01:15:52.000 --> 01:15:54.000 aber man lässt mich ja nicht. 01:15:56.000 --> 01:15:58.000 Ja, so ist das. 01:15:58.000 --> 01:16:00.000 Dann kommen 01:16:00.000 --> 01:16:02.000 dann kommen wir zu 01:16:02.000 --> 01:16:04.000 WebRTC 01:16:04.000 --> 01:16:06.000 Real-Time-Communication. 01:16:08.000 --> 01:16:10.000 Wir kämen uns ja nicht in den Sinn, 01:16:10.000 --> 01:16:12.000 jemals WebRTC zu benutzen. 01:16:12.000 --> 01:16:14.000 Nee, 01:16:14.000 --> 01:16:16.000 das wird natürlich nicht live informieren. 01:16:16.000 --> 01:16:18.000 Ich wollte jetzt mehr so auf unseren 01:16:18.000 --> 01:16:20.000 Sendcaster-Call anspielen. 01:16:20.000 --> 01:16:22.000 Ah, 01:16:22.000 --> 01:16:24.000 stimmt. 01:16:24.000 --> 01:16:26.000 Wir benutzen das, ja, also Layers of Interaction, 01:16:26.000 --> 01:16:28.000 so nutzen wir das jetzt selber, 01:16:28.000 --> 01:16:30.000 da nutzen wir ein Framework, das das nutzt. 01:16:30.000 --> 01:16:32.000 Also WebGL von Handschreiben sicherlich 01:16:32.000 --> 01:16:34.000 eine Zumutung, nimmst du 3JS, 01:16:34.000 --> 01:16:36.000 ist total easy. 01:16:36.000 --> 01:16:38.000 WebRTC benutzen zu Fuß, 01:16:38.000 --> 01:16:40.000 geradezu unmöglich mit einer Library machbar, 01:16:40.000 --> 01:16:42.000 aber noch besser ist es, man schmeißt irgendwie 01:16:42.000 --> 01:16:44.000 Sendcaster-Geld in den Rachen und dann benutzen wir es einfach 01:16:44.000 --> 01:16:46.000 so, indem man auf einen Button klickt. 01:16:46.000 --> 01:16:48.000 Das zählt doch als benutzen oder nicht? 01:16:48.000 --> 01:16:50.000 Ja, benutzt. 01:16:50.000 --> 01:16:52.000 Wir machen uns halt die Welt, 01:16:52.000 --> 01:16:54.000 wie es uns gefällt. 01:16:54.000 --> 01:16:56.000 Nicht wahr? Aber ich meine, hey, das ist wirklich mal 01:16:56.000 --> 01:16:58.000 ein Webstand, wo man wirklich sagen kann, 01:16:58.000 --> 01:17:00.000 das ist derzeit zum De facto-Standard geworden. 01:17:00.000 --> 01:17:02.000 Ja. 01:17:02.000 --> 01:17:04.000 Oder hast du noch irgendwelche Software auf deiner Kiste, 01:17:04.000 --> 01:17:06.000 womit du regelmäßig irgendwelche Calls 01:17:06.000 --> 01:17:08.000 durchführst und das findet nicht im Browser statt? 01:17:12.000 --> 01:17:14.000 So, die ganzen Skypes und so sind einfach 01:17:14.000 --> 01:17:16.000 bei mir komplett verschwunden. Das ist einfach immer Browser-Tab 01:17:16.000 --> 01:17:18.000 aufmachen. 01:17:18.000 --> 01:17:20.000 Ist das nicht auch 01:17:20.000 --> 01:17:22.000 Elektron-Webtechnik, also möglicherweise was anderes? 01:17:22.000 --> 01:17:28.000 Auf Titten, aber ich weiß es nicht. 01:17:28.000 --> 01:17:30.000 Zoom ist ein guter Einwand. 01:17:30.000 --> 01:17:32.000 Ja, ich habe keine Ahnung. 01:17:32.000 --> 01:17:34.000 Zoom ist ja was, ich bringe gerade Zoom und Slack 01:17:34.000 --> 01:17:36.000 durcheinander. Guten Morgen. 01:17:36.000 --> 01:17:38.000 Wie kann ich ein Zoom und Slack 01:17:38.000 --> 01:17:40.000 durcheinander bringen? 01:17:40.000 --> 01:17:42.000 Ja, ne, nicht bei mir. 01:17:42.000 --> 01:17:44.000 Hier regiert ja der Pinguin. 01:17:44.000 --> 01:17:46.000 Und der Teams-Kleint ist ja tatsächlich, 01:17:46.000 --> 01:17:48.000 also den kannst du dir für Linux runterladen. 01:17:48.000 --> 01:17:50.000 Aber wenn du den hast und du bist da irgendwie 01:17:50.000 --> 01:17:52.000 so Master auf die Teams-Gruppe, 01:17:52.000 --> 01:17:54.000 dann hast du so subtile UI-Dinger, 01:17:54.000 --> 01:17:56.000 die auf Linux fehlen. 01:17:56.000 --> 01:17:58.000 Und das weiß halt keiner. 01:17:58.000 --> 01:18:00.000 Ich hatte da mal einen wunderbaren, 01:18:00.000 --> 01:18:02.000 wunderbaren Remote Workshop und die so, 01:18:02.000 --> 01:18:04.000 klick halt eben einfach da drauf. 01:18:04.000 --> 01:18:06.000 Ja, aber das ist doch nicht hier. 01:18:06.000 --> 01:18:08.000 Aber das ist doch da. 01:18:08.000 --> 01:18:10.000 Nee, ist das nicht, bis wir halt gemerkt haben. 01:18:10.000 --> 01:18:12.000 Teams auf Windows und Teams auf Linux 01:18:12.000 --> 01:18:14.000 hat halt diesen einen Button nicht. 01:18:14.000 --> 01:18:16.000 Ja. 01:18:16.000 --> 01:18:18.000 Ich habe Slack und Google. 01:18:18.000 --> 01:18:20.000 Ja, besser. 01:18:20.000 --> 01:18:22.000 Ich weiß immer nicht, ob Meet oder Hangout heißt, 01:18:22.000 --> 01:18:24.000 was immer gerade der Name das ist. 01:18:24.000 --> 01:18:26.000 Glauben, es heißt Meet, aber ich bin auch nicht sicher. 01:18:26.000 --> 01:18:28.000 Ich gönne sicher irgendwie, es heißt Meet, 01:18:28.000 --> 01:18:30.000 aber es hat irgendwie noch Hangout. 01:18:30.000 --> 01:18:32.000 Ja, ja, ist der Link. 01:18:32.000 --> 01:18:34.000 Ja, gut. 01:18:34.000 --> 01:18:36.000 Ebenfalls funktioniert halt einfach 01:18:36.000 --> 01:18:38.000 das Web-Speech-API. 01:18:38.000 --> 01:18:40.000 Brauche ich halt auch, 01:18:40.000 --> 01:18:42.000 nicht? 01:18:42.000 --> 01:18:44.000 Nee, hab ich auch tatsächlich noch nie 01:18:44.000 --> 01:18:46.000 auch nur eine Demo mitgebaut, wenn ich jetzt mal so 01:18:46.000 --> 01:18:48.000 lustige Demos bauen. 01:18:48.000 --> 01:18:50.000 Auf jeden Fall. 01:18:50.000 --> 01:18:52.000 Fällt mir halt jetzt auch gerade mal auf. 01:18:52.000 --> 01:18:54.000 Aber die ist komplett aus meiner Wahrnehmung 01:18:54.000 --> 01:18:56.000 rausgefallen. Interessant. 01:18:56.000 --> 01:18:58.000 Man kann auch so Konferenz-Talks machen 01:18:58.000 --> 01:19:00.000 und dann fängt man zu singen und dann wird alles witzig. 01:19:00.000 --> 01:19:02.000 Also für die Extrovertierten, für die Introvertierten 01:19:02.000 --> 01:19:04.000 wie mich wird natürlich alles schrecklich. 01:19:04.000 --> 01:19:06.000 Ja, aber was tut man nicht alles 01:19:06.000 --> 01:19:08.000 für die Show? 01:19:08.000 --> 01:19:10.000 So, dann Web-Sort-Cad. 01:19:10.000 --> 01:19:12.000 Auf der Webseite, 01:19:12.000 --> 01:19:14.000 im Einsatz, funktioniert ganz wunderbar 01:19:14.000 --> 01:19:16.000 in so einem Feature. 01:19:16.000 --> 01:19:18.000 Ich stell mir mal kurz WordPress vor, 01:19:18.000 --> 01:19:20.000 weil kennt jeder 01:19:20.000 --> 01:19:22.000 und zwei Leute 01:19:22.000 --> 01:19:24.000 oder fünf Leute haben drauf Zugriff, 01:19:24.000 --> 01:19:26.000 um zu sagen, obacht jemand anders 01:19:26.000 --> 01:19:28.000 werkelt da auch gerade rum 01:19:28.000 --> 01:19:30.000 und irgendjemand, wie man es halt dann implementieren möchte, 01:19:30.000 --> 01:19:32.000 irgendjemanden davon entzieht man halt jetzt quasi 01:19:32.000 --> 01:19:34.000 die Rechte. 01:19:34.000 --> 01:19:36.000 Kann man natürlich quasi auf die einfache 01:19:36.000 --> 01:19:38.000 Variante machen und sagen, hier hast du 01:19:38.000 --> 01:19:40.000 den ganzen 01:19:40.000 --> 01:19:42.000 so ein Layer drüber und kannst halt nichts mehr klicken. 01:19:42.000 --> 01:19:44.000 Könntest du jetzt halt in die 01:19:44.000 --> 01:19:46.000 DevTools reingehen und das wegmachen 01:19:46.000 --> 01:19:48.000 und vielleicht noch ein Request absenden 01:19:48.000 --> 01:19:50.000 und der würde vielleicht ein Error werfen 01:19:50.000 --> 01:19:52.000 oder du implantierst es besser und sagst, du kannst 01:19:52.000 --> 01:19:54.000 gar nichts mehr ab, Browser förd, 01:19:54.000 --> 01:19:56.000 nichts mehr ab. 01:19:56.000 --> 01:19:58.000 Dafür haben wir das im Einsatz 01:19:58.000 --> 01:20:00.000 und eben mit Web-Sort-Cad 2 ist damit einfach 01:20:00.000 --> 01:20:02.000 ziemlich stabil und gut läuft, dass auch die Leute 01:20:02.000 --> 01:20:04.000 dann gleich wieder Zugriff haben, sobald 01:20:04.000 --> 01:20:06.000 andere Tapp oder so was geschlossen wurde. 01:20:06.000 --> 01:20:08.000 Und da haben wir auch so eine Überprüfung drin, 01:20:08.000 --> 01:20:10.000 mit wie war es zu zwischenzeitlich offline 01:20:10.000 --> 01:20:12.000 und sobald alles funktioniert und weiter. 01:20:12.000 --> 01:20:14.000 Was 01:20:14.000 --> 01:20:16.000 halt so auf anderem Wege wirklich 01:20:16.000 --> 01:20:18.000 nur eine Zumutung wäre, das zu machen. 01:20:18.000 --> 01:20:20.000 Ja, auf der anderen Seite würde ich sagen, 01:20:20.000 --> 01:20:22.000 ich würde jetzt auch Web-Sort-Cad nicht überstrapazieren, 01:20:22.000 --> 01:20:24.000 sondern das, was ich mit Long Polling machen 01:20:24.000 --> 01:20:26.000 kann, würde ich dann auch damit machen, 01:20:26.000 --> 01:20:28.000 weil es halt trotzdem 01:20:28.000 --> 01:20:30.000 einfacher ist. 01:20:30.000 --> 01:20:32.000 Es ist halt wirklich so ein Ding, damit 01:20:32.000 --> 01:20:34.000 kann man halt echt Probleme wunderbar lösen, 01:20:34.000 --> 01:20:36.000 aber das fängt halt dann irgendwann an, so 01:20:36.000 --> 01:20:38.000 alle anderen Abläufe mit zu beeinflussen, weil 01:20:38.000 --> 01:20:40.000 es einfach da ist und irgendwie so eine 01:20:40.000 --> 01:20:42.000 extra Wurst gebraten bekommt. 01:20:42.000 --> 01:20:44.000 Also sich davon fernhalten, 01:20:44.000 --> 01:20:46.000 so lange wie man kann, wie es noch sinnvoll ist, 01:20:46.000 --> 01:20:48.000 aber sobald halt eben nötig ist, 01:20:48.000 --> 01:20:50.000 nimmt man es halt, ja. Also würde ich sagen, 01:20:50.000 --> 01:20:52.000 kriegen wir hier einen Daumen, haben wir benutzt, 01:20:52.000 --> 01:20:54.000 finden wir gut. 01:20:56.000 --> 01:20:58.000 Jut. 01:20:58.000 --> 01:21:00.000 Custom Elements. 01:21:00.000 --> 01:21:02.000 Nicht benutzt. 01:21:04.000 --> 01:21:06.000 Fleißigst benutzt, muss ich sagen. 01:21:06.000 --> 01:21:08.000 Ganz, ganz eifrig. 01:21:08.000 --> 01:21:10.000 Ja, natürlich hier. 01:21:10.000 --> 01:21:12.000 Die Browser-Standard-Fraktion. 01:21:12.000 --> 01:21:14.000 Naja, es ist halt wirklich so, 01:21:14.000 --> 01:21:16.000 die Dinger sind mittlerweile relativ 01:21:16.000 --> 01:21:18.000 ausgereift und stabil. 01:21:18.000 --> 01:21:20.000 Die zu schreiben, ist die absolute 01:21:20.000 --> 01:21:22.000 Zumutung. Das geht gar nicht. 01:21:22.000 --> 01:21:24.000 Wenn man das jedenfalls so 01:21:24.000 --> 01:21:26.000 Vanilla machen möchte. 01:21:26.000 --> 01:21:28.000 Wenn man das irgendwie machen möchte, mit irgendwelchen 01:21:28.000 --> 01:21:30.000 Libraries, kann man es bei meiner Meinung auch gleich 01:21:30.000 --> 01:21:32.000 sonst sein lassen und irgendwie sofort 01:21:32.000 --> 01:21:34.000 sich Angular installieren, weil dann 01:21:34.000 --> 01:21:36.000 ist es ja keine Vanillakomponente mehr. 01:21:36.000 --> 01:21:38.000 Aber ich hätte dann 01:21:38.000 --> 01:21:40.000 eine Prognose 01:21:40.000 --> 01:21:42.000 zu Custom Elements. 01:21:42.000 --> 01:21:44.000 Weil, also 01:21:44.000 --> 01:21:46.000 so Webkomponent sind halt ganz super für so 01:21:46.000 --> 01:21:48.000 Komponenten. So irgendwie das eine UI-Element, 01:21:48.000 --> 01:21:50.000 das ich halt eben haben will. Das ist super. 01:21:50.000 --> 01:21:52.000 Und man kann damit tatsächlich auch ganz gut, 01:21:52.000 --> 01:21:54.000 wenn man irgendwie eine Art Produkt hat, 01:21:54.000 --> 01:21:56.000 tatsächlich 01:21:56.000 --> 01:21:58.000 Pluckins machen, so wirklich so M-Bats, 01:21:58.000 --> 01:22:00.000 so der sprichwörtliche 01:22:00.000 --> 01:22:02.000 Spitzklammer Google Dash Map, Spitzklammer 01:22:02.000 --> 01:22:04.000 so ein Mix-In 01:22:04.000 --> 01:22:06.000 Gleichsam hat man das früher genannt. 01:22:06.000 --> 01:22:08.000 So ein 01:22:08.000 --> 01:22:10.000 embeddable. Kann man damit glaube ich auch extrem 01:22:10.000 --> 01:22:12.000 gut machen. Es ist halt nur so mittlerweile sind wir ja 01:22:12.000 --> 01:22:14.000 im Zeitalter der Datensilus angekommen und so 01:22:14.000 --> 01:22:16.000 binde einfach deine Webseite in meine ein 01:22:16.000 --> 01:22:18.000 so mashupmäßig. Das gibt es ja gar nicht mehr. 01:22:18.000 --> 01:22:20.000 Aber wenn man so was mal machen möchte, 01:22:20.000 --> 01:22:22.000 ist das natürlich super. 01:22:22.000 --> 01:22:24.000 Und ich glaube tatsächlich, 01:22:24.000 --> 01:22:26.000 dass so die ganzen ergonomischen 01:22:26.000 --> 01:22:28.000 Nachteile von Custom Elements 01:22:28.000 --> 01:22:30.000 durch TypeScript beseitigt werden können. 01:22:30.000 --> 01:22:32.000 Wenn 01:22:32.000 --> 01:22:34.000 wir mal so weit sind, dass es 01:22:34.000 --> 01:22:36.000 ECMAScript Decorators fertig standardisiert 01:22:36.000 --> 01:22:38.000 gibt. 01:22:38.000 --> 01:22:40.000 Ich habe ja vor mittlerweile 01:22:40.000 --> 01:22:42.000 allzu langer Zeit mal irgendwie, ich glaube 01:22:42.000 --> 01:22:44.000 in einem TypeScript Update mal mit Stefan darüber gesprochen, 01:22:44.000 --> 01:22:46.000 dass ich nicht glaube, dass ECMAScript Decorators 01:22:46.000 --> 01:22:48.000 jemals was werden. 01:22:48.000 --> 01:22:50.000 Mittlerweile scheinen die aber doch durch den 01:22:50.000 --> 01:22:52.000 Prozess bei TC39 relativ 01:22:52.000 --> 01:22:54.000 gut durchzugehen. 01:22:54.000 --> 01:22:56.000 Und wenn man dann einfach sozusagen deklarieren kann, 01:22:56.000 --> 01:22:58.000 ich habe hier eine Klasse geschrieben und die 01:22:58.000 --> 01:23:00.000 Klasse definiert ein HTML 01:23:00.000 --> 01:23:02.000 Tag, indem ich einfach über die Klasse 01:23:02.000 --> 01:23:04.000 ein Decorator drüber klatsche. Dann ist das 01:23:04.000 --> 01:23:06.000 ein ergonomischer Gewinn gegenüber 01:23:06.000 --> 01:23:08.000 ich muss das Ding manuell registrieren 01:23:08.000 --> 01:23:10.000 und vorher gucken, ob der Technik schon belegt 01:23:10.000 --> 01:23:12.000 ist und dann irgendwie FLs und so. Wenn ich 01:23:12.000 --> 01:23:14.000 einfach deklarieren kann, so ist das jetzt. 01:23:14.000 --> 01:23:16.000 Und wenn ich bei einer privaten Property einfach definieren 01:23:16.000 --> 01:23:18.000 kann, du bist reflektiert in einer 01:23:18.000 --> 01:23:20.000 Dom-Property und in einem Attribut mit dieser 01:23:20.000 --> 01:23:22.000 und jenen Transformationsfunktionen. 01:23:22.000 --> 01:23:24.000 Dann kann das echt ergonomisch ziemlich gut 01:23:24.000 --> 01:23:26.000 werden. 01:23:26.000 --> 01:23:28.000 Da kommt noch was. 01:23:28.000 --> 01:23:30.000 Zwischenzeitlich war ich da echt so ein bisschen so, 01:23:30.000 --> 01:23:32.000 dass es so mühsam die Dinger zu bauen, dass man 01:23:32.000 --> 01:23:34.000 das echt keinem zumuten kann. 01:23:34.000 --> 01:23:36.000 Aber ich glaube, da geht 01:23:36.000 --> 01:23:38.000 noch was. Das wird noch, das wird richtig gut. 01:23:38.000 --> 01:23:40.000 Schauen wir uns das in fünf Jahren an. 01:23:40.000 --> 01:23:42.000 Das geht schneller. 01:23:42.000 --> 01:23:44.000 Und ich meine, es fehlt dem Ganzen natürlich 01:23:44.000 --> 01:23:46.000 auch so ein Applicationsmodell. 01:23:46.000 --> 01:23:48.000 So, eine Komponente 01:23:48.000 --> 01:23:50.000 ist ja sowieso ein schlechter Name, weil alles 01:23:50.000 --> 01:23:52.000 ist ja irgendwie die Komponente. 01:23:52.000 --> 01:23:54.000 Genau, der ganze hätt ich es mit anfangen. 01:23:54.000 --> 01:23:56.000 Das ist irgendwie Entwickler XY 01:23:56.000 --> 01:23:58.000 und Entwicklerin ABC. 01:23:58.000 --> 01:24:00.000 Und sagst denen halt, dass es eine Komponente haben, 01:24:00.000 --> 01:24:02.000 die komplett unterschiedliche Dinger im Kopf. 01:24:02.000 --> 01:24:04.000 Aber wenn man mal hingehen würde, man würde 01:24:04.000 --> 01:24:06.000 das halt irgendwie mal so strukturieren. 01:24:06.000 --> 01:24:08.000 Also meine aktuelle Theorie ist, 01:24:08.000 --> 01:24:10.000 Web-Components sind ja eigentlich 01:24:10.000 --> 01:24:12.000 so normalerweise 01:24:12.000 --> 01:24:14.000 richtige Custom-HTML-Elemente, 01:24:14.000 --> 01:24:16.000 die so wirklich standalone sind 01:24:16.000 --> 01:24:18.000 und wohl definiert und die reflektieren 01:24:18.000 --> 01:24:20.000 ihre Attribute in Dom-Properties 01:24:20.000 --> 01:24:22.000 und so weiter. 01:24:22.000 --> 01:24:24.000 Damit kannst du keine Applikation bauen. 01:24:24.000 --> 01:24:26.000 Also, die brauchst du dafür, aber du brauchst halt noch andere Sachen. 01:24:26.000 --> 01:24:28.000 Du brauchst halt so eine Art 01:24:28.000 --> 01:24:30.000 Quick and Dirty Templating, wo man einfach nur sagen kann, 01:24:30.000 --> 01:24:32.000 ein Konstrukt wie eine Sidebar besteht 01:24:32.000 --> 01:24:34.000 aus dem, dem und dem Ding, 01:24:34.000 --> 01:24:36.000 ruther deklarieren wie so eine reudige React Komponente 01:24:36.000 --> 01:24:38.000 für die Istekiste ohne internen State und so Spaß. 01:24:38.000 --> 01:24:40.000 Also es braucht dafür ein Konzept 01:24:40.000 --> 01:24:42.000 und es braucht halt irgendwie auch ein Konzept 01:24:42.000 --> 01:24:44.000 des Datenhaltenden, 01:24:44.000 --> 01:24:46.000 des Datenhaltenden Objekts, das da drüber gestülpt ist. 01:24:46.000 --> 01:24:48.000 Das war ja meine Idee von vorhin. 01:24:48.000 --> 01:24:50.000 So kein Proxy, sondern ein HTML-Element, 01:24:50.000 --> 01:24:52.000 dass diese Dinger dann provided für alle, 01:24:52.000 --> 01:24:54.000 die da drin genestet sind. 01:24:54.000 --> 01:24:56.000 Und dann kann man ja tatsächlich mit Events 01:24:56.000 --> 01:24:58.000 und so Subscription-Mechanismen, 01:24:58.000 --> 01:25:00.000 die noch nicht mal irgendwie echte Subscriptions 01:25:00.000 --> 01:25:02.000 und Observables sein müssen. Das kann alles super locker 01:25:02.000 --> 01:25:04.000 gekoppelt sein. Wirklich was bauen, was echt gut funktioniert. 01:25:04.000 --> 01:25:06.000 Glaube ich, ich bin mal, 01:25:06.000 --> 01:25:08.000 ich habe mal das beforst 01:25:08.000 --> 01:25:10.000 für ein Unternehmen, 01:25:10.000 --> 01:25:12.000 das mal so gesagt hat, hey, 01:25:12.000 --> 01:25:14.000 TypeScript mit Web Components, 01:25:14.000 --> 01:25:16.000 sollte man das jetzt mal machen 01:25:16.000 --> 01:25:18.000 und dann habe ich mal wirklich einfach so was gebaut 01:25:18.000 --> 01:25:20.000 und dann bin ich relativ, bin so nah an das Ergebnis 01:25:20.000 --> 01:25:22.000 herangekommen, dass ich relativ sicher bin, 01:25:22.000 --> 01:25:24.000 dass, wenn noch ein paar Dinger nachgerüstet 01:25:24.000 --> 01:25:26.000 werden in der Welt, so Decorators here, 01:25:26.000 --> 01:25:28.000 bischen APIs da, 01:25:28.000 --> 01:25:30.000 dass das echt ein Konzept werden könnte, 01:25:30.000 --> 01:25:32.000 dass wirklich konkurrenzfähig ist. 01:25:32.000 --> 01:25:34.000 Weil im Moment ist es halt nicht konkurrenzfähig. 01:25:34.000 --> 01:25:36.000 Ja. 01:25:36.000 --> 01:25:38.000 Das Hallo Welt von Vue.js, 01:25:38.000 --> 01:25:40.000 du hast das ganze Tutorial durchgespielt, 01:25:40.000 --> 01:25:42.000 bist du deine erste Komponente 01:25:42.000 --> 01:25:44.000 bei Web Components überhaupt erst mal 01:25:44.000 --> 01:25:46.000 gedacht hast. 01:25:46.000 --> 01:25:48.000 Aber da geht noch fast, da glaube ich, 01:25:48.000 --> 01:25:50.000 das wird gut. 01:25:50.000 --> 01:25:52.000 Als nächstes haben wir Shatterdom, 01:25:52.000 --> 01:25:54.000 ganz klar habe ich benutzt, 01:25:54.000 --> 01:25:56.000 weil habe ja Vue benutzt, 01:25:56.000 --> 01:25:58.000 ganz klar habe ich Shatterdom benutzt. 01:25:58.000 --> 01:26:00.000 Ach, das ist da einfach so mit drin? 01:26:00.000 --> 01:26:02.000 Also automatisch 01:26:02.000 --> 01:26:04.000 verwendest Shatterdom? 01:26:04.000 --> 01:26:06.000 Irgendein Dom verwendet es im Endeffekt, 01:26:06.000 --> 01:26:08.000 Virtualdom, Shatterdom. 01:26:08.000 --> 01:26:10.000 Shatterdom ist ja 01:26:10.000 --> 01:26:12.000 dieses Web Component-Ding 01:26:12.000 --> 01:26:14.000 für, du kommst hier nicht rein, 01:26:14.000 --> 01:26:16.000 die, beim Number-Input, die kleinen Pfeile. 01:26:16.000 --> 01:26:18.000 Ja, ich drücke das anders aus, 01:26:18.000 --> 01:26:20.000 das stimmt so natürlich nicht, 01:26:20.000 --> 01:26:22.000 aber ich kümmere mich nicht drum, 01:26:22.000 --> 01:26:24.000 weil ich habe Frameworks, die sich drum kümmern, 01:26:24.000 --> 01:26:26.000 dass der Dom richtig geupdatet wird. 01:26:26.000 --> 01:26:28.000 Dann meinst du das Virtualdom? 01:26:28.000 --> 01:26:30.000 Ja, stimmt. 01:26:30.000 --> 01:26:32.000 Genau, nicht das Shatterdom. 01:26:32.000 --> 01:26:34.000 Ja, macht aber nichts, 01:26:34.000 --> 01:26:36.000 weil du weißt, was es ist, 01:26:36.000 --> 01:26:38.000 haben wir jetzt gerade gemerkt. 01:26:38.000 --> 01:26:40.000 Und ich habe es schon benutzt, deswegen kriegts den Daumen, also passt das alles. 01:26:40.000 --> 01:26:42.000 Sehr gut. 01:26:42.000 --> 01:26:44.000 Okay. 01:26:46.000 --> 01:26:48.000 Was haben wir noch? 01:26:48.000 --> 01:26:50.000 Die Page Visibility API. 01:26:50.000 --> 01:26:52.000 Hm. 01:26:52.000 --> 01:26:54.000 Hm. 01:26:54.000 --> 01:26:56.000 Was macht die? 01:26:56.000 --> 01:26:58.000 Tab ist nicht fokussiert, 01:26:58.000 --> 01:27:00.000 kriegst du mit und kannst dann irgendwie 01:27:00.000 --> 01:27:02.000 Arbeit reduzieren. 01:27:02.000 --> 01:27:04.000 Ja. 01:27:04.000 --> 01:27:06.000 Ja, das klingt interessant. 01:27:06.000 --> 01:27:08.000 Klingt interessant, ist aber auch so ein bisschen 01:27:08.000 --> 01:27:10.000 Tragedy of the comments, ne? 01:27:10.000 --> 01:27:12.000 Wenn du das nicht benutzt, 01:27:12.000 --> 01:27:14.000 dann leiden ja andere drunter. 01:27:14.000 --> 01:27:16.000 Ja. 01:27:16.000 --> 01:27:18.000 Du frisst ja Ressourcen, 01:27:18.000 --> 01:27:20.000 aber du frisst ja die Ressourcen von wem anders. 01:27:20.000 --> 01:27:22.000 Also muss sich das ja streng genommen 01:27:22.000 --> 01:27:24.000 so richtig nicht 01:27:24.000 --> 01:27:26.000 stören. 01:27:26.000 --> 01:27:28.000 Weißt du, du bist ein besserer Mitbürger 01:27:28.000 --> 01:27:30.000 und du beschmierst die Bushaltestelle halt eben nicht 01:27:30.000 --> 01:27:32.000 mit deinem Ressourcenverbrauch, aber pfff, ne? 01:27:32.000 --> 01:27:34.000 Ja, gut, wenn ich mir aber den 01:27:34.000 --> 01:27:36.000 Accessibility-State im Web anschaue, 01:27:36.000 --> 01:27:38.000 dann sind wir da eh nicht so doll. 01:27:38.000 --> 01:27:40.000 Eben. 01:27:40.000 --> 01:27:42.000 Freundlich zu sein. 01:27:42.000 --> 01:27:44.000 Eben. Also ich würde sagen, 01:27:44.000 --> 01:27:46.000 Pagevisibility-API 01:27:46.000 --> 01:27:48.000 wissen wir, benutzt haben wir es noch nicht, 01:27:48.000 --> 01:27:50.000 wenn ich dich jetzt richtig verstanden habe 01:27:50.000 --> 01:27:52.000 und man sollte so eine Art 01:27:52.000 --> 01:27:54.000 Name-and-Shame-Kampagne starten 01:27:54.000 --> 01:27:56.000 für alle Ressourcen hungrigen Dinger, die im Hintergrund... 01:27:56.000 --> 01:27:58.000 Ich überlege gerade, was spannend sein könnte, 01:27:58.000 --> 01:28:00.000 wenn ich jetzt zum Beispiel 01:28:00.000 --> 01:28:02.000 einen Video pausiere, 01:28:02.000 --> 01:28:04.000 wenn ich jetzt weggehe. 01:28:04.000 --> 01:28:06.000 Ich weiß aber gar nicht, ob das nicht automatisch passiert 01:28:06.000 --> 01:28:08.000 weil ich hier auch eigentlich 01:28:08.000 --> 01:28:10.000 eh übernennen wahrscheinlich wieder 01:28:10.000 --> 01:28:12.000 eine Library ein, die sich schon drum kümmert. 01:28:12.000 --> 01:28:14.000 Ähm, ja, 01:28:14.000 --> 01:28:16.000 gut. 01:28:16.000 --> 01:28:18.000 Oder ne, jetzt fällt mir gerade was ein. 01:28:18.000 --> 01:28:20.000 Wir haben, 01:28:20.000 --> 01:28:22.000 wir benutzen confetti.js 01:28:22.000 --> 01:28:24.000 weil wenn man da auf einen bestimmten 01:28:24.000 --> 01:28:26.000 Button drückt, dann kommt confetti ist ein 01:28:26.000 --> 01:28:28.000 Highlight. Und da ist mir schon oft aufgefallen, 01:28:28.000 --> 01:28:30.000 wenn ich das lokal laufen lasse, 01:28:30.000 --> 01:28:32.000 dann laufen bei mir so background 01:28:32.000 --> 01:28:34.000 Shops die laufen so ein bisschen. 01:28:34.000 --> 01:28:36.000 Deswegen mache ich immer, dann drücke ich auf den Button, kommt confetti. 01:28:36.000 --> 01:28:38.000 Ich weiß aber schon auf dem Local House 01:28:38.000 --> 01:28:40.000 dauert es kurz 10 Sekunden und gehe woanders hin 01:28:40.000 --> 01:28:42.000 und komme zurück und erst dann 01:28:42.000 --> 01:28:44.000 sehe ich, dass confetti zu Ende gehen. 01:28:44.000 --> 01:28:46.000 Ich weiß aber nicht, ob das überhaupt 01:28:46.000 --> 01:28:48.000 überhaupt notwendig ist oder ob das nicht eh 01:28:48.000 --> 01:28:50.000 im Browser drin ist. Ich bin mir unsicher. 01:28:50.000 --> 01:28:52.000 Hm. 01:28:52.000 --> 01:28:54.000 Hm. 01:28:54.000 --> 01:28:56.000 Ja, das können nur die Kommentare 01:28:56.000 --> 01:28:58.000 zu dieser Revision klären, glaube ich. 01:29:00.000 --> 01:29:02.000 Nächste Antwort gilt 01:29:02.000 --> 01:29:04.000 auch für Broadcast Channel 01:29:04.000 --> 01:29:06.000 API. Ne, muss ich ganz ehrlich sagen, 01:29:06.000 --> 01:29:08.000 ich weiß nicht mal was das ist. 01:29:08.000 --> 01:29:10.000 Ja, aber das klingt doch schon so, als würde ich 01:29:10.000 --> 01:29:12.000 was Broadcasten 01:29:12.000 --> 01:29:14.000 an verschiedene 01:29:14.000 --> 01:29:16.000 Windows, 01:29:16.000 --> 01:29:18.000 an verschiedene Tabs, oder 01:29:18.000 --> 01:29:20.000 vielleicht an alle Iframes 01:29:20.000 --> 01:29:22.000 auf einer, jetzt frage ich mich, ist das 01:29:22.000 --> 01:29:24.000 über den ganzen Browser 01:29:24.000 --> 01:29:26.000 oder vielleicht nur in meinem Tab 01:29:26.000 --> 01:29:28.000 Broadcast dann alles? 01:29:28.000 --> 01:29:30.000 Aber wenn die da nicht auch Window Post Message? 01:29:30.000 --> 01:29:32.000 Äh, ja, aber dann musst du die ja 01:29:32.000 --> 01:29:34.000 für kennen. 01:29:34.000 --> 01:29:36.000 Ja. Du musst ja auch mal ein Iframe das 01:29:36.000 --> 01:29:38.000 zu schicken, musst du es ja adressieren können. 01:29:38.000 --> 01:29:40.000 Und Broadcast Channel, wenn ich das jetzt grad 01:29:40.000 --> 01:29:42.000 bei NPM, meine Fresse, 01:29:42.000 --> 01:29:44.000 MDN, nicht NPM, 01:29:44.000 --> 01:29:46.000 da finde ich keine Informationen, 01:29:46.000 --> 01:29:48.000 da finde ich nur Megabytes. 01:29:48.000 --> 01:29:50.000 So sehe ich, dann ist es wirklich 01:29:50.000 --> 01:29:52.000 postmessagemäßig, nur halt eben 01:29:52.000 --> 01:29:54.000 wird halt eben ge Broadcasted an alle, die 01:29:54.000 --> 01:29:56.000 halt da relevant sind und das wären halt 01:29:56.000 --> 01:29:58.000 eben die Dinge auf dem selben Origin, 01:29:58.000 --> 01:30:00.000 also all die Windows und Tabs und Frames und so weiter. 01:30:00.000 --> 01:30:02.000 Also der Top Level Begriff, den du 01:30:02.000 --> 01:30:04.000 gesucht hast, Browsing Context. 01:30:04.000 --> 01:30:06.000 Also alles, was halt irgendwie so 01:30:06.000 --> 01:30:08.000 eine Instanz da drin ist, die würden damit 01:30:08.000 --> 01:30:10.000 dann adressiert werden. 01:30:10.000 --> 01:30:12.000 Genau, eine Instanz vermachen. 01:30:12.000 --> 01:30:14.000 Ziemlich gut sein im Bereich von, 01:30:14.000 --> 01:30:16.000 wenn man jetzt wirklich kompliziert der Webseiten 01:30:16.000 --> 01:30:18.000 hat, mit mehreren 01:30:18.000 --> 01:30:20.000 Microfront Ends und mehreren Sourcen, 01:30:20.000 --> 01:30:22.000 wo alles herkommt. 01:30:22.000 --> 01:30:24.000 In dem Bereich von, ich hab halt meine kleine 01:30:24.000 --> 01:30:26.000 Next Remix, Next Whatever 01:30:26.000 --> 01:30:28.000 App, ist es 01:30:28.000 --> 01:30:30.000 nicht notwendig. 01:30:30.000 --> 01:30:32.000 Na ja, aber dann, 01:30:32.000 --> 01:30:34.000 wenn das jetzt sozusagen einfach nur Microfront Ends 01:30:34.000 --> 01:30:36.000 in einem Browsing Kontext, also in einem Tab 01:30:36.000 --> 01:30:38.000 wären, dann könntest du ja zum Broadcast 01:30:38.000 --> 01:30:40.000 einfach irgendwelche Events auf das 01:30:40.000 --> 01:30:42.000 Window schmeißen. Den Broadcast Channel brauchst du 01:30:42.000 --> 01:30:44.000 ja, wenn du nicht ein gescheites Windowobjekt 01:30:44.000 --> 01:30:46.000 hast und viele verschiedene Fenster offen hast. 01:30:46.000 --> 01:30:48.000 Guter Punkt, stimmt. 01:30:48.000 --> 01:30:50.000 Also 01:30:50.000 --> 01:30:52.000 Multifenster App 01:30:52.000 --> 01:30:54.000 wäre da mehr so der Use Case. 01:30:54.000 --> 01:30:56.000 Das Net wäre, wenn das so ginge. 01:30:56.000 --> 01:30:58.000 Dann denk ich mal, guck mal nach. 01:30:58.000 --> 01:31:00.000 Könnt interessant werden. 01:31:00.000 --> 01:31:02.000 Na die spannende Frage ist halt, ob man 01:31:02.000 --> 01:31:04.000 sozusagen sämtlichen Kommunikationsfluss, 01:31:04.000 --> 01:31:06.000 also 01:31:06.000 --> 01:31:08.000 du hast jetzt irgendwie dein Nachrichtenbus 01:31:08.000 --> 01:31:10.000 und der ist halt eben aktuell dein Windowobjekt. 01:31:10.000 --> 01:31:12.000 Kann man da einfach 1 zu 1 01:31:12.000 --> 01:31:14.000 ein Broadcast Channel für einsetzen, hat man 01:31:14.000 --> 01:31:16.000 dann automatisch eine Multifensterfähige App. 01:31:16.000 --> 01:31:18.000 Das wäre halt nett, wenn das ginge. 01:31:18.000 --> 01:31:20.000 Du bist unser 01:31:20.000 --> 01:31:22.000 Proof-of-Concept. 01:31:22.000 --> 01:31:24.000 Hm. 01:31:24.000 --> 01:31:26.000 Ja. 01:31:26.000 --> 01:31:28.000 Alles klar, Captain. 01:31:28.000 --> 01:31:30.000 Dann werde ich das mal tun. 01:31:30.000 --> 01:31:32.000 Mache ich tatsächlich. 01:31:32.000 --> 01:31:34.000 Ich muss zwar jetzt am Wochenende ganz viel Weihnachtsdeko 01:31:34.000 --> 01:31:36.000 anbringen, aber wenn ich da mal zwischendurch 01:31:36.000 --> 01:31:38.000 mich an der Computer setzen darf, 01:31:38.000 --> 01:31:40.000 dann werde ich das mal tun. 01:31:40.000 --> 01:31:42.000 Übrigens, wir müssen alle noch ein Adventskranz machen, 01:31:42.000 --> 01:31:44.000 weil ich hab festgestellt, dass wir schon ja vor Dezember 01:31:44.000 --> 01:31:46.000 ersten Advent haben. Und ich als 01:31:46.000 --> 01:31:48.000 erst strengen, bläubige, bayerische Bürger. 01:31:48.000 --> 01:31:50.000 Der erste 01:31:50.000 --> 01:31:52.000 ist der Herr Zanz. 01:31:52.000 --> 01:31:54.000 Wir sind maximal ungläubige, 01:31:54.000 --> 01:31:56.000 weit weg von Bayern, 01:31:56.000 --> 01:31:58.000 befindliche gerade noch eben als 01:31:58.000 --> 01:32:00.000 bürgerdurchgehende Personen. 01:32:00.000 --> 01:32:02.000 Aber in diesem Haushalt, 01:32:02.000 --> 01:32:04.000 wenn auch nur Weihnachten in die Nähe rückt. 01:32:04.000 --> 01:32:06.000 Also, das können jetzt leider die Zuhörer 01:32:06.000 --> 01:32:08.000 nicht sehen, aber siehst du, in der Hintergrund 01:32:08.000 --> 01:32:10.000 haben wir die ganzen Adventskalender. 01:32:10.000 --> 01:32:12.000 Ja. 01:32:12.000 --> 01:32:14.000 Aber nächstes Mal, wenn ich hier bin, wirst du es nicht 01:32:14.000 --> 01:32:16.000 wiedererkennen hier alles. 01:32:16.000 --> 01:32:18.000 Ich habe keinen Kranz, ich bin so ganz modern, 01:32:18.000 --> 01:32:20.000 ein Brett. 01:32:20.000 --> 01:32:22.000 Ja, wir hatten so einen 01:32:22.000 --> 01:32:24.000 Kasten hatten wir früher mal. Den haben wir mal 01:32:24.000 --> 01:32:26.000 irgendwo im Gartencenter gekauft. 01:32:26.000 --> 01:32:28.000 Und das war dann unser, also, es war kein 01:32:28.000 --> 01:32:30.000 Adventskranz, weil es halt eben ein Kasten war. 01:32:30.000 --> 01:32:32.000 Aber in dem Kasten war so viel Kram, 01:32:32.000 --> 01:32:34.000 dass es auch schon irgendwie 01:32:34.000 --> 01:32:36.000 kranzig wurde. Und wir haben uns dann am Ende auf die 01:32:36.000 --> 01:32:38.000 Sprachregelung Adventskrasten geeinigt. 01:32:38.000 --> 01:32:40.000 Sehr gut. 01:32:40.000 --> 01:32:42.000 Und jetzt haben wir einen riesigen Kranz, der von einer 01:32:42.000 --> 01:32:44.000 Decke hängt, die gerade eben in der Lage ist, 01:32:44.000 --> 01:32:46.000 das zu supporten, weil das hier ein klappriger Altbau 01:32:46.000 --> 01:32:48.000 ist. 01:32:48.000 --> 01:32:50.000 Könnte man jetzt den klapprigen Altbau 01:32:50.000 --> 01:32:52.000 finden, indem man die Geolocation 01:32:52.000 --> 01:32:54.000 API verwendet? 01:32:54.000 --> 01:32:56.000 Da geht das, glaube ich, relativ gut, 01:32:56.000 --> 01:32:58.000 weil große Fenster. 01:32:58.000 --> 01:33:00.000 Da kann man den Satelliten noch 01:33:00.000 --> 01:33:02.000 raussehen. 01:33:02.000 --> 01:33:04.000 Ja. 01:33:04.000 --> 01:33:06.000 Der Geolocation API. 01:33:06.000 --> 01:33:08.000 Damals, ich glaube, irgendwie so das zweite 01:33:08.000 --> 01:33:10.000 Kapitel im HTML5-Buch nach der Einführung. 01:33:10.000 --> 01:33:12.000 So alt ist das schon. 01:33:12.000 --> 01:33:14.000 Hab es seither auch nicht mehr benutzt. 01:33:14.000 --> 01:33:16.000 Ich baue halt keine Karten. 01:33:16.000 --> 01:33:18.000 Ich glaube, auch das Problem 01:33:18.000 --> 01:33:20.000 ist halt eben damit auch, 01:33:20.000 --> 01:33:22.000 dass... 01:33:22.000 --> 01:33:24.000 Also, einfach nur Orten. 01:33:24.000 --> 01:33:26.000 Hier bin ich jetzt. 01:33:26.000 --> 01:33:28.000 Ich bestelle mir jetzt Essen. 01:33:28.000 --> 01:33:30.000 Das könnte ja ganz sinnvoll sein. 01:33:30.000 --> 01:33:32.000 Und das klappt auch, glaube ich, ganz gut. 01:33:32.000 --> 01:33:34.000 Aber so dieses 01:33:34.000 --> 01:33:36.000 Position Tracking, wenn du halt irgendwie 01:33:36.000 --> 01:33:38.000 deine Fitness App im Web bauen willst, 01:33:38.000 --> 01:33:40.000 das leidet, glaube ich, echt hart darunter, 01:33:40.000 --> 01:33:42.000 dass so diese Überwachungsprozesse 01:33:42.000 --> 01:33:44.000 und Batterieschonung echt hart gedrosselt 01:33:44.000 --> 01:33:46.000 werden. 01:33:46.000 --> 01:33:48.000 Und wenn der Browser irgendwie im Hintergrund ist, 01:33:48.000 --> 01:33:50.000 dann ist sowieso alles vorbei. 01:33:50.000 --> 01:33:52.000 Und darunter leidet das alles so ein bisschen. 01:33:52.000 --> 01:33:54.000 Weswegen man das, glaube ich, 01:33:54.000 --> 01:33:56.000 weniger häufig sieht und diese ganzen 01:33:56.000 --> 01:33:58.000 Fitnessdinger halt eben alternative Apps 01:33:58.000 --> 01:34:00.000 sind und wahrscheinlich auch erst mal bleiben 01:34:00.000 --> 01:34:02.000 werden, würde ich sagen. 01:34:02.000 --> 01:34:04.000 Tja. 01:34:04.000 --> 01:34:06.000 Aber wenn wir aufrunden, kriegen wir einen 01:34:06.000 --> 01:34:08.000 Daumen daraus, haben wir benutzt. 01:34:08.000 --> 01:34:10.000 Total. 01:34:10.000 --> 01:34:12.000 So, dann haben wir als nächstes 01:34:12.000 --> 01:34:14.000 File System Access 01:34:14.000 --> 01:34:16.000 API. 01:34:16.000 --> 01:34:18.000 Da bin ich mir gar nicht so sicher, wie alt 01:34:18.000 --> 01:34:20.000 oder wie neu das eigentlich ist, bzw. 01:34:20.000 --> 01:34:22.000 wie viele Methoden da 01:34:22.000 --> 01:34:24.000 bei allen Browsen überhaupt zur Verfügung 01:34:24.000 --> 01:34:26.000 stehen oder nicht. 01:34:26.000 --> 01:34:28.000 Und die wievielte 01:34:28.000 --> 01:34:30.000 Iteration dieses Konzepts das ist. 01:34:30.000 --> 01:34:32.000 Weil ich meine irgendwie ganz, ganz alte 01:34:32.000 --> 01:34:34.000 Chrome-Versionen hatten eine Variante 01:34:34.000 --> 01:34:36.000 davon schon seit Ewigkeiten. 01:34:36.000 --> 01:34:38.000 Aber wir fragen mal die allwissende 01:34:38.000 --> 01:34:40.000 Alte. 01:34:40.000 --> 01:34:42.000 File System Access 01:34:42.000 --> 01:34:44.000 API. 01:34:44.000 --> 01:34:46.000 Sieht ziemlich alt aus. 01:34:46.000 --> 01:34:48.000 Also alt. 01:34:48.000 --> 01:34:50.000 Was ist das Gegenteil von alt? Neu. 01:34:50.000 --> 01:34:52.000 Weil das halt alles schlecht supportet 01:34:52.000 --> 01:34:54.000 ist. 01:34:54.000 --> 01:34:56.000 File System Access API ist auch noch 01:34:56.000 --> 01:34:58.000 kein richtiger Standard, wie ich jetzt hier 01:34:58.000 --> 01:35:00.000 sehe. Ist eine Draft Community 01:35:00.000 --> 01:35:02.000 Report vom W3C. 01:35:02.000 --> 01:35:04.000 Das ist ja normalerweise nicht so... 01:35:04.000 --> 01:35:06.000 Also wenn das jetzt jemand regelmäßig 01:35:06.000 --> 01:35:08.000 macht, würde ich mich halt da eben auch... 01:35:08.000 --> 01:35:10.000 Ich würde es hinterfragen. 01:35:10.000 --> 01:35:12.000 Ja. 01:35:12.000 --> 01:35:14.000 Stream Writing Methoden. 01:35:14.000 --> 01:35:16.000 Da kann man da mal 4-Await-Off benutzen 01:35:16.000 --> 01:35:18.000 in so ein Zeug. 01:35:18.000 --> 01:35:20.000 Das ist schon sehr spannend, aber ich glaube, 01:35:20.000 --> 01:35:22.000 das muss dafür erstmal zumindest mal 01:35:22.000 --> 01:35:24.000 eine Working Draft bekommen 01:35:24.000 --> 01:35:26.000 und nicht so was hier. 01:35:28.000 --> 01:35:30.000 So, was haben wir als nächstes? 01:35:30.000 --> 01:35:32.000 Die Web Share API. 01:35:32.000 --> 01:35:34.000 Habe ich noch nie benutzt? Kennst du die? 01:35:34.000 --> 01:35:36.000 Ja, ich kenne... 01:35:36.000 --> 01:35:38.000 Ich habe mal Navigator dort share gehört 01:35:38.000 --> 01:35:40.000 und jetzt bin ich auch schon 01:35:40.000 --> 01:35:42.000 fertig. 01:35:42.000 --> 01:35:44.000 Genau, das ist das. 01:35:44.000 --> 01:35:46.000 Ja, aber ich weiß nicht, was es tut. 01:35:46.000 --> 01:35:48.000 Also ich habe mal davon gehört, aber ich 01:35:48.000 --> 01:35:50.000 könnte jetzt nicht erklären, was es tut. 01:35:50.000 --> 01:35:52.000 Also ich meine, ich könnte es mir jetzt 01:35:52.000 --> 01:35:54.000 irgendwie educated guesses machen 01:35:54.000 --> 01:35:56.000 und sagen, das schert wohl 01:35:56.000 --> 01:35:58.000 irgendwelche Daten, 01:35:58.000 --> 01:36:00.000 was auch sonst, wenn nicht Daten. 01:36:00.000 --> 01:36:02.000 Ja, nee, es ist dieser Workflow 01:36:02.000 --> 01:36:04.000 und du sagst, teile das mit 01:36:04.000 --> 01:36:06.000 irgendwie. 01:36:06.000 --> 01:36:08.000 Du drückst auf den Share-Button drauf 01:36:08.000 --> 01:36:10.000 und dann kommt ja, willst du eine 01:36:10.000 --> 01:36:12.000 Message mit dem Messenger an den schicken 01:36:12.000 --> 01:36:14.000 oder eine E-Mail an die jene Person? 01:36:14.000 --> 01:36:16.000 Das ist das, nur als Web-Technologie. 01:36:16.000 --> 01:36:18.000 Als Web-Technologie. 01:36:18.000 --> 01:36:20.000 Das ist ja auch spannend generell, 01:36:20.000 --> 01:36:22.000 dass Webseiten so langsam fast ein bisschen 01:36:22.000 --> 01:36:24.000 mehr wie Apps auf mobilen End-Geräten 01:36:24.000 --> 01:36:26.000 teilweise werden können. 01:36:26.000 --> 01:36:28.000 Auch mit Notifications habe ich da schon 01:36:28.000 --> 01:36:30.000 ganz spannende Sachen gesehen. 01:36:30.000 --> 01:36:32.000 Nee, habe ich auch nicht. Und das Ding ist halt, 01:36:32.000 --> 01:36:34.000 das ist halt auch so eine Inselgeschichte. 01:36:34.000 --> 01:36:36.000 Wofür 01:36:36.000 --> 01:36:38.000 auf Mobil-Geräten man da sicherlich 01:36:38.000 --> 01:36:40.000 ein Feature hat, was dann Bedürfnis 01:36:40.000 --> 01:36:42.000 erfüllt. 01:36:42.000 --> 01:36:44.000 Aber so den Share-Button gibt es ja 01:36:44.000 --> 01:36:46.000 auf dem Desktop gar nicht. 01:36:46.000 --> 01:36:48.000 Ja, das gibt es schon, 01:36:48.000 --> 01:36:50.000 wenn du jetzt irgendwie 01:36:50.000 --> 01:36:52.000 Videos aufnimmst. 01:36:52.000 --> 01:36:54.000 Also klar, ich bin auch noch so ein bisschen old-school 01:36:54.000 --> 01:36:56.000 und ich mache irgendwie meinen Quicktime-Video 01:36:56.000 --> 01:36:58.000 und lade es halt hoch. 01:36:58.000 --> 01:37:00.000 Es gibt ja auch so Tools wie Loom. 01:37:00.000 --> 01:37:02.000 Und dann stellt man da halt seinen 5-Minuten-Video. 01:37:02.000 --> 01:37:04.000 Das kann man dann schicken. 01:37:04.000 --> 01:37:06.000 Und da gibt es ja ganz viele Share-Links. 01:37:06.000 --> 01:37:08.000 Das sind halt Buttons, 01:37:08.000 --> 01:37:10.000 die dann eigene Modal-Implementierungen 01:37:10.000 --> 01:37:12.000 haben 01:37:12.000 --> 01:37:14.000 und halt halt alles eine eigene, wie gesagt, 01:37:14.000 --> 01:37:16.000 Implementierung. Ob du jetzt den 01:37:16.000 --> 01:37:18.000 Embed-Links haben willst oder den Share-Link 01:37:18.000 --> 01:37:20.000 oder ob du alles mögliche kriegst 01:37:20.000 --> 01:37:22.000 oder bei Google es auch schwer. 01:37:22.000 --> 01:37:24.000 Das ist ja schon ein bisschen was anderes, 01:37:24.000 --> 01:37:26.000 als wenn ich auf meinem Telefon einfach 01:37:26.000 --> 01:37:28.000 einen Messenger installiere 01:37:28.000 --> 01:37:30.000 und irgendeinen Photogallery-Manager 01:37:30.000 --> 01:37:32.000 installiere. Und die beiden wissen nichts voneinander, 01:37:32.000 --> 01:37:34.000 aber die haben halt eben einfach ein Protokoll 01:37:34.000 --> 01:37:36.000 eingebaut, mit dem ich aus der Fotogallerie 01:37:36.000 --> 01:37:38.000 was an den Messenger schicken kann, 01:37:38.000 --> 01:37:40.000 ohne dass die beiden was voneinander wissen müssen. 01:37:40.000 --> 01:37:42.000 So ein Mechanismus 01:37:42.000 --> 01:37:44.000 jetzt irgendwie im so normalen Windows-Rechner gibt es ja nicht. 01:37:44.000 --> 01:37:46.000 So ein Protokoll, oder? 01:37:46.000 --> 01:37:48.000 Ich denke nicht. 01:37:48.000 --> 01:37:50.000 Also wie gesagt, auch das Beispiel, 01:37:50.000 --> 01:37:52.000 was ich gerade meinte, ist halt eine Eigenimplementierung 01:37:52.000 --> 01:37:54.000 von Share, dann bekommst du ein Link 01:37:54.000 --> 01:37:56.000 und das ist ja nicht so Teil, 01:37:56.000 --> 01:37:58.000 dass es über Slack mit der Person 01:37:58.000 --> 01:38:00.000 wie es auf dem Handy fliegt machen könnte. 01:38:00.000 --> 01:38:02.000 Genau. 01:38:02.000 --> 01:38:04.000 Aber das ist halt der Workflow, der das 01:38:04.000 --> 01:38:06.000 supportet wird und das ist ja schon ein bisschen seltsam 01:38:06.000 --> 01:38:08.000 hier in der API zu haben. 01:38:08.000 --> 01:38:10.000 Die halt sozusagen eine Sorte von Device 01:38:10.000 --> 01:38:12.000 irgendwie ganz gut bespielt, aber wo ich halt irgendwie 01:38:12.000 --> 01:38:14.000 so auf dem Desktop, also ich habe hier 01:38:14.000 --> 01:38:16.000 jetzt ein Share-Button hier in meinem Chrome, 01:38:16.000 --> 01:38:18.000 anscheinend Seite teilen kann ich drauf drücken. 01:38:18.000 --> 01:38:20.000 Link kopieren an meine Geräte senden, 01:38:20.000 --> 01:38:22.000 also irgendwas gibt es da schon. Aber üblich 01:38:22.000 --> 01:38:24.000 vielleicht sind wir zu alt. 01:38:24.000 --> 01:38:26.000 Link teilen über LinkedIn, 01:38:26.000 --> 01:38:28.000 das ist aber garantiert nicht etwas, was 01:38:28.000 --> 01:38:30.000 irgendwie der aus meinem Nutzerverhalten 01:38:30.000 --> 01:38:32.000 ermittelt hat. 01:38:32.000 --> 01:38:34.000 Das ist Hard-Coded, da bin ich mir sicher. 01:38:34.000 --> 01:38:36.000 Naja, 01:38:36.000 --> 01:38:38.000 oder vielleicht liege ich auch einfach falsch, 01:38:38.000 --> 01:38:40.000 aber es ist halt interessant so diese Dinger zu sehen, 01:38:40.000 --> 01:38:42.000 weil das das Web sammelt ja diese ganzen 01:38:42.000 --> 01:38:44.000 APIs einfach immer so einem Laufe der Zeit 01:38:44.000 --> 01:38:46.000 und sollte eines Tages irgendwie mal das Smartphone 01:38:46.000 --> 01:38:48.000 so aus der Mode kommen, da bin ich ja mal 01:38:48.000 --> 01:38:50.000 sehr gespannt, was dann mit den ganzen APIs los ist, 01:38:50.000 --> 01:38:52.000 ob das so was ist wie irgendwie so der 01:38:52.000 --> 01:38:54.000 Mediatype TV in CSS heutzutage. 01:38:54.000 --> 01:38:56.000 Wo man irgendwie so sagt, so 01:38:56.000 --> 01:38:58.000 alleine die Aussage es gäbe ein 01:38:58.000 --> 01:39:00.000 Mediatype TV ist in der modernen Welt so ein 01:39:00.000 --> 01:39:02.000 Kategoriefehler. 01:39:02.000 --> 01:39:04.000 Wer weiß, wer weiß. 01:39:04.000 --> 01:39:06.000 So, kommen wir zum 01:39:06.000 --> 01:39:08.000 letzten Ding für heute. Wir haben noch extrem 01:39:08.000 --> 01:39:10.000 viele Features vor uns, aber es konnte ja 01:39:10.000 --> 01:39:12.000 keine Ahnung, dass wir hier echt übelst 01:39:12.000 --> 01:39:14.000 abschweifen und jetzt 90 Minuten gebraucht haben, 01:39:14.000 --> 01:39:16.000 um die ersten zwei Seiten von diesem 01:39:16.000 --> 01:39:18.000 Survey zu bearbeiten. Ja, klassische 01:39:18.000 --> 01:39:20.000 Computer an der Estimation. Natürlich schaffen wir 01:39:20.000 --> 01:39:22.000 alle. Ja, locker, locker. 01:39:22.000 --> 01:39:24.000 Gehen wir noch mehr Aufgaben. Können wir überhaupt 01:39:24.000 --> 01:39:26.000 eine Stunde damit füllen? 01:39:26.000 --> 01:39:28.000 Das ist ja lächerlich. 01:39:28.000 --> 01:39:30.000 So, WebXR Device 01:39:30.000 --> 01:39:32.000 API, habe ich garantiert noch nicht benutzt? 01:39:32.000 --> 01:39:34.000 Du? Nee, ist auch experimental 01:39:34.000 --> 01:39:36.000 und dementsprechend 01:39:36.000 --> 01:39:38.000 nie. 01:39:38.000 --> 01:39:40.000 Ist sie? 01:39:40.000 --> 01:39:42.000 Nicht, ich denke schon. 01:39:42.000 --> 01:39:44.000 Supporting Browser, Browser Compatibility 01:39:44.000 --> 01:39:46.000 Table. Die schaut gar nicht 01:39:46.000 --> 01:39:48.000 so schlecht aus. 01:39:48.000 --> 01:39:50.000 Wohl Chromium, ja, Firefox, nein, Safari, nein. 01:39:50.000 --> 01:39:52.000 Also Chrome. 01:39:52.000 --> 01:39:54.000 Also Chrome Edge 01:39:54.000 --> 01:39:56.000 Opera auch noch. 01:39:56.000 --> 01:39:58.000 Ja, das ist aber ja eigentlich so. 01:39:58.000 --> 01:40:00.000 Ist ja was. Das ist eine ganze Menge Zeug. 01:40:00.000 --> 01:40:02.000 Es scheint ja mal wieder so eine normative Kraft 01:40:02.000 --> 01:40:04.000 des Faktischen zu sein. Chrome kann das. 01:40:04.000 --> 01:40:06.000 Chrome 01:40:06.000 --> 01:40:08.000 ist ja auch viele andere Browser. 01:40:08.000 --> 01:40:10.000 Gibt es da irgendwo eine Spezifikation? 01:40:10.000 --> 01:40:12.000 Scrolls, Scrolls, Scrolls zu. 01:40:12.000 --> 01:40:14.000 Eine Group of Standards 01:40:14.000 --> 01:40:16.000 Rendering 3D scenes 01:40:16.000 --> 01:40:18.000 zu Hardware, bla, bla, bla. 01:40:18.000 --> 01:40:20.000 Ja, ich glaube, das sind halt auch so Sachen. 01:40:20.000 --> 01:40:22.000 Also wenn man da wirklich irgendwie sagt 01:40:22.000 --> 01:40:24.000 I've used it, wenn das jemand sagt, 01:40:24.000 --> 01:40:26.000 dann wäre ich ja wirklich sehr gespannt daran, 01:40:26.000 --> 01:40:28.000 was dieser Use Case ist, weil das kann ja 01:40:28.000 --> 01:40:30.000 nur irgendwie so was sein, die Chrome 01:40:30.000 --> 01:40:32.000 spezifisch oder irgendwie so ein Elektron-Ding. 01:40:32.000 --> 01:40:34.000 Aber so wirklich Web ist das ja 01:40:34.000 --> 01:40:36.000 alles noch zu 01:40:36.000 --> 01:40:38.000 und reif, glaube ich. 01:40:38.000 --> 01:40:40.000 Ja, das ist ja das Interessante 01:40:40.000 --> 01:40:42.000 da drin, dass man das hier in dem Server 01:40:42.000 --> 01:40:44.000 testen. 01:40:44.000 --> 01:40:46.000 Es wird mir jetzt auch nicht wundern, wenn da 01:40:46.000 --> 01:40:48.000 die Rate eher bei 01:40:48.000 --> 01:40:50.000 wenigen Prozent sind, dass die Leute 01:40:50.000 --> 01:40:52.000 davon gehört haben, geschweige denn dann 01:40:52.000 --> 01:40:54.000 benutzt haben. 01:40:54.000 --> 01:40:56.000 Das würde ich auch annehmen. 01:40:56.000 --> 01:40:58.000 Vielleicht, ich könnte jetzt drauf schätzen, 01:40:58.000 --> 01:41:00.000 dass das Survey ein bisschen ein falschen 01:41:00.000 --> 01:41:02.000 Einblick dann 01:41:02.000 --> 01:41:04.000 in die Realität gibt, weil vielleicht eher 01:41:04.000 --> 01:41:06.000 die Leute, die sich eben eh tief mit 01:41:06.000 --> 01:41:08.000 solchen Sachen beschäftigt sind, eher die 01:41:08.000 --> 01:41:10.000 sind, die solche Servers jetzt beantworten 01:41:10.000 --> 01:41:12.000 sind. 01:41:12.000 --> 01:41:14.000 Keine Ahnung, wenn man nicht auf Twitter 01:41:14.000 --> 01:41:16.000 oder Mastodon, der war es auch immer 01:41:16.000 --> 01:41:18.000 gerade in LinkedIn, Instagram. 01:41:18.000 --> 01:41:20.000 Sonst was ist, 01:41:20.000 --> 01:41:22.000 Oh ja, Tiktok-Developer gibt es 01:41:22.000 --> 01:41:24.000 bestimmt auch. 01:41:24.000 --> 01:41:26.000 Generell finde ich, bei diesem 01:41:26.000 --> 01:41:28.000 Survey ist es bestimmt immer ein bisschen 01:41:28.000 --> 01:41:30.000 missleiten, was dann die Ergebnisse sind. 01:41:30.000 --> 01:41:32.000 Aber ich finde es, was über sich dran 01:41:32.000 --> 01:41:34.000 schön fand, das war bei einem CSS-Service, 01:41:34.000 --> 01:41:36.000 fand ich auch schon ganz nett. Man stäubt 01:41:36.000 --> 01:41:38.000 dann hin und wieder, wieder über Sachen, 01:41:38.000 --> 01:41:40.000 da gibt es was. Brau jetzt überhaupt nicht, 01:41:40.000 --> 01:41:42.000 aber ist hier irgendwie cool, dass es irgendwie 01:41:42.000 --> 01:41:44.000 was Kreatives gibt. 01:41:44.000 --> 01:41:46.000 Vielleicht braucht es irgendjemand. 01:41:46.000 --> 01:41:48.000 Oh, das sind so Sachen, die du 01:41:48.000 --> 01:41:50.000 möglicherweise während dieser Revision 01:41:50.000 --> 01:41:52.000 nochmal extra aufgeschrieben hast, um zu sagen, 01:41:52.000 --> 01:41:54.000 oh, warte mal, das schau ich an, das könnte 01:41:54.000 --> 01:41:56.000 eventuell genau mein Problem lösen. 01:41:56.000 --> 01:41:58.000 Dann muss ich nochmal darüber nachdenken, 01:41:58.000 --> 01:42:00.000 möglicherweise gibt es ja auch diese Fälle. 01:42:00.000 --> 01:42:02.000 So, das Schöne ist, 01:42:02.000 --> 01:42:04.000 dieser Survey hier, die hat so ein Table 01:42:04.000 --> 01:42:06.000 of Contents damit zählt. 01:42:06.000 --> 01:42:08.000 20% dieses Service abgearbeitet, 01:42:08.000 --> 01:42:10.000 die auch damit läuft seit einer Stunde 01:42:10.000 --> 01:42:12.000 und 41 Minuten. 01:42:12.000 --> 01:42:14.000 Dazu muss man aber auch sagen, dann gibt es 01:42:14.000 --> 01:42:16.000 zwei Gruppriken wie Front and Frameworks, 01:42:16.000 --> 01:42:18.000 eher gut React, Angular, View, was sollen wir 01:42:18.000 --> 01:42:20.000 jetzt noch großartig dazu sagen, dann gibt es 01:42:20.000 --> 01:42:22.000 halt irgendwie Ember und ja, dann kommen 01:42:22.000 --> 01:42:24.000 vielleicht ein bisschen weniger Bekannte, 01:42:24.000 --> 01:42:26.000 wie Stencil und Quick. 01:42:26.000 --> 01:42:28.000 Da kann man sich eh schon ein bisschen vorstellen, 01:42:28.000 --> 01:42:30.000 wie da die Ergebnisse rauskommen 01:42:30.000 --> 01:42:32.000 und wie gesagt, dann 01:42:32.000 --> 01:42:34.000 kommen die Rendering Frameworks, 01:42:34.000 --> 01:42:36.000 da hast du Next.js und Remix. 01:42:36.000 --> 01:42:38.000 Klar, jeder, der jetzt React angekreust hat, 01:42:38.000 --> 01:42:40.000 kann jetzt auch Next.js und 01:42:40.000 --> 01:42:42.000 Remix wahrscheinlich ankreuzen. 01:42:42.000 --> 01:42:44.000 Da würde ich eher sagen, dass wenn man eine 01:42:44.000 --> 01:42:46.000 ganz andere Vision zu sagen, darüber zu reden, 01:42:46.000 --> 01:42:48.000 was ist eigentlich da der Unterschied 01:42:48.000 --> 01:42:50.000 und was ist das Gleiche? Gut, dann gibt es 01:42:50.000 --> 01:42:52.000 Next, dann gibt es halt Gatsby, 01:42:52.000 --> 01:42:54.000 das Weltkit und dann 01:42:54.000 --> 01:42:56.000 hätte man ja schon ganz schnell 50% gehabt, 01:42:56.000 --> 01:42:58.000 hätte man mal diese ganzen Namen kurz vorgelesen. 01:42:58.000 --> 01:43:00.000 Das ist auch schon echt eine ganze Menge Holz. 01:43:00.000 --> 01:43:02.000 Ja, aber ich, 01:43:02.000 --> 01:43:04.000 ich bin auch mental gar nicht bereit, 01:43:04.000 --> 01:43:06.000 nochmal so ein Framework 01:43:06.000 --> 01:43:08.000 durchzusprechen. 01:43:08.000 --> 01:43:10.000 Ich bin gerade eher auf dem 01:43:10.000 --> 01:43:12.000 Trip, 01:43:12.000 --> 01:43:14.000 dass ich nicht mehr weiß, wie gut 01:43:14.000 --> 01:43:16.000 oder schlecht es ist, wie viele 01:43:16.000 --> 01:43:18.000 verschiedene 01:43:18.000 --> 01:43:20.000 Frameworks es gibt, die das Gleiche lösen. 01:43:20.000 --> 01:43:22.000 Also ich finde es gut, dass es kein Monopol gibt, 01:43:22.000 --> 01:43:24.000 weil dann kann man immer von gegenseitig 01:43:24.000 --> 01:43:26.000 zu anderen 01:43:26.000 --> 01:43:28.000 lernen. Aber was ich, was mir jetzt nach 01:43:28.000 --> 01:43:30.000 Jahren ein bisschen zu anstrengend wird, 01:43:30.000 --> 01:43:32.000 was ist das Gleiche und diese Religiösität dazwischen? 01:43:34.000 --> 01:43:36.000 Ja, 01:43:36.000 --> 01:43:38.000 das ist halt das eine. 01:43:38.000 --> 01:43:40.000 Das andere ist halt, 01:43:40.000 --> 01:43:42.000 was mich halt so ein bisschen mehr so annärft, 01:43:42.000 --> 01:43:44.000 ist halt so diese 01:43:44.000 --> 01:43:46.000 Framework-Astronautik, 01:43:46.000 --> 01:43:48.000 wie ich das manchmal so ganz gerne nenne, 01:43:48.000 --> 01:43:50.000 wo man halt die einfachen Sachen nicht mehr 01:43:50.000 --> 01:43:52.000 einfach machen kann, 01:43:52.000 --> 01:43:54.000 im Namen des Paradigmas, das hier jetzt implementiert wird. 01:43:54.000 --> 01:43:56.000 Was einen überhaupt nicht stört, 01:43:56.000 --> 01:43:58.000 wenn man nicht so wie wir hier 01:43:58.000 --> 01:44:00.000 außer API's drinnen hängt und weiß, 01:44:00.000 --> 01:44:02.000 es könnte so einfach sein, ich könnte hier meine 01:44:02.000 --> 01:44:04.000 80-20-Lösung irgendwie haben. 01:44:04.000 --> 01:44:06.000 Aber 01:44:06.000 --> 01:44:08.000 wenn ich halt so mehr angucke, wie ich halt so 01:44:08.000 --> 01:44:10.000 versuche, irgendwie 01:44:10.000 --> 01:44:12.000 React auf eine Art und Weise zu bespielen, 01:44:12.000 --> 01:44:14.000 dass ich mir noch morgens selber ein Spiegel 01:44:14.000 --> 01:44:16.000 gucken kann, 01:44:16.000 --> 01:44:18.000 das ist schon nicht ganz trivial. Da muss man 01:44:18.000 --> 01:44:20.000 schon so manche Verrenkung für begehen. 01:44:20.000 --> 01:44:22.000 Und das ist halt irgendwie so sehr, sehr ärgerlich. 01:44:22.000 --> 01:44:24.000 Die Plattform bietet einem so viel Out of the Box. 01:44:24.000 --> 01:44:26.000 Und es ist halt nicht 01:44:26.000 --> 01:44:28.000 100 Prozent, was sie einem bietet, 01:44:28.000 --> 01:44:30.000 aber alles von Null auf nochmal neu zu 01:44:30.000 --> 01:44:32.000 implementieren. 01:44:32.000 --> 01:44:34.000 Und dann noch irgendwie da, also unreact, 01:44:34.000 --> 01:44:36.000 was ja irgendwie ein spezifisches Problem löst, 01:44:36.000 --> 01:44:38.000 dann Next.js noch dran zu tackern, 01:44:38.000 --> 01:44:40.000 was dann wiederum so die Dinge, die React 01:44:40.000 --> 01:44:42.000 nicht löst, noch irgendwie löst, aber halt so 01:44:42.000 --> 01:44:44.000 als nachgelagerten Schritt und nicht irgendwie so 01:44:44.000 --> 01:44:46.000 von Grund auf gedacht, sondern mehr so 01:44:46.000 --> 01:44:48.000 vom Ende her kommt. Das sind 01:44:48.000 --> 01:44:50.000 beides Technologien, die ich benutze. 01:44:50.000 --> 01:44:52.000 Also React und Next, da verbringe ich im Moment 01:44:52.000 --> 01:44:54.000 große Teile meines Tages mit. Deswegen erlaube ich 01:44:54.000 --> 01:44:56.000 ja halt eben da dieses vernichtende Urteil, 01:44:56.000 --> 01:44:58.000 weil ich mit denen wirklich schnell zu kämpfen habe. 01:44:58.000 --> 01:45:00.000 Und ich bin da mit einigermaßen produktiv, 01:45:00.000 --> 01:45:02.000 aber meine Güte, wenn ich 01:45:02.000 --> 01:45:04.000 kau trotzdem down auf der Tischkante rum. 01:45:04.000 --> 01:45:06.000 Es könnte so einfach sein, 01:45:06.000 --> 01:45:08.000 lasst mich doch einfach eine Webkomponent 01:45:08.000 --> 01:45:10.000 verwenden. Warum muss ich die... 01:45:14.000 --> 01:45:16.000 Lasst mich doch einfach eine Animation abspielen, wenn was 01:45:16.000 --> 01:45:18.000 passiert ist. Ach so, das Konzept ist 01:45:18.000 --> 01:45:20.000 passiert, gibt es gar nicht, weil es nur Daten gibt. 01:45:20.000 --> 01:45:24.000 Das ist unpraktisch. 01:45:24.000 --> 01:45:26.000 War das eine schöne Abschlussgede? 01:45:26.000 --> 01:45:28.000 Ich bin mir nicht sicher, ob das eine Abschlussrede war 01:45:28.000 --> 01:45:30.000 oder mehr so ein 01:45:30.000 --> 01:45:32.000 Rant, ein unkontrollierter, 01:45:32.000 --> 01:45:34.000 aber gut. 01:45:34.000 --> 01:45:36.000 Machen wir auf jeden Fall einen Abschluss drauf, 01:45:36.000 --> 01:45:38.000 wie wär's? Ja. 01:45:38.000 --> 01:45:40.000 Super, wir danken fürs Zuhören, 01:45:40.000 --> 01:45:42.000 danken für die Unterstützung auf Patreon, 01:45:42.000 --> 01:45:44.000 danken für die zahlreichen Kommentare, 01:45:44.000 --> 01:45:46.000 wo ihr uns erzählen könnt, was ihr 01:45:46.000 --> 01:45:48.000 von Skinny Jeans und Vue.js haltet. Bis zum 01:45:48.000 --> 01:45:50.000 nächsten Mal, tschüssi. 01:46:18.000 --> 01:46:20.000 und bis zum nächsten Mal, tschüssi.