Working Draft

Wöchentlicher Podcast für Frontend Devs, Design Engineers und Web-Entwickler:innen. Mal mit, mal ohne Gast begeben wir uns in die Tiefen von HTML, CSS, JavaScript oder auch Frameworks wie React, Vue und Angular. Wir diskutieren über gute UX, Web Performance und Barrierefreiheit, sowie ab und an auch über Browser und Webstandards. Supported uns bei Patreon: https://patreon.com/workingdraft

https://workingdraft.de

subscribe
share






Revision 560: TypeScript 5.0


Nach einer Pause nehmen Stefan und Peter wieder das allquartalige Besprechen der neuesten TypeScript-Version auf. Und möglicherweise gibt es noch andere semi-relevante Themen wie React-Beef, Klassenkampf und PHP.

Schaunotizen [00:01:01] TypeScript 5.0 Wie gewohnt rekapitulieren für anlässlich der Beta einer neuen TypeScript-Version das TypeScript-Versionierungs-Schema und tauchen danach tief in die spannenderen neuen Features ein. An erster Stelle stehen die neuen, dem ECMAScript-Standard entsprechenden Decorators. Diese ergänzen in TypeScript die weiterhin verfügbaren Legacy Decorators, deren Unterschiede zum Standard und Herkunft aus den Ruinen von AtScript wir besprechen. const Type Parameters halten wir für eine sinnvolle Ergänzung, ebenso die Änderungen am Config-File-Format und die neue Unterstützung export type *. Die in 5.0 anstehenden Änderungen an Enums sind auch nicht schlecht, Enums selbst hingegen schon. [00:42:27] Hidden Bonus Track/dt>

In einer etwas außer Kontrolle geratenen Vorbesprechung sprechen wir über den aktuellen React-Beef in der Frontend-Welt, Peters jüngste Erfahrungen
mit PHP und Laravel sowie die Beziehung zwischen (und die Qualität von) React, Next.js und Vercel. Transkript WEBVTT 00:00:00.261 --> 00:00:14.214 Es ist eine Major Version, also TypeScript hat ja jetzt nicht diese, oh wow wir haben Breaking Changes mit einer Major Version Idee, sondern sie sagen TypeScripts Grundidee ist Breaking Changes zu verursachen, deswegen sagen sie einfach noch 4.9 ist 5.0 dran. 00:00:15.573 --> 00:00:22.298 Also so ein Typparameter kann ja schon sehr wortreich sein und wenn ich jetzt hier so sehe, Konz T, Extents Read Only, irgendwas? 00:00:22.631 --> 00:00:26.610 Ich bin da, wie sagt man das, Kampf geprüft. Ich schreibe Last. 00:00:26.943 --> 00:00:31.057 Also was da im generischen Umfeld passiert, das ist wild. 00:00:32.444 --> 00:00:35.414 Aber es ist so gut, du sagst so viel richtige Sachen. mach ich, ob ich das vermisse. 00:00:35.600 --> 00:01:00.560 Music. 00:01:00.737 --> 00:01:03.577 Hallo und herzlich willkommen zu Working Draft Revision 560. 00:01:03.577 --> 00:01:08.381 Heute am Start der Stefan. Hallo Servus. Und meine Wenigkeit der Peter. 00:01:08.858 --> 00:01:14.577 Was mag wohl das Thema sein, wenn die zwei sich alleine im Working Draft Studio einfinden? 00:01:14.577 --> 00:01:19.217 Jawoll, der Microsoft hat wieder gekreist und gebar uns eine neue TypeScript Version, 00:01:19.217 --> 00:01:20.977 speziell jetzt die Version 5.0. 00:01:20.977 --> 00:01:25.617 Peter und wir zwei ehemaligen Langzeiturlauber dachten uns, lassen wir doch mal die Tradition 00:01:25.617 --> 00:01:30.897 wieder auferleben und sprechen darüber, was es da so alles Neues gibt und ob uns das interessiert 00:01:30.897 --> 00:01:32.177 und wie wir das finden und so weiter. 00:01:33.011 --> 00:01:41.177 Genau. Es ist eine Major Version. Also TypeScript hat ja jetzt nicht diese Oh wow, wir haben Breaking Changes mit einer Major Version Idee, sondern sie sagen, 00:01:41.177 --> 00:01:46.977 TypeScripts Grundidee ist Breaking Changes zu verursachen. Deswegen sagen sie einfach noch 00:01:46.977 --> 00:01:54.217 4.9 ist 5.0 dran. Es erlaubt ihnen aber, troch diverses Verhalten von grundlegenden 00:01:54.217 --> 00:01:59.737 Features neu zu überdenken. Und ich glaube, von dem sehen wir diesmal einige Sachen. Oder zumindest, 00:02:01.143 --> 00:02:05.473 Okay, was würdest du sagen, fällt da so in die Kategorie rein? 00:02:05.968 --> 00:02:08.012 Decorators und Inams. 00:02:08.615 --> 00:02:12.953 Aber meinst du nicht, dass das mit den Decorators eher was damit zu tun hat, dass jetzt der 00:02:12.953 --> 00:02:17.273 ECMAScript-Standard sich mal aufgerafft hat? Ich hätte gemeint, das trifft sich gut. 00:02:17.986 --> 00:02:23.713 Das wäre meine Idee gewesen. Also Decorators, also gut, von vorne. 00:02:23.713 --> 00:02:28.553 Ich wollte gerade sagen, du als Klassenfeinschmecker solltest doch erstmal erklären, was Decorators sind. 00:02:28.553 --> 00:02:37.473 Genau, Decorators. anfangen. Wer von euch schon Angular 2 Plus geschrieben hat, kann sich vielleicht daran 00:02:37.473 --> 00:02:43.093 erinnern, dass Angular diese Decorator Syntax sehr stark verwendet hat. Du hast dieses Add. 00:02:43.364 --> 00:02:50.173 Something über einer Klasse, über eine Methode und kannst damit deine Klasse mit neuen Features 00:02:50.173 --> 00:02:54.093 ausstatten. Oder im Falle von Angular wird heute der Compiler aktiv und sagt, oh wow, 00:02:54.093 --> 00:02:57.613 das ist etwas, das muss ich ein bisschen anders behandeln und da muss ich ein paar zusätzliche 00:02:57.613 --> 00:03:02.493 Compiler-Dinge starten. Und das ist ja ein Feature, das kennt man aus anderen 00:03:02.493 --> 00:03:07.213 Programmiersprachen genauso. Also vor allem in C-Sharp und in Java, 00:03:07.213 --> 00:03:10.893 Java heißt es glaube ich Annotation, sind diese Sachen vorhanden. 00:03:10.893 --> 00:03:14.933 Du kannst einfach sagen, hey, dieses eine fällt, diese eine Methode, diese eine 00:03:14.933 --> 00:03:19.653 Klasse, ich behandle sie jetzt etwas anders, ich füge weitere Eigenschaften 00:03:19.653 --> 00:03:23.173 hinzu oder lese aus diesen Eigenschaften etwas Spezielles raus. 00:03:23.173 --> 00:03:26.573 Basierend auf dem Decoretor Pattern, das ist ein Pattern aus der objektorientierten 00:03:26.573 --> 00:03:32.253 Programmierung halt in Syntax gegossen. Das ist glaube ich der spannende Unterschied zum 00:03:32.253 --> 00:03:38.973 eigentlichen Software Pattern. Und das Thema war das, dieser Decorator, der trägt ja eine Geschichte 00:03:38.973 --> 00:03:43.573 mit sich. Das ist ja fantastisch, weil ursprünglich hat es niemand auf dem Schirm gehabt, außer Google 00:03:43.573 --> 00:03:47.213 für Angular und Angular hat gesagt, hey, lass uns doch unsere eigene Programmiersprache machen, 00:03:47.213 --> 00:03:55.573 AddScript, Add wegen diesem Decorator Add Symbol, mit der wir eben Decorators schreiben können und 00:03:55.573 --> 00:03:58.641 die für unser Framework Angular besonders dienlich sind. 00:03:58.803 --> 00:04:02.573 Und dann hat TypeScript, das TypeScript-Team, gesagt, hey, coole Idee, 00:04:02.573 --> 00:04:07.573 nur 90 Prozent eurer neuen Sprache sind TypeScript, es geht eigentlich wirklich nur um die Decorators. 00:04:08.021 --> 00:04:13.573 Lass uns doch zusammenarbeiten. Anders Heilsberg mit Kollegen ist runtergeflogen nach Mountain View, 00:04:13.573 --> 00:04:20.573 die haben sich mal zwei Wochen eingesperrt in einem Meetingraum und haben noch entschieden, passt, wir können Decorators experimentell unterstützen 00:04:20.573 --> 00:04:24.573 in TypeScript und es braucht keine neue Programmiersprache dafür. 00:04:24.846 --> 00:04:27.340 Und so ist TypeScript überhaupt einmal in Angular reingemandert. 00:04:27.439 --> 00:04:30.813 Und das Spannende war noch, was gesagt haben, hey, okay, Decorators sind das Tier, dass 00:04:30.813 --> 00:04:33.253 auch andere Framework-Hersteller, wie z.B. 00:04:33.253 --> 00:04:38.573 Ember, gemeint haben. Also, coole Idee, wollen wir jetzt auch für unsere Dinge, ist eh in TypeScript, d.h. wir 00:04:38.573 --> 00:04:43.853 brauchen dort nicht irgendwie andere Programmiersprache entdecken, aber Yehuda Katz vom Ember-Team 00:04:43.853 --> 00:04:45.885 hat gesagt, das muss ein sauberer Standard werden. 00:04:46.119 --> 00:04:49.818 War da ein Proposal gemacht und das Proposal liegt jetzt seit keine Ahnung, acht Jahren 00:04:49.863 --> 00:04:52.636 herum oder so. Es hat ewig gedauert. 00:04:52.681 --> 00:04:57.293 Was spannend ist, weil es hat tatsächlich für dieses eine Proposal in ECMAScript ja 00:04:57.293 --> 00:04:59.493 sehr sehr viele Real-World Beispiele gegeben. 00:05:00.351 --> 00:05:03.361 Großes Problem war, es hat sich mit der Modul-Syntax geclasht. 00:05:03.421 --> 00:05:07.058 Das heißt, die Modul-Syntax hat gesagt Export und dann etwas. 00:05:07.751 --> 00:05:12.041 Und die experimentellen Decorator haben gesagt, der Decorator kann über dem Export Keyword sein. 00:05:12.630 --> 00:05:16.641 Und die tatsächlichen ECMAScript Decorators haben gesagt, na ja, eher nach dem Export. 00:05:16.717 --> 00:05:21.321 Das war, glaube ich, dieser große, große Unterschied mit Ausnahme von einigen Details 00:05:21.321 --> 00:05:27.106 in wie solche Decorators implementiert werden sollen. Aber das war der große, große Unterschied. 00:05:27.304 --> 00:05:34.353 Naja, und das ist ja auch immer so Abwärtskompatibilitäts-Fragen mit zum Beispiel irgendwie so private Klassenfelder. Ja, genau. 00:05:34.659 --> 00:05:45.561 Wie spielt das zusammen, wie kann man sowas dekorieren? Also, es ist halt in sich, weil halt so eine Klasse in ECMAScript schon eine hart komplizierte Angelegenheit ist, extra schwierig, so was da noch anzuflanschen. 00:05:45.561 --> 00:05:50.961 Syntaktisch sicherlich, aber halt eben auch semantisch und das Ganze irgendwie zukunftssicher zu gestalten. 00:05:50.961 --> 00:05:55.688 Ich hatte mich ja zwischenzeitlich sogar mal zu der Annahme versteift, das wird eh niemals was. 00:05:56.057 --> 00:05:56.444 Ja. 00:05:56.840 --> 00:06:00.837 Aber es hat halt noch nur irgendwie eine Dekade gedauert und dann ist es was geworden. Ja. 00:06:01.261 --> 00:06:07.341 Das Spannende ist das, also ich weiß nicht, ich glaube, dass der Trend zu eher mehr Funktionen 00:06:07.341 --> 00:06:15.133 nutzen in JavaScript hat einfach das Proposal einschlafen lassen, da war einfach nicht mehr der Nutzen da. 00:06:15.341 --> 00:06:19.701 Und tatsächlich ist es aber nicht so doofes Feature, also gerade wenn man Klassen schreibt, 00:06:19.701 --> 00:06:25.101 wenn man meint, Klassen schreiben zu müssen, dann kann man damit doch einiges Tolles anstellen. 00:06:25.630 --> 00:06:31.021 Und jetzt sind die Decorators hier. Also Decorators sind in ECMAScript jetzt schon länger in Stage 3, 00:06:31.021 --> 00:06:35.421 deswegen ist das, was ich gemeint habe, ich glaube, dass das Scythe Script schon auf die 5.0 gewartet 00:06:35.421 --> 00:06:38.621 hat, bis das die Implementierung endlich landet, weil ich glaube, es ist schon seit über einem Jahr 00:06:39.025 --> 00:06:44.381 das Proposal dort, wo es sein soll. Und es ändert sich in Wirklichkeit nicht großartig viel für 00:06:44.381 --> 00:06:48.381 euch zu entwickeln. Es ist jetzt dem Standard entsprechend, das heißt ihr braucht dieses 00:06:48.381 --> 00:06:52.781 Experimental Decorators Feature nicht mehr. In der Nutzung ändert sich fast nichts. Ich glaube, 00:06:52.781 --> 00:06:59.621 in der Implementierung gibt es andere Methoden oder Funktionsschnittstellen. Ich kann das aber 00:06:59.621 --> 00:07:04.141 nicht genau sagen, weil ich einfach selbst nie Decorators geschrieben habe, weil ich selten 00:07:04.141 --> 00:07:10.941 Klassen schreibe. Na ja, es ist halt insofern, was als ECMAScript schon sich Mühe macht mit den. 00:07:11.469 --> 00:07:16.661 ECMAScript-Features, vor allen Dingen halt eben privaten Feldern nach Art eben von ECMAScript, 00:07:16.661 --> 00:07:21.741 nicht so sehr nach denen von TypeScript, sich da irgendwie zusammen zu finden. Dazu gehört halt 00:07:21.741 --> 00:07:26.181 eben auch dieses neue Accessor Keyword für Jetta und Zeta, die halt dann auf ein privates 00:07:26.181 --> 00:07:32.581 Feld zugreifen, was halt in der Welt von TypeScript, wo Privatheit eben per Compile-Time-Feature 00:07:32.581 --> 00:07:36.061 implementiert wird, einfach keine Rolle spielt und insofern ist das da alles nicht drin. 00:07:36.061 --> 00:07:42.707 Aber die generelle Idee, so aus Perspektive derjenigen, die das am Ende anwenden, ist 00:07:43.101 --> 00:07:44.101 es tatsächlich das Gleiche. 00:07:44.101 --> 00:07:47.261 Ich habe irgendwie ein Klassenfeature, die ganze Klasse oder eine Methode oder ein Feld 00:07:47.261 --> 00:07:51.988 oder weiß Gott was und da klatsche ich dann halt eben Annotationen, add irgendwas davor 00:07:52.366 --> 00:07:56.913 und die helfen dann diesen jeweiligen Features gewisse Funktionen über. 00:07:58.281 --> 00:08:07.091 Als Alternative zum guten alten Class A Extents B. Was ja so ein bisschen Häkeln mit Ofenhandschuhen ist. 00:08:07.091 --> 00:08:16.691 Also geht halt schon, macht halt keinen Spaß. Und da wird halt so das Versprechen von Wiederverwendbarkeit und Komposition besser eingelöst durch so einen Dekorator. 00:08:16.781 --> 00:08:22.803 Der ist im Prinzip einfach nichts weiter als eine Higher Order Function, die halt auf den Klasselementen operiert. 00:08:23.109 --> 00:08:26.091 Also bis da wieder eine Funktion schreibt, könnte ein Dekorator schreiben. 00:08:26.091 --> 00:08:29.651 Solange TypeScript nicht mitspielt, weil das Typing von diesen Dingern ist dann schon ein 00:08:29.651 --> 00:08:35.604 bisschen advanced. Aber ja, das ist jetzt da und das kommt und das wird und ja. 00:08:36.469 --> 00:08:38.629 Wenn man halt meint, Klassen schreiben zu müssen, sagst du, ne? 00:08:38.854 --> 00:08:42.771 Ja, also ich bin ja mittlerweile auch nicht mehr so ein Hardliner wie ich es früher war, 00:08:42.771 --> 00:08:46.451 weil es mir eigentlich mittlerweile sehr wurscht ist, wie jemand entwickelt. 00:08:46.451 --> 00:08:52.700 Es gibt ja Nutzen für Klassen. Wenn du komplexen State verwalten musst und es. 00:08:53.627 --> 00:08:58.651 Gut ist, diesen State über angehängte Methoden zu verwalten, bitte gar schon 00:08:58.651 --> 00:09:03.531 machen wir eine Klasse. Also absolut sinnvoll zum Beispiel Bilderobjekte oder 00:09:03.531 --> 00:09:08.171 Bilderklassen. Herrlich, wo du einfach nicht weißt, hey, gibt es irrsinnig viele 00:09:08.171 --> 00:09:12.487 Varianten, die noch zum finalen Objekt führen können. Mach ein Bilderpattern, wo 00:09:12.811 --> 00:09:15.931 du einfach mit jedem Methodencall etwas vom internen State änderst und dann hast du 00:09:15.931 --> 00:09:19.651 Bilder und du kriegst ein finales Objekt raus. Fantastisch, super, funktioniert sehr 00:09:19.651 --> 00:09:24.691 gut. Überleg halt, ob du diesen State brauchst. Also das ist etwas, was ich bei vielen meiner 00:09:24.691 --> 00:09:30.771 Kunden schrägstrich Kollegen, je nachdem wo ich gerade bin, mitbekommen ist, dass einfach die 00:09:30.771 --> 00:09:35.491 Klasse immer so das erste Mittel ist zu dem Skyfen. Einfach weil sie es so kennen. Und 00:09:35.491 --> 00:09:41.731 dann denkst du, hey cool, du laufst dort in State Maintenance Probleme rein, die du 00:09:41.731 --> 00:09:45.811 alle nicht brauchst, wenn du einfach schaust, hey du kriegst shit in, shit out. Also eine ganz 00:09:45.811 --> 00:09:53.811 Funktion. Du hast Inputparameter, du hast auch Inputparameter. Und man soll halt... also es gibt ja für 00:09:53.811 --> 00:10:00.291 jedes Werkzeug einen Verwendungs-Track und das ist nicht jeder Verwendungs-Track. Und genauso gibt es 00:10:00.291 --> 00:10:04.011 Funktionen, gibt es Dinge, die besser in Objekten, Dinge, die besser in Klassen, Dinge, die besser in 00:10:04.011 --> 00:10:11.571 Funktionen aufgehoben sind. Genau. Ja, also so als wichtigsten Anwendungsfall von Klassen würde ich 00:10:11.571 --> 00:10:15.571 einfach mal in den Raum werfen, irgendwelche anderen Tools, die mit Klassen arbeiten. 00:10:17.375 --> 00:10:22.425 Die Entscheidung ist ja nicht zu 100% dir überlassen, du musst ja mit irgendwas zusammenarbeiten. 00:10:22.632 --> 00:10:27.025 Und wenn du zum Beispiel jetzt hingehst und sagst, ich mach jetzt eine React-Anwendung, Gott bewahre. 00:10:27.548 --> 00:10:33.210 Dann würdest du wahrscheinlich einfach eine klassische Funktion schreiben, die halt irgendwelches JSX ausspuckt, weil das ist halt wie es da gemacht wird. 00:10:33.505 --> 00:10:36.397 Sagst du hingegen, ich möchte jetzt lieber Web-Components bauen. 00:10:37.504 --> 00:10:45.345 Dann wirst du um eine Klasse schlecht herumkommen. Also die Welt da draußen wirkt ja auf deinen Code sich auch aus, würde ich sagen. 00:10:45.345 --> 00:10:51.865 Das sind auch diese Workarounds, die mit diesen Takt-Template-Literals-Orbeten in Webcomponents nicht ausgegoren. 00:10:51.865 --> 00:10:54.985 Also da kommst du an der Klasse nicht vorbei. Das Spannende ist sogar, dass... 00:10:54.985 --> 00:10:56.985 Nicht ausgegoren, aber was Special Interest triggert. 00:10:57.615 --> 00:11:05.185 Das ist nur ein Edicated Guessing. Wir reden ja davon, dass ich mich sowieso nicht mehr auskenn und eigentlich nur versuche, 00:11:05.185 --> 00:11:08.185 klug zu scheißen. Aber das ist... Entschuldige. 00:11:08.823 --> 00:11:14.385 Also ich meine halt nur, so Workarounds, für was? 00:11:15.521 --> 00:11:20.202 Also, so die meisten Web Component Libraries, die ich so sehe, die versuchen halt Web Components 00:11:20.283 --> 00:11:24.334 zu verwenden anstelle von einem Single Page App Framework, a la Angular oder React. 00:11:25.603 --> 00:11:28.545 Und die bauen dann halt irgendwie so Tech Template Tutorials, da schreibt es halt eben 00:11:28.545 --> 00:11:31.305 HTML Fragment dran, dann fabriziert ihr das halt irgendwie, ne? 00:11:31.305 --> 00:11:33.237 Genau. Deine Output oder so. Ja, genau. 00:11:34.305 --> 00:11:37.630 Ist ja alles irgendwie ganz nett, aber das ist meines Erachtens einfach ein Kategoriefehler. 00:11:37.828 --> 00:11:43.305 Weil solche Konstruktionen sind eine Abstraktion über HTML Elemente, quasi ein Templating 00:11:43.305 --> 00:11:47.803 Mechanismus und Web-Components sind ein Mechanismus, um HTML-Elemente in die Welt zu setzen. 00:11:48.235 --> 00:11:48.640 Ja, ja. 00:11:49.522 --> 00:11:54.745 Korrekt. Und das kommt, glaube ich, aus der Ecke von React, wo du wirklich einfach die Idee ist, 00:11:54.745 --> 00:11:58.305 dass du HTML bündelst, weil du ja diesen Framework-Charakter hast. 00:11:58.425 --> 00:12:03.145 Und eigentlich sollte genau das, was du sagst, schon vorher erledigt werden. 00:12:04.718 --> 00:12:07.745 Bevor überhaupt die Web-Komponente greift. Ja, genau. 00:12:07.745 --> 00:12:13.810 Also was halt dem Web sozusagen fehlt, wäre halt ein Art Templating-Mechanismus. 00:12:14.269 --> 00:12:22.137 Also so Handlebars-mäßig. Das würde halt diese Aufgabe, die ja eine Relevante ist. 00:12:22.525 --> 00:12:25.225 Ich will halt einfach nur irgendwie sagen, es gibt da jetzt irgendwie so ein Widget und 00:12:25.225 --> 00:12:29.825 dieses Widget besteht halt irgendwie aus einem Diff mit drei Buttons drin, render das mal da rein. 00:12:29.825 --> 00:12:32.945 Dafür gibt es halt eben keine native Lösung und Web-Components kann man dazu verwenden, 00:12:32.945 --> 00:12:36.945 aber es ist halt einfach schon so ein bisschen wie, keine Ahnung, ich fahre jetzt mit meinem 00:12:36.945 --> 00:12:41.865 Ein kaufen je nach gegebenheit markt funktionieren aber so richtig optimal ist das nicht. 00:12:44.305 --> 00:12:50.465 Für. Ein mensch wie mich der schon lange weg ist vor dem thema da gab es doch mal ein proposal das genau das versucht hat umzusetzen, 00:12:51.719 --> 00:12:53.996 so handelbar style templates, 00:12:54.705 --> 00:12:59.565 Im handelbar style templates oder natürlich gibt es auch bemühungen die, 00:13:00.465 --> 00:13:02.785 jsx syntax einfach sozusagen zu domestizieren, 00:13:03.944 --> 00:13:07.785 ja Also einfach als alternative Funktur für Funktions. 00:13:07.785 --> 00:13:12.559 Da gab es ja sogar mal eine Implementierung von Firefox, nicht dieses... 00:13:13.792 --> 00:13:18.879 Ah, e-Eggmascript. Ja, e-Eggmascript, genau. Eggmascript vor XML oder so, genau. 00:13:19.860 --> 00:13:25.642 Genau. Gab's im Sinne von, das hat mal halt irgendwer mal aufgeschrieben, aber das ist 00:13:25.642 --> 00:13:29.642 glaube ich so aus den 2000ern, aus dem... Na, aber da gab's sogar eine Implementierung. 00:13:29.642 --> 00:13:33.606 Das ist nicht nur irgendwo eine Idee, sondern da gab's eine Implementierung. Ist wahrscheinlich schon längst wieder rausgefallen. 00:13:35.642 --> 00:13:39.642 Ja, ja, das ist auf jeden Fall nicht mehr aktuell. So, was haben wir denn hier noch? 00:13:39.642 --> 00:13:47.282 Ich hab letztens irgendwas gesehen, wo irgendwer was gebaut hatte, das finde ich jetzt eh nicht wieder, im Prinzip ein Proposal gebaut hat, 00:13:47.282 --> 00:13:51.882 wie man das in ECMAscript halt einbauen könnte. Man müsste halt irgendwie, also die Details entgehen 00:13:51.882 --> 00:13:56.282 mir da, weil ich da nicht tief genug drin stecke, aber de facto ist ja das JSX, so wie es heute ist, 00:13:56.724 --> 00:14:02.562 irgendwie relativ spezifisch auf React ausgerichtet in seiner ganzen Art und Weise, 00:14:02.562 --> 00:14:06.762 wie es funktioniert und wenn man das in Vue oder so verwendet, dann bringen halt diese ganzen 00:14:06.762 --> 00:14:11.282 Frameworks eine ganze Menge von Workarounds, damit hat irgendwie funktioniert. Aber so eine Art 00:14:11.282 --> 00:14:15.442 Mechanismus wäre halt glaube ich etwas was man mal machen könnte und was halt 00:14:15.442 --> 00:14:19.518 sicherlich auch sinnvoll wäre aber Web Components sind das halt eben nicht und 00:14:19.722 --> 00:14:24.202 deswegen ist das was du da so... deswegen war ich gerade so etwas etwas angepiekst 00:14:24.202 --> 00:14:29.882 von... Ja das stimmt. Du hast richtig mit der Ansage diese Workarounds greifen 00:14:29.882 --> 00:14:33.508 nicht, aber das Problem ist nicht dass die nicht funktionieren sondern das Das Problem ist, dass man das versucht. 00:14:33.760 --> 00:14:35.506 Die Ausgangssage ist falsch. 00:14:37.198 --> 00:14:42.048 Genau. Eine andere Sache, die ich spannend fand, Nobby, du hast dem gesagt, man macht den React 00:14:42.048 --> 00:14:47.218 halt einfach nur Funktionen DJ6 auspucken. Früher hat es auch noch Klassen gegeben, macht man mittlerweile nicht mehr. 00:14:47.470 --> 00:14:51.568 Aber früher war genau das in einer Komponente, in einer Klassenkomponente, du hast die Klasse 00:14:51.568 --> 00:14:54.368 geschrieben und du hast InternState verwaltet. 00:14:54.672 --> 00:15:02.008 Macht sich ja Sinn. Tatsächlich ist ja eigentlich dieser useState Hook, der jetzt existiert, der ja grausamst 00:15:02.008 --> 00:15:05.368 implementiert ist, wo du halt einfach nur Glück hast, dass du tatsächlich den State 00:15:05.368 --> 00:15:09.048 zurückkriegst oder intern halt wirklich sehr stark wuchführen musst, damit du 00:15:09.048 --> 00:15:13.289 wieder die Komponenteninstanz zum State rückführen kannst. 00:15:13.424 --> 00:15:19.608 Ist ja eigentlich abscheulich im Vergleich zu ich habe eine Klasse und mach einfach 00:15:19.608 --> 00:15:25.408 das Punkt x ist irgendwas. Also genau für solche Dinge wäre ja eigentlich 00:15:25.408 --> 00:15:34.368 eine Klasse das perfekte Mittel. Ja ja halt eben nicht, weil du halt eben Funktionalität nicht so gut teilen kannst. Also useState ist ein einmal implementierter 00:15:34.368 --> 00:15:39.288 unendlich oft recycelbarer Mechanismus. Das kannst du halt mit normalen Klassen nicht machen, 00:15:39.458 --> 00:15:46.808 es sei denn natürlich, Ustate wäre ein Dekorator. Ha! Bingo! Ah, cool und wieder zurückgeführt. 00:15:46.808 --> 00:15:51.968 Also, haha. Ich meine, ich meine, das ist ja genau das Ding. Die adressieren das gleiche Problem. 00:15:51.968 --> 00:15:55.808 Die beiden Mechanismen. Da machst du einfach add tracked drauf oder sonst irgendwas, fertig. 00:15:56.508 --> 00:16:01.168 Ja, genau. Und dann weißt du halt eben, ah, okay, ich muss halt irgendwie da Mechanismen generieren, 00:16:01.168 --> 00:16:04.808 um halt irgendwie diese private Variable zu ändern. Wenn die sich ändert, mache ich halt irgendwie 00:16:04.808 --> 00:16:09.808 meinen wie auch immer in der Klassenmethode implementierten Vergleich. So, entweder mache 00:16:09.808 --> 00:16:12.968 ich irgendwie einen Deep Compare oder ich mache halt so einen Shallow Check, weil Immutability und 00:16:12.968 --> 00:16:17.718 Zeug und dann weiß ich halt eben, ob ich mich neu rendern muss oder nicht. Wunderschön. Könnte ich 00:16:18.048 --> 00:16:21.968 mir vorstellen, dass das funktioniert, weil also ich glaube nicht, dass ich jemals in ReactUseFact 00:16:21.968 --> 00:16:25.688 richtig verwenden würde, wenn ich nicht irgendwie eher es lint hätte, dass mich permanent anplärt. 00:16:25.688 --> 00:16:30.408 Ja, ja, ja. Und wobei es dann die Brücke auch zwischen Framework Code und anderem Code einfach 00:16:30.408 --> 00:16:38.508 leichter, weil die Grenze zum Framework eindeutiger wird. Also dann brauchst du diese Use Effect 00:16:38.508 --> 00:16:42.388 Workarounds nicht, wie du gesagt hast, und dann kannst du auch imperativen Canvas Code 00:16:42.388 --> 00:16:44.490 zum Beispiel schreiben in einem deklarativen Universum. 00:16:44.688 --> 00:16:46.408 Halleluja, das wäre ja mal was. 00:16:46.688 --> 00:16:47.542 Ja, wow. 00:16:47.920 --> 00:16:52.768 Dieses witzige Weis, ich habe immer so diesen Softspot für die Ember Menschen, das ist 00:16:52.768 --> 00:16:57.188 ja das, was Ember eigentlich machen wollte. Aber sie haben halt einfach nicht das richtige 00:16:57.188 --> 00:16:58.120 Markthilm gehabt dazu. 00:16:59.569 --> 00:17:05.628 Nicht das richtige oder nicht genug? Das trau ich mir jetzt nicht sagen. 00:17:05.628 --> 00:17:09.607 Was haben die denn so an Corporate Backer? 00:17:09.715 --> 00:17:12.767 Also den von React kenn ich, der ist ziemlich groß und hat ziemlich tiefe Taschen. 00:17:13.685 --> 00:17:20.094 Ja, und da ist einfach das Outlet vor Skylight am kleinen Ruby und Rails Monitoring Shop. 00:17:21.841 --> 00:17:27.388 Wobei ja dann einer der größeren Backer LinkedIn war. Vielen Dank für's Zuschauen! 00:17:26.963 --> 00:17:31.113 Okay, groß. Und die aber jetzt auch mittlerweile Alternativen suchen, meine, 00:17:31.573 --> 00:17:37.253 meine noch. Ja, okay. War mir auch zum Beispiel gar nicht bekannt, was ja auch 00:17:37.253 --> 00:17:50.413 schon für sich spricht. Ja, das zeigt das Symptom wieder recht gut. Zu den Decorators hätte ich noch eine Anmerkung, wo ich glaube, dass das 00:17:50.413 --> 00:17:53.333 tatsächlich auch ganz eine ganz gute Rolle spielen könnte, weil jetzt unser 00:17:53.333 --> 00:17:58.213 hypothetisches State Management in React, das jetzt die Klassen wieder belebt, 00:17:58.213 --> 00:18:04.333 ich meine, das wäre ja eigentlich ganz gut, wäre ja relativ on-brand, was so JavaScript angeht. 00:18:04.449 --> 00:18:07.493 Klassen sind das Mittel der Wahl. Nee, Klassen sind jetzt doof und riechen nach Luluh. Nee, 00:18:07.493 --> 00:18:08.333 jetzt haben wir wieder Klassen. 00:18:08.500 --> 00:18:12.973 Man bittet ja, lass das Pendel schwingen. Wir brauchen das, ansonsten stirbt die 00:18:12.973 --> 00:18:16.813 Programmiersprache. Wenn es nicht ständig Meinungen gibt von Richtung 1 nach Richtung 2, 00:18:16.813 --> 00:18:18.447 dann schreibt keiner mehr JavaScript. 00:18:18.519 --> 00:18:21.613 So sieht es nämlich aus. Naja, also da glaube ich jetzt nicht unbedingt dran, 00:18:21.613 --> 00:18:24.362 dass das passieren wird. Die sind mit ihrem Krams hier schon ganz gut bedient und Zeug. 00:18:24.653 --> 00:18:29.933 Das ist nicht passiert genug. Ne, aber tatsächlich glaube ich, das könnte ein nützliches Werkzeug 00:18:29.933 --> 00:18:38.093 sein, um tatsächlich Web Components Library gestützt zu bekommen. Weil Web Components 00:18:38.093 --> 00:18:43.733 sind ja notwendigerweise Klassen. Man muss ja immer von HTML Element extenden, damit man halt 00:18:43.733 --> 00:18:48.453 irgendwie bei den Build-Ins, also sowas wie HTML Element und HTML Diff Element und Zeug, 00:18:48.453 --> 00:18:52.293 Die sind ja nicht wirklich Klassen, das sind ja irgendwelche Build-ins, aber wenn ich von 00:18:52.293 --> 00:18:54.501 denen extende, triggern die irgendwelche Logik. 00:18:54.690 --> 00:18:59.632 Und um mich halt irgendwie da ranzuklingen, muss ich halt eben das machen. 00:18:59.822 --> 00:19:05.907 Und bei den Decorators ist es halt, glaube ich, so, dass so HTML-NAS-Verhalten tatsächlich 00:19:06.006 --> 00:19:12.173 in Form von einer Microlibrary bereitgestellt werden könnte, die einfach nur besteht aus 00:19:12.173 --> 00:19:16.093 einem Haufen von Decorators, womit ich dann zum Beispiel sagen kann, es gibt hier irgendwie 00:19:16.093 --> 00:19:21.433 Excessor, irgendwie auf meinem HTML Element, ist jetzt irgendwie so ein Feld Disabled und da kann 00:19:21.433 --> 00:19:27.013 ich dann halt wirklich so Dinge machen wie, dass die entsprechenden Getter und Setter fabriziert 00:19:27.013 --> 00:19:31.253 werden und das Attributänderungsmonitoring und das alles einigermaßen einheitlich wird, 00:19:31.253 --> 00:19:36.293 dass ich einfach deklarieren kann. Ich habe jetzt hier zum Beispiel ein Attribut, so was wie Disabled 00:19:36.632 --> 00:19:41.813 und das ist ja eigentlich ein Boolshes Attribut. Also das ist entweder da oder nicht da, aber was 00:19:41.813 --> 00:19:44.167 Das ist dann zum Beispiel, wenn ich sowas sage wie Disabled gleich False. 00:19:45.166 --> 00:19:56.977 Wie will ich das bewerten also wenn man jetzt ganz nach der reinen leere geht würde man wahrscheinlich sagen das meint dass das ist ablet attribute gesetzt ist auf true weil es ist ja auf was gesetzt also es ist da. 00:19:57.516 --> 00:20:02.436 Möglicherweise will man das ja irgendwie komplizierter gestalten content edit ist ja auch so ein ding da drin oder. 00:20:03.378 --> 00:20:07.870 Attribute die halt mehr so eine art in am state haben mit drei möglichen werten oder so das ist alles. 00:20:08.167 --> 00:20:13.216 Irre kompliziert, auch irgendwie sowas, verarbeitet diese Zahl, dieses Attribut als Zahl. 00:20:13.216 --> 00:20:15.756 Ich kann ja jedes HTML-Attribut alles reinschreiben, was ich lustig bin. 00:20:15.882 --> 00:20:17.880 Käsekuchen, interpretiere das bitte schön als Zahl. 00:20:18.240 --> 00:20:24.407 Wie soll das gehen? Soll da noch der Number rauskommen oder soll da, wenn da noch der Number rauskäme, irgendwie null rauskommen oder irgendwie so Krams, ne? 00:20:24.560 --> 00:20:31.023 Wenn man das einmal schreibt, ist ja gut, aber wie recycle ich das in, wenn ich jetzt drei Komponenten habe und die haben alle drei Attribute? 00:20:32.005 --> 00:20:38.306 Das ist halt im moment wirklich nur möglich indem ich das alles von hand aufschreibe und in den jeweiligen gettern zettern attribut händler diese. 00:20:39.376 --> 00:20:43.616 Ganzen inputs durch entsprechende parsing funktionen durchschicken und wenn das 00:20:43.616 --> 00:20:47.216 alles dekorators werden dann wäre das echt weniger schlimm als es jetzt 00:20:47.216 --> 00:20:52.016 aktuell ist oder das klingt ja klassisch schreibe ich einfach drüber ad web 00:20:52.016 --> 00:20:55.816 component und dann macht das ding automatisch ein so ein define mit der 00:20:55.816 --> 00:20:59.616 component registry aber nur wenn es ist schon gecheckt hat bin ich definiert oder 00:20:59.616 --> 00:21:06.176 nicht und so zeug das könnte alles das ist genau das was litt macht nicht dieses komponent web 00:21:06.176 --> 00:21:11.417 component framework die machen genau das du kannst et custom element schreiben mit dem tag name und, 00:21:12.136 --> 00:21:19.296 die klasse drunter wird als custom element registriert oder du hast am property decorator mit dem wird, 00:21:19.762 --> 00:21:26.216 das mapping zwischen html und deiner dem steht einer klasse gemacht also die richtung gibt schon 00:21:26.216 --> 00:21:27.999 aber jetzt gibt es das halt nach tiefen Schauskripten. 00:21:28.656 --> 00:21:34.976 Erstens das und zweitens ist dieses Lit Zeug halt wieder ein komplett Buy-in, wo ich halt nicht nur ein paar Funktionen habe, 00:21:34.976 --> 00:21:36.976 sondern ich muss halt eben diese Klasse extenden von denen. 00:21:37.298 --> 00:21:38.973 Dieser Custom Element Decorator. 00:21:40.161 --> 00:21:43.258 Denn würde ich mir zutrauen, ihn in der nächsten halben Stunde zu schreiben. 00:21:44.113 --> 00:21:47.948 Und dann funktioniert er, dass du, wenn du da irgendein Element hast, das du ableitst, dass du das registrierst. 00:21:48.830 --> 00:21:52.368 Ja, das ist tatsächlich ein Zehntseiler, den habe ich hier irgendwo rumliegen. 00:21:52.674 --> 00:21:57.841 Cool, erster Framework Code ist da. Und dann hast du dann Bunch of Decorators und haust die rein und schreibst einfach schöner. 00:21:58.715 --> 00:22:01.514 Genau, und das ist halt eben kein Framework, sondern ist halt mehr so eine Art Lowdash. 00:22:01.586 --> 00:22:05.196 Also, greif in diesen Werkzeugkasten rein und du willst irgendwie einen Attribut haben, 00:22:05.430 --> 00:22:10.651 dass irgendwie sowas wie Content Editable ist, nimmst du das, willst das Ding als Custom Element definieren, nimmst du das. 00:22:10.651 --> 00:22:14.691 Aber es ist halt immer noch eine Web Component und du könntest jederzeit jede von diesen Funktionen ersetzen 00:22:14.865 --> 00:22:17.809 oder sein lassen, deine eigene daneben schreiben, das Ganze irgendwie rappen. 00:22:17.853 --> 00:22:25.487 Es wäre halt tatsächlich modular. Es wäre halt, ne, nach der Idee von useState, wo halt eben es auch Libraries von Hooks gibt da draußen für React, 00:22:25.776 --> 00:22:29.211 könnte es halt eben Libraries von Attributimplementierungen geben. 00:22:29.211 --> 00:22:31.891 Und das muss alles gar nicht groß zusammenspielen, weil es halt einfach nur, 00:22:32.527 --> 00:22:36.851 Dinge dekoriert, also Dinge, die ohnehin da sind, in das ohnehin vorhandene, in die 00:22:36.851 --> 00:22:39.971 ohnehin vorhandene Mechanik für Web Components einbindet. Und ich denke, das 00:22:39.971 --> 00:22:43.971 ist schon ziemlich was wert. Gekauft will ich haben. 00:22:43.971 --> 00:22:52.251 Absolut. Okay, ich arbeite halbwegs ich dran. Ja, bitte. Das erste, was du brauchst, ist ein Name und das 00:22:52.251 --> 00:22:58.051 zweite, was du brauchst, ist ein Gizabrepo und dann weiß ich's. Dann kommen nicht die Contributor. 00:22:58.598 --> 00:23:02.651 Ja, dann kommen die Contributors, dann haben die Bugs und dann muss ich das fixen. 00:23:02.651 --> 00:23:05.131 Und dann hab ich auch da Issues, wo drin steht, ist das schon tot? 00:23:05.131 --> 00:23:08.014 Und ich so, nee, ich hab halt nur auf was anderes zu tun. 00:23:08.140 --> 00:23:13.211 Das sollten Leute mit stabileren Nerven machen, als ich das bin. 00:23:13.370 --> 00:23:15.144 Aber, ja. 00:23:15.612 --> 00:23:23.507 Und dieses Interludium wurde Ihnen präsentiert von Burnout-Gefährdeten in 30ern, Anfang 40ern. So ist es. 00:23:24.533 --> 00:23:28.584 Aber, nächste Punkt. Nächster Punkt. Hey, Stefan. Ja. 00:23:29.160 --> 00:23:32.931 Wie viele Use Cases für das Keyword Konst gibt's in TypeScript? Go! Um... 00:23:34.328 --> 00:23:42.578 Gibt aber, ein spannendes Thema ist, also das const-Keyword existiert in JavaScript und in TypeScript. 00:23:42.578 --> 00:23:46.058 In JavaScript definiert es ein konstantes Binding. 00:23:46.229 --> 00:23:50.658 Das heißt, du hast jetzt nicht ein variables Binding, wo du den gleichen Namen neu zuweisen kannst, 00:23:50.658 --> 00:23:53.350 sondern du hast ein konstantes Binding. Das heißt, die Zuweisung ist erfolgt. 00:23:53.818 --> 00:23:58.238 Das heißt, du kannst nichts mehr ändern. Wenn du jetzt einen primitiven Datentyp hast, wird er nicht geändert. 00:23:58.418 --> 00:24:03.498 Wenn du einen komplexen Datentyp hast, wie ein Objekt oder Array, dann kannst du zu einem neuen Element ändern, 00:24:03.498 --> 00:24:05.498 aber nicht mehr vom Objekt auf etwas anderes. 00:24:06.378 --> 00:24:14.738 Das ist der JavaScript Teil und das gibt es auch in TypeScript als Typ Modifier und es gibt es als Typ Assertion. 00:24:15.538 --> 00:24:18.418 Da fällt mir gerade der deutsche Name dazu nicht ein, wo du sagen kannst, 00:24:18.418 --> 00:24:25.898 hey, dieses eine Objekt, dieses eine JavaScript Objekt oder diesen einen JavaScript Wert nennen wir mal so, behandle ich im Typ System 00:24:26.325 --> 00:24:27.810 als Literal Wert. 00:24:27.927 --> 00:24:39.498 Das heißt, TypeScript ist das so. du hast ein Typ und zu diesem Typ passt eine Menge an möglichen Werten und dieser Typ kann sehr breit 00:24:39.498 --> 00:24:44.258 sein, diese Menge kann sehr groß sein oder dieser Typ kann sehr schmal sein, also die Menge kann 00:24:44.258 --> 00:24:55.978 sehr klein sein und mit s-Konst fixierst du den Wert, den du gerade hast, als diesen einen Wertetyp. 00:24:56.239 --> 00:25:01.258 Das heißt, der kann keine andere Form annehmen. Zu dieser Menge ist nur ein einziger Wert kompatibel 00:25:01.258 --> 00:25:06.458 und das ist der, den du gerade definiert hast. Und das ist toll, das ist großartig, falls du 00:25:06.458 --> 00:25:12.098 wirklich auf diese Werte typen zugreifen willst, wenn du die tatsächlichen Strings, die tatsächlichen 00:25:12.098 --> 00:25:17.578 Nummern brauchst und nicht einfach jeden String oder jede Nummer, du entsprechende Keys vielleicht 00:25:17.674 --> 00:25:24.058 brauchst von deinem Objekt, dann hilft es, dass du einfach sagen kannst, hey, mit s-Const hat dieser 00:25:24.058 --> 00:25:26.458 Wird die Bedeutung, dass er sich nicht ändert? 00:25:27.918 --> 00:25:32.230 Und ist dem Typ-System auch als Rotkrist zu behandeln. Genau. 00:25:32.401 --> 00:25:41.128 Und dieses Konst-Schlüsselwort aus dem Typ-System findet jetzt Einzug in GenericType-Parameters. 00:25:42.043 --> 00:25:44.728 Das sind Generics, wo du sagen kannst, hey, du hast hier dieses eine T, 00:25:44.728 --> 00:25:46.841 diesen generischen Typ. 00:25:46.949 --> 00:25:51.688 Aber wenn dieser Typ kommt, dann behandle ihn als Konstant. 00:25:52.608 --> 00:25:55.488 Das geht teilweise schon mit primitiven Werten sehr, sehr gut, wo du einfach sagst, 00:25:55.488 --> 00:26:01.362 du fügst jetzt tatsächlich den literal string Stefan zum Beispiel ein für dieses t, dann ist 00:26:01.648 --> 00:26:04.963 es auch dieser Wert und es kann nur mehr Stefan sein und es kann nicht string werden unter. 00:26:06.328 --> 00:26:10.808 Gewissen Voraussetzungen. Wenn du dort noch jetzt zum Beispiel ein String Array hast, du hast jetzt 00:26:10.808 --> 00:26:15.168 Stefan und Peter in einem Array, dann merkt TypeScript Theo es ist doch eher ein String Array, 00:26:15.387 --> 00:26:21.048 weil das ist wahrscheinlich das nächste was du machen möchtest. Und mit const t kannst du jetzt 00:26:21.048 --> 00:26:26.368 hey, nein, wenn ich dort das Array-Steffen und Peter reingebe, dann behandle ich das auch als 00:26:26.368 --> 00:26:33.168 das Array-Steffen und Peter. Das ist so die Idee. Und es gibt aber ganz coole Use Cases dafür. 00:26:33.168 --> 00:26:38.448 Eine, die ich gesehen habe ist zum Beispiel, du hast einen React-Router, jetzt haben wir wieder 00:26:38.448 --> 00:26:42.608 in dieser Ecke gelandet, wo du halt deine ganzen Routes definierst in einer Funktion, 00:26:42.608 --> 00:26:47.008 defineRoutes, da hast du mit einem const t die ganzen Routen definiert und dann willst du eine 00:26:47.008 --> 00:26:50.848 Methode schreiben oder eine Funktion schreiben, wo du von einer auf die andere dich bewegen kannst, 00:26:51.396 --> 00:26:57.688 über JavaScript, dann kannst du halt dort ein Autocomplete kriegen für genau die Einträge, 00:26:57.688 --> 00:26:59.894 die du Daten eingegeben hast. Ist recht nett. 00:27:01.794 --> 00:27:05.935 Hab ich was vergessen? Ja, Konstiganz. 00:27:06.244 --> 00:27:14.524 Okay, cool. Ah, ja gut. Ja. So, wenn ich vergessen bin, hab ich verdrängt. 00:27:14.524 --> 00:27:22.804 Wir können später nochmal was über ihn am reden. Aber ich meine, die wichtigen Use Cases, die wirklich Menschen nutzen, sind tatsächlich 00:27:22.804 --> 00:27:27.124 ja die, die Konstvariable und die Konst Assertion und das jetzt Konst im Typparameter, was 00:27:27.124 --> 00:27:32.924 das ja im Prinzip bloß ein Mechanismus ist, dass man den Effekt von S-Konst kriegt, ohne 00:27:32.924 --> 00:27:36.516 dass diejenigen, die das am Ende aufrufen, das immer dahinschreiben müssen. 00:27:37.002 --> 00:27:43.524 Ist ja im Prinzip bloß sozusagen eine Justage der Typ-Inferenz. 00:27:43.524 --> 00:27:47.524 Normalerweise würde ja die Typ-Inferenz sagen, irgendwie, hey, hast du dir ein Wert reingesteckt? 00:27:47.524 --> 00:27:50.685 Ich interpretiere den jetzt mal so großzügig, wie ich kann. 00:27:51.414 --> 00:27:54.524 Das ist ja das Type-Widening und S-Konst macht ja im Prinzip das Gegenteil. 00:27:54.524 --> 00:27:58.644 Interpretiere das so engstirnig, wie ich kann. Also Array von drei Strings ist halt eine Liste 00:27:58.644 --> 00:28:03.244 von exakt den drei Strings in der Reihenfolge und nichts anderes. Aber dazu muss ich ja 00:28:03.244 --> 00:28:06.624 als Const irgendwo da reinschreiben und wenn eine Funktion will, dass irgendwelcher Input so 00:28:06.624 --> 00:28:11.644 engstirnig interpretiert wird, kann das jetzt halt eben in Typparameter wandern und dann steht 00:28:11.644 --> 00:28:19.924 halt eben das Const auch noch möglicherweise da oben drin. Genau. Ja, ist, sagen wir so, ist, ja. 00:28:21.068 --> 00:28:29.044 Ja finde ich gut also ich habe ich hatte noch keine use cases dafür aber jetzt wo ich es hier 00:28:29.044 --> 00:28:35.884 was das zu fallen use cases sein das ist immer gutes zeichen wenn ich vorher keinen leidensdruck 00:28:35.884 --> 00:28:38.901 hatte und dann plötzlich wird er entwickelt indem ich erstmal was sehe. 00:28:41.179 --> 00:28:46.789 Frage ich mich ob da wirklich ein problem gelöst wird oder sozusagen hier hier hast 00:28:46.789 --> 00:28:51.189 ein problem und die lösung verkaufe ich dir gleich mit also ich sehe das gerade bei diesem 00:28:51.189 --> 00:28:56.869 feature eher so es macht einfach sinn oder es ergibt sinn dass das ding auch in generic 00:28:56.869 --> 00:29:01.589 type parameters landet es ist es macht das typ system meiner meinung stimmig meiner meinung 00:29:01.589 --> 00:29:06.949 noch stimmiger weil warum soll soll nicht die gleichen regeln innerhalb von generischen typ 00:29:06.949 --> 00:29:08.456 wie Brameter gelten wie außerhalb. 00:29:09.437 --> 00:29:14.949 Und deswegen macht es für mich absolut Sinn. Das ist eine ganz, ganz saubere Lösung dafür, dass es, 00:29:15.253 --> 00:29:17.584 dass ein fehlendes Puzzleteil dazu gebracht worden ist. 00:29:17.949 --> 00:29:24.678 Ja, und das macht natürlich auch einen möglichen Verwirrungspunkt für weniger informierte Nutzerinnen und Nutzer weg, 00:29:25.101 --> 00:29:28.459 den du dann ja nicht mehr sagen musst. Schreibt es konstanter, dann funktioniert es. 00:29:29.044 --> 00:29:33.949 Ja. Dass es ja nicht offensichtlich ist und nicht alle haben auf dem Schirm, was das tut. 00:29:33.949 --> 00:29:38.669 Sozusagen die Arbeit verfrachten zu denen, die unter diesen Umständen halt arbeiten wollen, 00:29:38.669 --> 00:29:50.069 also Autoren der Funktion, macht halt insofern schon Sinn. Es macht es halt tatsächlich auch 00:29:50.069 --> 00:29:55.509 relativ, sagen wir mal, macht es halt relativ wortreich. Also so ein Typ Parameter kann ja 00:29:55.509 --> 00:30:00.269 schon sehr wortreich sein. Und wenn ich jetzt hier so sehe, Konst T, Extents Read Only, irgendwas. 00:30:01.236 --> 00:30:06.709 Ich bin da, wie sagt man das, kampfgeprüft, ich schreibe Last. Also was da im generischen 00:30:06.709 --> 00:30:09.680 Umfeld passiert, das ist wild. 00:30:13.488 --> 00:30:21.978 Generic Constraint plus Cent plus Sync plus Tick Static. Und du brauchst eigene Zeile dafür und es gibt Sündtags, dass du das in eigene Zeile packen kannst. 00:30:22.140 --> 00:30:26.298 Also du wirst irgendwann mal. 00:30:27.037 --> 00:30:34.938 Irgendwann freust du dich, wenn du ein einfaches Konstigstens schreiben kannst. Also, ja. 00:30:35.688 --> 00:30:41.138 Kleine Typ-Systeme haben alle für und wieder. Absolut. Ja, ich würde tatsächlich auch sagen, das ist sozusagen, 00:30:41.178 --> 00:30:46.258 auch wenn ich persönlich nicht vom Hocker gehauen werde, weil ich vorher keinen Leidensdruck hatte, 00:30:46.298 --> 00:30:49.641 würde ich zumindest sagen, für die meisten Entwicklerinnen und Entwickler, 00:30:50.098 --> 00:30:52.338 hat das keinen Effekt, und das ist gut so. 00:30:52.378 --> 00:30:57.284 Die meisten werden davon profitieren, ohne das sozusagen im Arbeitsspeicher ihres Hirns haben zu müssen. 00:30:57.658 --> 00:30:58.094 Mhm. 00:30:59.697 --> 00:31:03.778 Das ist was anderes als Decorators, das ist ein Feature, mit dem man sich auseinandersetzen muss. 00:31:03.955 --> 00:31:05.778 Mit hier hast du weniger Notwendigkeit, 00:31:05.778 --> 00:31:15.818 überall es konntest, hinter zu schreiben und das ist ja eigentlich gut. Genau. Cool. Cool. So, das sind 00:31:15.818 --> 00:31:23.178 wohl glaube ich die beiden Flagship-Features aus dieser Release. Ja, ich schaue gerade auch über diese Liste drüber. 00:31:23.178 --> 00:31:32.898 Es gibt, das sind die beiden Flagship-Features, es gibt dann sehr viel Compiler-Fu oder so Projektzeug, 00:31:32.898 --> 00:31:38.178 wo du die Projekte besser konfigurieren kannst und Tooling, wie auch immer, 00:31:38.178 --> 00:31:40.778 also dass du bessere Unterstützung im VS Code und so weiter hast. 00:31:40.778 --> 00:31:43.698 Aber es gibt einen Feature, der ist noch sehr sehr interessant, 00:31:43.698 --> 00:31:48.258 ist eben diese 5.0 Veröffentlichung rechtfertigt meiner Meinung nach. 00:31:49.254 --> 00:31:53.269 Und das sind diese Inums. Und ich glaube, über das möchte ich noch mal ganz kurz reden. Schließ los. 00:31:53.765 --> 00:31:59.384 Also Inums sind ja ein bisschen so, kommt davon, woher du kommst natürlich, aber Inums sind 00:31:59.384 --> 00:32:04.064 ein sehr gern gesehenes Feature, je nachdem, woher du kommst, weil sie erlauben dir, dass 00:32:04.064 --> 00:32:09.344 du mit einer schönen Syntax mehrere Varianten, also mehrere Ausprägungen eines Typs definieren 00:32:09.344 --> 00:32:15.184 kannst. Es gibt Nummern-Inums und String-Inums in TypeScript. Nummern-Inums ist halt wirklich 00:32:15.184 --> 00:32:18.924 Enumeration so im klassischen C-Sinne, wo du jetzt sagst, du startest bei 0 und zählst 00:32:18.924 --> 00:32:23.484 weit hoch und hinter einem sprechenden Namen steckt halt ein Zahlenwert und das kannst 00:32:23.484 --> 00:32:28.464 du verwenden, um diverse Dinge zu lösen. Oder die String-Enam sagt einfach hinter einem. 00:32:29.369 --> 00:32:33.844 Feld oder hinter einem Property oder hinter einer Ausprägung steckt ein Stringwert und 00:32:33.844 --> 00:32:40.063 das kannst du dann so lösen. Das kann man nicht mischen. Und eigentlich schöne Syntax mit, 00:32:40.504 --> 00:32:44.424 Kunst innen, das ist eben das fehlende Kunst, verschwindet das sogar nachher nach dem Typ, 00:32:44.789 --> 00:32:49.424 nach dem Type Check, also nach dem Compile Schritt ist das weg und da hast du eigentlich 00:32:49.424 --> 00:32:55.344 keine Spuren mehr davon. Aber sie kommen mit einigen Einschränkungen mit, bis jetzt. Oder 00:32:55.344 --> 00:33:01.184 sagen wir so nicht mit einigen Einschränkungen, mit einigen eigenen Eigenschaften, genau Eigenheiten, 00:33:01.184 --> 00:33:07.984 die einfach im Sinn vom TypeScript Typ System nicht mehr richtig sind oder herausstechen, 00:33:07.984 --> 00:33:14.064 sagen wir mal so. Punkt Nummer eins bei den Number Enums, sie sind nicht Hypsif. Das ist das, 00:33:14.064 --> 00:33:19.664 was mich einmal total vom Hocker g'haut hat, weil du kannst dort beliebige Zahlen definieren, 00:33:19.664 --> 00:33:24.644 aber du kannst dann, wenn du irgendwo ein Enum als Funktionsparameter erwartest, einfach jede 00:33:24.644 --> 00:33:29.584 x-beliebige Nummer reingeben, weil in der originalen Spezifikation für Enums vorgesehen ist, 00:33:30.251 --> 00:33:35.424 dass du auch mit diesen rechnest. Dass du sagst, du machst jetzt eine Bitmaske und machst Bitvergleich 00:33:35.424 --> 00:33:39.984 zwischen Eintrag A und Eintrag B und da kommt dann eine Zahl aus, die du nicht definiert hast, 00:33:39.984 --> 00:33:43.104 aber die muss genauso gut funktionieren. Okay. 00:33:44.132 --> 00:33:48.462 Spannende Use-Kits hat es sicher mal gegeben, aber der Punkt von TypeScript war, 00:33:48.462 --> 00:33:51.982 damit Sie diesen Use-Kits unterstützen können, lasst mir einfach jede beliebige Zahl zu. 00:33:51.982 --> 00:33:55.313 Das heißt, Number-Inams nicht typsicher. 00:33:55.970 --> 00:34:00.813 Also das eine. Das andere String-Inams, wo jetzt zwischen hinter jedem Wert ein Stringwert steht. 00:34:02.209 --> 00:34:05.612 Das sind die einzigen nominellen Typen in TypeScript. 00:34:05.819 --> 00:34:08.822 Also TypeScript hat aus Druck für Redes Typsystem, das heißt, so wie der Wert gleich ist, 00:34:08.822 --> 00:34:11.622 geht man davon aus, dass auch der Typ gleich ist, das passt. 00:34:11.733 --> 00:34:15.482 Wenn du aber jetzt zum Beispiel in eine String-Innam schreibst, 00:34:15.482 --> 00:34:21.942 die heute zwei Ausprägungen hat, ab, und dann schreibst du eine zweite String-Innam auch mit einer Ausprägung ab, 00:34:21.942 --> 00:34:23.535 dann sind die nicht zueinander kompatibel. 00:34:24.102 --> 00:34:28.730 Und das ist wie gesagt das einzige nominelle Feature in TypeScript. 00:34:29.567 --> 00:34:35.877 Und bricht halt einfach auch mit der Idee vom strukturierten Typ-System. 00:34:36.142 --> 00:34:38.942 Jetzt gibt es Änderungen in den Innams. 00:34:38.942 --> 00:34:45.822 Wir einführen natürlich auch Runtime-Artifakte aus TypeScript und Tux, die jetzt keine ECMAScript-Entsprechung haben, 00:34:45.822 --> 00:34:49.422 was normale Inams ja machen. Die Pulsat sind ja wirklich eine Runtime-Lookup-Table. 00:34:49.597 --> 00:34:52.874 Ist auch nicht mehr in dem Vibe, den TypeScript heutzutage verfolgen möchte. 00:34:53.477 --> 00:34:59.662 Genau. Genau, weil TypeScript ja nur diese dünne Leer an Typinformation ist. Ist ganz richtig. 00:35:00.003 --> 00:35:07.800 Es gibt jetzt ein paar Änderungen. Zum einen, Number-Inams sind jetzt nicht mehr oder können jetzt nicht mehr. 00:35:09.231 --> 00:35:12.342 So breit genutzt werden wie vorhin. Das heißt, wenn du eine NumberInnum hast, 00:35:12.342 --> 00:35:16.782 dann muss auch tatsächlich ein Innam-Wert reingegeben werden. Das ist einmal das eine, 00:35:16.782 --> 00:35:20.422 das passiert. Das ist schon mal richtig, richtig gut. Und das andere, das passiert, 00:35:20.422 --> 00:35:25.542 das auch sehr spannend ist, ist, dass die Einträge einer Innam, egal ob das jetzt NumberInnum oder 00:35:25.542 --> 00:35:32.342 StringInnum ist, jetzt als Einträge eines Union-Types zu werten sind. Das heißt, 00:35:32.556 --> 00:35:37.982 die können jetzt als Typ wiederverwendet werden. Das heißt, es ist ganz easy, dass du noch einen 00:35:37.982 --> 00:35:42.182 Union-Type schreibst, der auf die gleichen Felder zugreift und mit denen noch kompatibel ist. 00:35:42.422 --> 00:35:46.982 Aber ist ein Inam als eine Auflistung von Werten nicht das Gleiche wie eine Union, 00:35:47.319 --> 00:35:49.642 was eine Auflistung von Werten ist? Ja. 00:35:51.244 --> 00:35:53.058 Meine Meinung nach schon. Warum würde ich das dann machen wollen? 00:35:53.058 --> 00:35:59.378 Das verstehe ich nicht ganz. Also die lösen beide das gleiche Problem. 00:35:59.643 --> 00:36:04.018 Eine Union und ein Inam lösen das gleiche Problem. Warum brauche ich denn denn Inams? 00:36:04.018 --> 00:36:04.775 Also für was sind die gut? 00:36:05.027 --> 00:36:08.018 Eigentlich für nichts. Die sind eine Relikt aus alter Zeit. 00:36:08.018 --> 00:36:14.178 Aber die Änderungen, die jetzt dort sind, gleichen sich schrittweise dem Verständnis 00:36:14.178 --> 00:36:15.299 vom Typ-System heute an. 00:36:15.587 --> 00:36:16.865 Das ist das, was ich eigentlich damit sage. 00:36:17.218 --> 00:36:20.618 Und darum finde ich die Änderung gut. Ich würde immer noch keine Inams nehmen. 00:36:20.618 --> 00:36:22.978 Es gibt einen Pattern, das kann ich gerne in die Schau-Notizen packen. 00:36:24.178 --> 00:36:30.818 Das ich ja in meinem Blog beschreibe, wo du mit einem JavaScript-Wert und einem davon abgeleiteten Typen 00:36:31.215 --> 00:36:34.298 das gleiche Verhalten erzeugen kannst, aber du 100 Prozent beim Typ-System bist 00:36:34.298 --> 00:36:38.407 und die gleichen Eigenschaften hast und die gleichen Features hast und die gleichen Typechecks hast. 00:36:38.542 --> 00:36:45.618 Und das Schöne ist jetzt mit dieser Änderung in Inams ist der Unterschied zwischen diesen Dingen nicht mehr so groß. 00:36:46.138 --> 00:36:49.338 Du hast immer nur die nominellen Features und das kann tatsächlich etwas sein, 00:36:49.338 --> 00:36:53.098 wo ich mir denke, okay, das will ich, wenn ich sicherstellen will, dass es einen Unterschied 00:36:53.098 --> 00:36:59.658 gibt zwischen Inam A und Inam B, dann ist die Inam das einzige, mit dem du das machen kannst. 00:37:00.535 --> 00:37:06.738 Aber ansonsten ist die Angleichung zwischen diesen Welten besser. Und wenn du irgendwo 00:37:06.738 --> 00:37:11.538 Inam Union Werte erwartest, dann kannst du auch von einer Inam, die vielleicht schon in deinem 00:37:11.538 --> 00:37:15.258 Code existiert, leichter hingehen. Also der Migrationsschritt ist meiner Meinung nach. 00:37:15.258 --> 00:37:20.498 Und deswegen bin ich happy, dass dieses Feature kommt. In Wirklichkeit hätte ich gern ein 00:37:20.498 --> 00:37:26.098 Feature, das man sagt, disallow Enums im Compiler und sie verschwinden. Das wäre das Allerbeste. 00:37:27.236 --> 00:37:32.338 Aber zudem lassen sie es nicht hin. Weil, meine Meinung nach, werden sie zu stark genutzt. 00:37:32.338 --> 00:37:37.738 Also ich habe Projekte, die ich sehe, wo Enums teilweise den Compiler in die Knie zwingen, 00:37:37.738 --> 00:37:41.978 einfach nur durch deren bloße Existenz. Ach, sind die so aufwendig? 00:37:42.701 --> 00:37:44.458 Ja, wir haben ihn mit 2000 Einträgen. 00:37:46.311 --> 00:37:52.001 Autogeneriert für irgendeinem Code Generator. Aber wäre eine Union mit 2000 Einträgen dann besser? 00:37:52.001 --> 00:37:57.121 Ja, wäre besser wegen der Syntax, weil nicht sofort alle Einträge evaluiert werden müssen, 00:37:57.121 --> 00:38:00.328 sondern nur der Typ Check interessant ist. Aber wenn du eine Inam definierst, 00:38:00.688 --> 00:38:05.639 dann muss die ganze Inam gepasst werden, damit überhaupt mal bekannt ist, was da ist. 00:38:07.223 --> 00:38:10.921 Und weil du ja Syntax zur Verfügung stößt, mit der du das nutzt. 00:38:11.130 --> 00:38:13.993 Und das ist einfach bei 2000 Strings in einer Union ganz was anderes. 00:38:14.209 --> 00:38:17.648 Also da muss ich einfach sagen, hey da ist der Typcheck schon, bin ich dort drinnen. 00:38:17.963 --> 00:38:22.627 Der Ray includes ist halt so schnell wie dein Compiler. Aber das Ganze aufzubereiten, puh, schwierig. 00:38:23.158 --> 00:38:27.443 Meistig aus Erfahrung, hat für irrsinnig viel Diskussion gesorgt in einem Projekt, in dem ich mal wieder da war. 00:38:27.641 --> 00:38:34.851 Okay, finde ich gut. Ich nehme gerne immer weitere Munition gegen Inams zur Hand. 00:38:36.427 --> 00:38:43.431 Damit ich da pro Union argumentieren kann. Nehme ich gerne mit, war mir gar nicht klar, aber ist logisch. 00:38:43.890 --> 00:38:54.323 Kunst ändert auch nichts dran. Das ist nämlich auch witzig. Also die Inam frisst einfach Kompilzeit, egal ob so Kunst Inam ist oder nicht. 00:38:55.242 --> 00:38:59.361 Das ist interessant. Das hätte ich jetzt auch nicht unbedingt erwartet, aber macht ja immer noch irgendwie Sinn, 00:38:59.361 --> 00:39:04.091 auch wenn es halt ein Artifakt macht. Das ist jetzt das einzige, was Kunst Inam tut. Ich kenne ihn auch. 00:39:07.359 --> 00:39:11.446 Das sind meine Two-Sense dazu. Also ich bin froh, dass das Ding existiert. 00:39:11.609 --> 00:39:17.297 Also diese Annäherung existiert. Es macht sicher einige Dinge einfacher und es sorgt nicht mehr für so viele Verwirrungen. 00:39:17.387 --> 00:39:22.849 Also das war eigentlich das größte Problem, wo du gehst halt dann innerhalb deiner Inam 00:39:22.849 --> 00:39:26.649 aus, wenn du zum Beispiel das Which-Case-Statement machst bei einer Number-Inam, dann musst 00:39:26.649 --> 00:39:30.849 du jeden Case betreuen und dann hast du halt bei einer Inam mit drei Einträgen, hast 00:39:30.849 --> 00:39:35.609 du halt nur drei Cases und das Problem ist aber, dass von oben viel, viel mehr reinkommen kann. 00:39:35.609 --> 00:39:40.169 Bitter, dass du diese Typ-Sicherheit nicht hast. Ja. Weil das willst du ja von TypeScript, 00:39:40.169 --> 00:39:44.849 zu dem existiert es. Und das kann ich dir nicht bitten und das ist halt traurig. 00:39:45.285 --> 00:39:50.489 Ja gut, okay. Dann wärme ich mich so langsam gegenüber dem Feature auf. Ich meine, das löst 00:39:50.489 --> 00:39:54.129 immer noch ein Problem, das am besten Fall gar nicht da ist, aber das kann man sich ja nicht 00:39:54.129 --> 00:39:57.049 ausprobieren. Aber hey, du weißt, du kennst die Ursprünge von TypeScript, das war jetzt sehr 00:39:57.049 --> 00:40:00.769 stark angelehnt. Ein Objekt orientierte Programmiersprachen, wie es hier schafft. 00:40:00.769 --> 00:40:02.768 Wunsch für Java-Entwickler, die jetzt Web machen müssen. 00:40:03.074 --> 00:40:11.489 Ja, genau. Und ich meine, wer hat's denn geschrieben? Das war irgendwie vorherzusehen und das ist ja 00:40:11.489 --> 00:40:18.369 jetzt nicht das Problem, sage ich jetzt mal. Und das Problem ist, wirst du auf lange Sicht damit 00:40:18.369 --> 00:40:23.369 umgehen und da hat es ja schon viele, viele Annäherungen gegeben. Namespaces haben nimmer 00:40:23.369 --> 00:40:27.689 die Wertigkeit wie vorher, Modules haben nimmer die Wertigkeit wie vorher, da gibt es jetzt einfach 00:40:27.689 --> 00:40:31.129 die ECMAScript Modules, die Triple Slash Directives haben nicht mehr die Wertigkeit wie 00:40:31.129 --> 00:40:35.289 vorher und jetzt endlich haben Inams auch nicht mehr die Wertigkeit wie vorher. Es ist eine weitere 00:40:35.289 --> 00:40:41.249 Annäherung und das ist immer das Beste, um über kurz oder lang wegzukommen davon und deswegen ist 00:40:41.249 --> 00:40:47.369 gut, dass es jetzt per Default in 5.0, sind es vorhin von Inams ändert, weil noch jeder und 00:40:47.369 --> 00:40:53.689 jede hoffentlich merkt, dass der Einsatz einer Inam es wahrscheinlich nicht wert ist. Also notwendige 00:40:53.689 --> 00:40:57.509 Vorarbeit für möglicherweise eines Tages wirklich das Compiler-Flag. 00:40:57.509 --> 00:40:59.709 Genau, das wäre meine Hoffnung. 00:41:02.282 --> 00:41:08.932 Gut, die restlichen Features, so irgendwie JS-Doc und so Zeug, haut mich jetzt auch nicht vom Hocker, 00:41:08.932 --> 00:41:09.932 irgendwie exportiert. 00:41:09.932 --> 00:41:14.129 Na, in guter Style, danke schön. Vielleicht mal verwenden, irgendwie so Multi-Extension-Config-Files, 00:41:14.309 --> 00:41:16.132 ist ja auch nur, was man sowieso haben möchte. 00:41:16.132 --> 00:41:23.132 Ja, mit dem Release von dieser Revision, also wenn ihr das hört, 00:41:23.132 --> 00:41:25.580 sollte das TypeScript 5.0 veröffentlicht sein. 00:41:26.291 --> 00:41:30.632 Falls ihr es anders seht, falls ihr große Inams-Fans seid, lasst es uns wissen. 00:41:30.632 --> 00:41:34.152 Verfolgt uns auf Twitter und wenn es das noch gibt zu dem Zeitpunkt, wir nehmen das 00:41:34.152 --> 00:41:38.512 deutlich vor der Veröffentlichung aus, also wer weiß was sich der Elmo bis dahin 00:41:38.512 --> 00:41:44.992 noch ausdenkt. Ansonsten gibt es uns ja auch noch auf Mastodon und unseren Slack-Channel Community Draft gibt es noch. Also lasst uns wissen, 00:41:44.992 --> 00:41:49.312 überzeugt uns davon, dass Inams voll gut sind und wir komplett falsch liegen. 00:41:49.312 --> 00:41:51.875 Ich wäre sehr interessiert an diesbezüglichem Input. 00:41:54.711 --> 00:41:59.716 Stefan, es war mir wieder ein großes großes Vergnügen. Ja, es war ein Volksfest. 00:42:00.184 --> 00:42:06.612 Danke fürs Zuhören. Wir sehen uns dann in dieser Konstellation nächstes Quartal wieder, wenn es dann um TypeScript 5.1 geht. 00:42:06.918 --> 00:42:09.754 Bis dahin, danke fürs Zuhören und Tschüssi. 00:42:10.105 --> 00:42:10.735 Ciao! 00:42:29.343 --> 00:42:38.872 Das passt. Also ich hab so ein fancy neues Mikro. Und das steht jetzt auf so einem Stand und da muss ich immer ganz nahe hingehen, damit man mich auch anständig versteht. 00:42:39.191 --> 00:42:43.188 Und ich hoffe das passt. Und die darf nicht so am Sessel hin und her rutschen. 00:42:43.521 --> 00:42:47.464 Ach so, ein bisschen Rassel und Ambience und so Knarz kommt da schon rüber. 00:42:47.806 --> 00:42:49.400 Okay. Das ist wahrscheinlich das Bewegen. 00:42:50.129 --> 00:42:53.991 Das ist wahrscheinlich... also ich habe jetzt gerade auch das Mikrofon gestreichelt, weil ich Staub entfernt habe. 00:42:54.036 --> 00:42:58.032 Das ist natürlich auch Knarz. Das muss ja sein. Das wäre dann das hier. 00:42:58.456 --> 00:43:02.432 Ja, genau. Man muss das Mikrofon ja streicheln, damit es hinterher schön zart wird. 00:43:02.669 --> 00:43:06.512 Genau, ganz genau. Ich streichle jetzt nicht mehr, es ist genug gestreichelt. 00:43:06.828 --> 00:43:08.098 Gut. 00:43:08.862 --> 00:43:13.792 Jetzt sind drei Minuten drin und schon eine ganze Outtake Sendung geschafft. 00:43:13.792 --> 00:43:17.752 Ich glaube, so viel haben wir jetzt ja gar nicht mit aufgezeichnet. 00:43:17.752 --> 00:43:23.512 Außerdem, was erwartest du auch, wenn hier die beiden Clowns vom Dienst in der Sendung sind? 00:43:24.599 --> 00:43:28.352 Ah ja. Verdammt. Ja, es ist cool, dass ich wieder mal dabei bin. 00:43:28.352 --> 00:43:35.512 Ich bin eh so komplett weg eigentlich davon, weil Kinder und alles und alles eigentlich. 00:43:35.512 --> 00:43:40.560 Das ist jedes Problem. Ja, ich war ja auch weg, aber... 00:43:41.748 --> 00:43:48.238 Irgendwann haben dann die Katastrophen aufgehört sich sozusagen aufzutürmen und nachdem dann sozusagen 00:43:48.635 --> 00:43:51.713 genug davon abgetragen war, dass man auch mal wieder was anders machen konnte, 00:43:51.918 --> 00:43:55.089 geht auch mal wieder was in Richtung Podcast. 00:43:55.467 --> 00:43:57.736 Ich hab keine Ahnung wann dieser Zeitpunkt bei mir sein wird. 00:43:57.799 --> 00:44:01.998 Vor allem diese regulären Mietungen. So auswärtig wie das geht, das passt. 00:44:01.998 --> 00:44:11.050 Aber ich sehe bei meinen Kindern keine Chance, dass die Abendrituale sich zu meinen Gunsten in den nächsten Jahren verändern werden. 00:44:11.374 --> 00:44:14.597 Ja und das muss ich heute mal fressen. 00:44:15.200 --> 00:44:22.060 Ja ich mein man könnte ja hin und wieder auch mal bei äh also zur Diskussion stellen, ob vielleicht ein anderer Zeitslot, ein anderes Aufnahmeregime vielleicht... 00:44:22.591 --> 00:44:26.849 Ja aber da bin ich tatsächlich auch, sag mal, der weakest link und das ist okay. 00:44:27.245 --> 00:44:35.510 Es ist ja auch sogar so, dass ihr von uns jetzt am wenigsten Ahnung habt vor dem ganzen, weil ich einfach schon so lange nichts mehr gemacht hab in dem Bereich. 00:44:35.671 --> 00:44:43.197 Also da haben Leute wie die Vanessa einfach viel mehr Insights und die Vanessa kennt sich irrsinnig. 00:44:43.242 --> 00:44:44.926 Jedenfalls muss ja der Übernerd sein. Also ich meine. 00:44:46.339 --> 00:44:55.558 Ja, so generell Hugscheißen geht schon. Es ist ja nun tatsächlich so, ich weiß ja nicht, ich glaube wir sind ja ungefähr gleich 00:44:55.558 --> 00:44:59.267 lange, also wir sind ja zu ungefähr gleichen Zeitpunkt haben wir ja die Segel gestrichen 00:44:59.636 --> 00:45:02.030 und haben gesagt so Podcast bestellen wir jetzt mal hinten an. 00:45:02.840 --> 00:45:08.179 Da hatte ich ja in der zeit tatsächlich auch ein etwas anderer vibe in den sendungen niedergeschlagen, 00:45:09.340 --> 00:45:14.278 Ich weiß nicht, wie kein Zeug gehört. Ich sehe mir immer so leid wenn ich dann sendungen höre wo ich nicht dabei bin 00:45:14.638 --> 00:45:19.198 Ne aber das sind halt dann so sachen drin wie irgendwie tech recruiting imposter syndrome ausbildung. 00:45:20.958 --> 00:45:30.478 Oder halt so kram wie die backup revision war auch eine ganz neueste weil da war halt einfach nur so ein Typ dabei, der hat halt über Backups erzählt und Backups 00:45:30.478 --> 00:45:33.934 Das betrifft dich halt, ob du jetzt irgendwie web machst oder nicht, ja ohnehin immer. 00:45:35.311 --> 00:45:40.767 Oder die aktuelle wo hans und ich da über ai debattiert haben. 00:45:41.037 --> 00:45:42.000 Das kannst du ja immer machen. 00:45:43.801 --> 00:45:47.761 Ja stimmt. ich glaube der hans selber steckt ja auch nicht mehr ganz so tief im schützengraben 00:45:47.761 --> 00:45:49.517 drin wie das schon mal der fall war. 00:45:50.345 --> 00:45:54.841 Da würde ich mich jetzt nicht von abhalten lassen, von wegen keine ahnung haben. 00:45:55.036 --> 00:45:59.281 Weil wenn du keine ahnung hast, hast du eine meinung. und wenn du keine meinung hast, kannst du immer noch witz machen. 00:45:59.281 --> 00:46:03.083 Meinungen habe ich viel. wo ist denn scheiß? 00:46:03.281 --> 00:46:05.964 Was? Mein Hauptmeinung gerade überwandt. 00:46:06.594 --> 00:46:12.905 Ja, gut. Das führt uns ja mehr oder weniger direkt in den TypeScript rein. 00:46:13.553 --> 00:46:16.029 Ja. Na, aber jetzt streiten sie wieder. 00:46:16.947 --> 00:46:27.281 Die Communitys, die React-Community bettelt sich jetzt wieder mit der traditionellen Web-Dev-Community, weil irgendwer gesagt hat, 00:46:27.281 --> 00:46:32.107 hey, Server-Set-Rendering ist total cool. Und jeder sagt, ja, ist eh cool. 00:46:32.281 --> 00:46:34.281 Das ist man seit 10 Jahren. 00:46:35.348 --> 00:46:40.281 Und das sind so mühselige Diskussionen. Wird er denn zurückgebattelt? 00:46:40.281 --> 00:46:43.281 Also ich sehe das jetzt eigentlich, das mag auch daran liegen, wen ich da verfolge, aber 00:46:43.281 --> 00:46:47.951 ich sehe halt die Traditionenlisten, die halt eben in letzter Zeit echt die Samthandschuhe abgelegt haben. 00:46:48.842 --> 00:46:53.281 Also kommt da aus der React-Seite irgendwas zurück? Ich nehme die ja nicht wahr. 00:46:53.281 --> 00:46:55.864 Nein, die React-Seite ist, also das Thema, das ich jetzt sehe, das ist auf Mastodon, 00:46:56.521 --> 00:46:59.762 und die React-Seite ist nicht auf Mastodon, die ist immer nur drüben. 00:47:00.281 --> 00:47:04.929 Und die Meinungen sind unterschiedlich, je nachdem, welche Seiten du aufmachst. 00:47:05.073 --> 00:47:13.922 Die Trommeln schlagen schon sehr laut gerade im Moment. Ich finde, ich bin dieser Diskussion überdrüssig. 00:47:14.436 --> 00:47:19.243 Das ist die ehrlichste Antwort, die ich geben kann. 00:47:20.224 --> 00:47:26.427 Ich bin letztens auch zu dem Ergebnis gekommen, aber ich denke, lasse halt die Reaktleute so ein bisschen spielen. 00:47:26.561 --> 00:47:32.062 Ich hab letztens hier mal so geguckt, was können die eigentlich bei PHP mit ihren Server-seitigen Frameworks oder so? 00:47:32.683 --> 00:47:38.721 Und da hab ich dann irgendwie Laravel aufgemacht und einfach mal so, okay, hallo Welt und Zeug. 00:47:39.444 --> 00:47:43.321 Und nachdem ich jetzt ja was betreibe, was so mit Next.js gebaut ist, wenn ich das so 00:47:43.321 --> 00:47:47.401 vergleiche mit dem, was mir da PHP liefert, also wo ich weder die Sprache noch das Framework 00:47:47.401 --> 00:47:50.801 kenne, aber wenn ich einfach so auf drei Knöpfe drücke und irgendwie alles ist da, was ich 00:47:50.801 --> 00:47:55.921 brauche, was ist, ich muss halt irgendwie ein extra Modul für Session-Management installieren 00:47:55.921 --> 00:48:00.281 auf eine bestimmte Version fest pinnen, damit das im Zusammenspiel mit Next.js und dem und jenem und 00:48:00.281 --> 00:48:03.066 und solchen irgendwie funktioniert. Versus, das geht einfach. 00:48:04.803 --> 00:48:08.608 Ja okay, es wird jetzt auch serverseitig gerendert, aber ich kann ja auch serverseitiges Rendering haben, 00:48:08.827 --> 00:48:15.120 ohne irgendwie groß was dafür zu tun und das ist schon echt ein bisschen armselig, was man da so in JavaScript-Land geboten bekommt. 00:48:15.363 --> 00:48:16.848 Richtig einsteinisch. 00:48:17.208 --> 00:48:23.456 Du hast da auch die Königin der Frameworks ausgesucht, weil Laravel ist halt wirklich krass, was das angeht. 00:48:23.717 --> 00:48:26.652 Also die machen irrsinnig gute Sachen. 00:48:26.994 --> 00:48:30.528 Und es gibt einen Kollegen, den Christoph Rumpel, der war ja schon mal bei uns, 00:48:30.528 --> 00:48:35.168 der sich viel damit beschäftigt und da immer so Code Screenshots rauf stellen, 00:48:35.168 --> 00:48:40.848 wo man denkt, da ist ja kein Code drauf, das sind ja drei Zeilen und du hast einfach diese Funktionalität implementiert. 00:48:40.848 --> 00:48:47.048 Und dann komme ich her bei meinen Ras Snippets, der alles so, ich hätte bitte gerne größere Screenshots 00:48:47.048 --> 00:48:51.568 oder könnt ihr bitte diese Tweets nur auf einem 28 Zoll Monitor anschauen, 00:48:51.568 --> 00:48:54.768 weil ansonsten seht ihr halt einfach nicht, was ich da geschrieben habe. 00:48:54.768 --> 00:48:59.933 Das ist schon beeindruckend, da wird wirklich sehr viel Wert auf Effizienz gelegt, das ist toll. 00:49:00.446 --> 00:49:04.108 Ja, also ich bin sicher, dass das total nervt, wenn man irgendwie was machen möchte, was außerhalb der Reihe ist. 00:49:05.010 --> 00:49:09.608 Aber für noch nicht einschreibzeichen die Datenbank und klemme da halt irgendwie noch, weiß ich nicht, 00:49:10.646 --> 00:49:11.906 1, 2, 3 Services dran. 00:49:12.347 --> 00:49:20.528 Ja, reicht's. Das ist schon echt nicht schlecht. Ich kann halt eben 0 PHP mehr. Ich habe das ja, ich habe das halt irgendwie 15 Jahren nicht mehr rezipiert. 00:49:21.917 --> 00:49:28.068 Aber es ist halt, sagen wir so, dass das Framework erfüllt halt auch relativ gut die Philosophie. So hier sitzt halt jemand, der keine Ahnung hat. 00:49:28.263 --> 00:49:32.568 Ich copy und paste irgendwie Kram und pass den so an und der reimt sich mit Kram, den ich schon mal gesehen habe. 00:49:33.566 --> 00:49:39.363 Und das funktioniert am Ende. Dann hast du vielleicht noch Tooling, irgendwelcher Autokomplete und du lernst die Sündungsturnalarm. 00:49:39.568 --> 00:49:42.478 Das passt. Und die PRP-Sündung ist jetzt nicht so schwierig. 00:49:42.946 --> 00:49:47.568 Also ich würde behaupten, ich konnte nie PRP. Ich habe zwar viel PRP entwickelt, aber ich konnte es nicht wirklich. 00:49:47.568 --> 00:49:54.496 Das war eigentlich immer der Punkt, wo ich sage, mit denen das halt, wenn man ein bisschen schiebt, schaut so aus wie C oder Java, 00:49:54.649 --> 00:49:59.105 eben auch JavaScript, weil es heute ähnliche Syntaxprimitive hat, komme ich weit genug. 00:50:00.203 --> 00:50:01.680 Damit der Output passt. 00:50:01.995 --> 00:50:06.688 Aber dass jetzt irgendwie jemals Best Practices adoptiert hat oder sonst irgendwas, war unmöglich. 00:50:06.688 --> 00:50:08.928 Ich habe ja hauptsächlich WordPress gemacht, das ist sowieso unmöglich, 00:50:08.928 --> 00:50:13.688 weil da rennst du in der WordPress-Loop und versuchst halt irgendwie Dinge rein zu quetschen. 00:50:14.248 --> 00:50:18.248 Aber es ist trotzdem beeindruckend, wie niederschwellig das Ganze nach wie vor ist. 00:50:18.433 --> 00:50:27.748 Also dass das überhaupt möglich ist, dass es einfach irgendwen hinsetzt und und er oder sie können einfach los starten und werken und resultat, 00:50:28.479 --> 00:50:33.548 dann das ist halt immer echt so die stärke von dem ganzen ökosystem gewesen das ist ja immer noch 00:50:33.548 --> 00:50:37.828 der grund warum ich bei allen möglichen leute sagen die mir die mich irgendwie fragen ich will 00:50:37.828 --> 00:50:41.388 irgendwie eine webseite haben aber irgendwie so square space ist mir dann doch ein bisschen zu 00:50:41.388 --> 00:50:47.188 blöd ich möchte gerne irgendwie ein bisschen extra sein geht zu wordpress weil du musst halt nur 00:50:47.188 --> 00:50:51.388 irgendeine irgendein brecheisen finden dass du an irgendeiner stelle ein ansetzen kannst in diesem 00:50:51.388 --> 00:50:54.328 ganzen System und dann kannst du deine Funktionalität die du haben willst da 00:50:54.328 --> 00:50:57.241 irgendwie rein prökeln. Ich weiß zwar nicht wie, aber ich, 00:50:57.808 --> 00:51:01.168 weiß dass du es hinkriegen wirst. Musst du ein Theme installieren, ein Plugin oder 00:51:01.168 --> 00:51:03.525 Irgendetwas selber irgendwo reinpasten, aber es wird funktionieren. 00:51:04.974 --> 00:51:13.464 Und wenn ich das halt wie gesagt vergleiche mit ich darf halt irgendwie meine meine Suppe Library die eine von drei Komponenten für Session Management in meinem Next. 00:51:13.464 --> 00:51:20.576 Konstruktor ist nicht updaten auf die Version so und so weil sonst geht alles kaputt ist halt echt schwach ist halt nicht mega schwach. 00:51:21.024 --> 00:51:33.564 Das ist ja das Problem also also du kommst ja nicht mit dem Patch nach gerade wenn du jetzt sagst du hast irgendwie ein Hobby Projekt oder irgendein Projekt das du nicht regelmäßig anschaust das vielleicht einmal ein CMS hängt und du hoffst dass ich die Seiten automatisch aktuellisieren. 00:51:33.791 --> 00:51:38.319 Du hast per Default einfach noch zwei Wochen einen Security-Bridge irgendwo. 00:51:38.508 --> 00:51:46.564 Die einzigen Security-Nachrichten, die ich kriege, sind von React-Projekten oder Projekten, 00:51:46.564 --> 00:51:50.391 die halt frontendlastig sind, aber stark auf MPM oder MPM-Tooling legen. 00:51:50.444 --> 00:51:55.464 Und da gibt es ja diese Diskussion, die ist mir auch wieder irrsinnig angangen, also so 00:51:55.464 --> 00:52:02.124 nervig, wo ich gesagt habe, aber es ist doch egal, weil da ist ja nur der Dev-Server betroffen 00:52:02.124 --> 00:52:06.044 dem Security Breach und der ist jetzt nicht kritisch, weil wer würde denn ein 00:52:06.044 --> 00:52:10.084 Development Server im Production deployen? Das macht auch keiner. Das ist die 00:52:10.084 --> 00:52:14.652 Annahme von dem Maintainer gewesen. Ja, haha, du Kind, wirklich super, dass du so. 00:52:15.004 --> 00:52:20.284 Blauäugig ins Leben gehst, weil natürlich jeder, der sich nicht auskennt, haut den 00:52:20.284 --> 00:52:24.404 Dev Server live, weil ein Resultat und ich möchte das Resultat weiter nutzen. 00:52:24.404 --> 00:52:34.044 Also und du kannst ja nicht von allen erwarten, dass sie Profis sind, die überhaupt daran denken, dass das ein Problem sein könnte. Genau. Und das ist halt schon bitter, 00:52:34.044 --> 00:52:37.244 ne? Und das ist wirklich bitter. Und wir sind mittlerweile an einem Punkt, also die 00:52:37.244 --> 00:52:41.644 Scriptconf-Webseite, die haben wir seit 2019 nicht mehr betreut, aus Gründen, ne? Wo haben 00:52:41.644 --> 00:52:47.519 wir so ein bisschen Pandemie dazwischen. Die können wir nicht mehr zum Leben erwecken, 00:52:47.604 --> 00:52:53.564 ist glaube ich die richtige Wortwahl dazu. Oh. Weil... Ja, festgefahren. Extrem kurze 00:52:53.564 --> 00:53:00.284 Ja, also total festgefahren. Es ist Notweiter, es ist Nächstweiter, es gibt keine Migrationsfahrt, 00:53:00.284 --> 00:53:06.924 nichts. Mit Mühe und Not kriegen wir die alte Version noch hin, dass wir sie starten können, 00:53:06.924 --> 00:53:12.364 aber von dort jetzt weg zu migrieren mit fast drei, dreieinhalb Jahren Pausen, unmöglich. 00:53:13.221 --> 00:53:19.524 Und tatsächlich ist es so, um am Ball zu bleiben, brauchst du. 00:53:21.296 --> 00:53:25.546 Iterations zügeln für zwei wochen das ist das was ja bei uns in der firme sie, 00:53:26.724 --> 00:53:31.666 wir kriegen bläck tags kennst das ist das ist so ähnlich wie das was du von die pender pot kriegst und. 00:53:32.666 --> 00:53:38.139 Fehler update security ist irgendwas keine ahnung ist halt echt schon übel. 00:53:38.746 --> 00:53:45.586 Du musst es halt auch updaten können das ist also im moment so mein problem mit meinem aktuellen nextjs stack da wohnt halt eine version von der library drin 00:53:45.890 --> 00:53:52.466 Und da ist halt ein bekannte großes Security-Lücke, kein Problem, ist auch gefixt, aber bei dem 00:53:52.466 --> 00:53:56.946 Major Update ist halt auch was eingebaut worden, was halt im Zusammenspiel mit einer anderen. 00:53:57.431 --> 00:54:01.186 Relevanten Library, die ich halt für meine Konstruktion brauche, halt eben einfach zu 00:54:01.186 --> 00:54:06.826 einem Fehler führt. Und das ist halt auch bekannt und gemeldet und etc. Und da gibt's irgendwie 00:54:06.826 --> 00:54:11.186 Workaround-Diesen, Workaround-Jenen, alle mit so Nachteilen. Aber es ist halt überhaupt gar 00:54:11.186 --> 00:54:16.586 nicht das Ziel, das wieder zum Funktionieren zu bringen in diesem Zusammenspiel. Und das ist 00:54:16.586 --> 00:54:21.186 halt, glaube ich, das Problem, wo halt dieses ganze Micro-Library-Krams mit halt auch seinem 00:54:21.186 --> 00:54:26.066 Semantic Versioning und was nicht allem einfach kaputt geht, weil selbst wenn man jetzt sagt, 00:54:26.066 --> 00:54:31.586 alle halten sich da an diese Versionskontakte, selbst wenn sie das probieren, hast du ja dann 00:54:31.586 --> 00:54:36.186 ja trotzdem als ein so ein ganz kleiner Baustein in einem so riesigen Ökosystem im Prinzip ja 00:54:36.186 --> 00:54:39.946 unendlich viele Berührungspunkte mit unendlich vielen Libraries, mit denen du interagieren 00:54:39.946 --> 00:54:43.786 können müsstest und das kannst du halt entweder nicht leisten das willst du 00:54:43.786 --> 00:54:50.386 möglicherweise nicht leisten möglicherweise ist einfach komplett unmöglich zu allem kompatibel zu sein und wie gesagt ich vergleiche das mit 00:54:50.625 --> 00:54:59.146 tipp dieses paste diesen kommand hier in dein terminal und dann hast du da irgendwie dein laravel mit irgendwie authentifizierung drin und session 00:54:59.146 --> 00:55:02.506 management drin und die datenbank packen wir dir gleich mit rein hier ist eine 00:55:02.506 --> 00:55:04.552 docker compose nicht mal das musste selber schreiben 00:55:04.885 --> 00:55:08.801 Ja. Okay, ich vermisse halt echt irgendwie so ordentliches Typsystem. 00:55:09.773 --> 00:55:14.106 Oh, versuchst du jetzt gerade einen auf Überleitung zu machen? 00:55:14.274 --> 00:55:17.946 Ich weiß gar nicht, ehrlich gesagt, ich meine, die Aufnahme läuft ja eh schon. 00:55:18.514 --> 00:55:22.306 Ja, ja, wir sind schon mitten drin. Eigentlich ja, ich würde sagen, wir machen das. 00:55:22.306 --> 00:55:25.386 Also das ist halt so wirklich mein einziges wirkliches Problem damit. 00:55:25.386 --> 00:55:27.786 Also ich weiß nicht, was ich tue, aber das ist okay, weil wie du richtig sagtest, 00:55:27.786 --> 00:55:32.466 es ist ja kaum Code. Du schreibst irgendwie drei Zeilen, deklarierst da was hin, bäm, 00:55:32.466 --> 00:55:36.933 funktioniert und wenn nicht ist halt auch der Vorteil der gesamte Stack wird, 00:55:37.706 --> 00:55:43.106 halt auch benutzt von Leuten die keine Ahnung haben die halt die exakten Fehlermeldungen so oft in irgendwelche Foren und so reingepastet haben 00:55:43.106 --> 00:55:49.546 du findest das hast du irgendwie ein Problem mit Next.js brauchst du ja Next.js plus Versionsnummer plus dieses plus dieses plus solches in der 00:55:49.546 --> 00:55:52.777 Kombination manifestiert sich dieses Problem und da gibt es halt eben exakt 00:55:52.840 --> 00:55:56.746 niemanden der das schon gemacht hat. Und wenn der Mond ein Grad schief steht dann 00:55:56.746 --> 00:56:00.986 funktioniert schon immer und du kriegst andere Fehlermeldungen. Es ist halt ja. Ja. 00:56:00.986 --> 00:56:04.586 Das ist richtig. Also das, was mich halt eben interessiert, ist wirklich... 00:56:06.784 --> 00:56:12.420 Also das ist mir dann ja aufgefallen und ich hatte jetzt so irgendwie so den den verdacht dass das ohnehin schon immer so ist. 00:56:12.987 --> 00:56:16.849 Weil ich erinnere mich an irgendwie so ein ganz altes cake php projekt dass ich vor. 00:56:17.668 --> 00:56:27.076 20 jahren oder so mal gemacht habe und erinnerte mich da wie ich da so sagte ich denke einfach die datenbank tabelle und siehe da da fällt ein rudimentäres user interface raus und irgendwie funktioniert alles. 00:56:28.111 --> 00:56:31.735 Das war vor 20 Jahren, dann baue ich halt irgendwie vor ein paar Jahren, fange ich halt so an und 00:56:31.735 --> 00:56:35.415 NextJail sieht gut aus, lass mal anfangen. Ah, okay, du bist also ein Framework und alles, 00:56:35.415 --> 00:56:39.255 was du machst, ist React-Komponenten anzeigen. Und alles, was irgendwie interessant ist, 00:56:39.255 --> 00:56:45.215 muss ich da irgendwie selber mir zurecht basteln. Geht's noch? 00:56:45.863 --> 00:56:51.975 Ja. Aber trotzdem habe ich es geschluckt, ab das gemacht und jetzt stehe ich halt vor dem Problem, 00:56:51.975 --> 00:56:55.135 dass ich halt hier so den alten Stack habe, das soll zu meinem neuen Stack irgendwie werden, 00:56:55.135 --> 00:57:02.135 Aber jetzt muss ich halt eben eine Migration beschreiten von halt wirklich dem einen, was ich loswerden will, zu dem anderen, wo ich hin will. 00:57:02.419 --> 00:57:11.961 Aber das Delta zwischen denen ist halt einfach so groß, weil natürlich mit seinen eigenen Konventionen daher, dass ich halt einfach jetzt riesig viel Arbeit habe, die ohne Zweifel zu bewältigen sein wird und dies ohne Zweifel wert sein wird. 00:57:12.699 --> 00:57:17.135 Aber ich meine, wie bin ich in dieses Loch überhaupt reingerannt? Warum check ich das nicht? 00:57:17.218 --> 00:57:22.475 Nicht. Vielleicht bleiben wir ganz kurz noch bei Next.js bevor wir weitergehen, weil du sagst 00:57:22.475 --> 00:57:27.675 ein paar sehr interessante Sachen. Das Ding ist halt so, wenn du jetzt Next.js angeschaut hast von 00:57:27.675 --> 00:57:34.035 vor vier, fünf Jahren, sagen wir mal so. Da war es ja richtig cool, weil in Wirklichkeit hat Next.js 00:57:34.035 --> 00:57:41.195 gesagt, du kannst ReaComponenten schreiben, aber diesen ganzen Mist mit Routing oder Server-Site-Rendering 00:57:41.195 --> 00:57:46.535 Rendering und State-across-Sessions-weiten und so weiter übernehmen wir für dich. 00:57:46.701 --> 00:58:00.573 Das war halt auch der nächste 00:57:59.043 --> 00:58:06.677 Hosting-Ökosystem transformiert, wo das Framework entscheidet, was die beste Hosting-Variante ist. 00:58:06.830 --> 00:58:09.830 Und da gibt es leider ein kleines Problem. Am Anfang war es halt noch richtig cool, weil du sagst, 00:58:09.830 --> 00:58:14.830 das ist halt React-Batteries included, das ist eigentlich das, was du haben willst, ganz leichtes Tooling, 00:58:14.830 --> 00:58:20.830 ein paar Prozesse oder ein paar Konventionen, aber du hast schnell unter das Framework blicken können 00:58:20.830 --> 00:58:22.746 und hast noch sehr gut verstanden, was da eben passiert. 00:58:22.935 --> 00:58:27.830 Und jetzt hast du halt das Problem, was ursprünglich ein Open-Source-Projekt, eine Start-up war, 00:58:27.830 --> 00:58:31.811 Startup-Sore ist jetzt der Hauptfunnel für Kunden. 00:58:32.261 --> 00:58:37.473 Also Next.js ist jetzt das Produkt. Es ist ein Open Source Produkt, ja, aber es ist das Produkt. 00:58:37.670 --> 00:58:39.580 Also Vercell verkauft Next.js. 00:58:39.958 --> 00:58:43.150 Sie machen Geld über das Hosting, aber das Produkt ist Next.js. 00:58:43.150 --> 00:58:48.024 Und das Problem ist, wie du ein Produkt hast und du eine Firma bist, die ein Produkt hat, 00:58:48.230 --> 00:58:49.230 brauchst du eine Produkt-Roadmap. 00:58:49.798 --> 00:58:53.350 Das heißt, du musst irgendwie schauen, dass Features reinkommen oder dass die Dinge ändern. 00:58:53.350 --> 00:58:56.710 Du kannst nicht einfach nein sagen, weil es nicht irgendeiner Philosophie entspricht oder 00:58:56.710 --> 00:59:01.590 Sondern das Problem ist halt, du hast ein Roadmap, du hast Investoren, die müssen klar sein, 00:59:01.590 --> 00:59:05.443 was wann wie kommt, wie sich das aufs Business auswirkt und das versaut halt alles. 00:59:05.804 --> 00:59:08.510 Das ist halt wirklich ein Problem, weil im Moment kannst du das nicht mehr machen, du 00:59:08.510 --> 00:59:15.769 hast so viel Semantik in jeder Entscheidung und musst halt einfach und das Framework abstrahiert 00:59:15.832 --> 00:59:21.530 dir so viele Dinge weg, zwingt dich aber dann trotzdem zu Entscheidungen einfach nur, weil, 00:59:22.030 --> 00:59:25.500 sie diesen starken Teil haben zur Plattform Verselbe. 00:59:26.030 --> 00:59:31.510 Ist der Grund. Und ich meine das coole ist, das Projekt wird weiterentwickelt, das ist ja besser 00:59:31.510 --> 00:59:35.310 als wenn ihr stirbt, aber du musst halt jede Entscheidung und jedes Feature, das reinkommt, 00:59:35.310 --> 00:59:42.767 musst du halt echt für dich hinterfragen, ob es das Framework immer noch für dich bringt oder, 00:59:43.244 --> 00:59:47.430 ob du immer noch mit diesen Entscheidungen einverstanden bist oder vielleicht eine andere 00:59:47.430 --> 00:59:50.950 Lösung nicht besser wäre für dich. Weil wenn das Framework das Produkt ist und das ist... 00:59:52.138 --> 00:59:58.692 Dann, dann kaufst du dich früh oder später halt zum Betreiber ein und nicht zum Framework. 00:59:58.872 --> 01:00:02.248 Ja, weiß ich nicht so sehr. 01:00:02.509 --> 01:00:08.882 Also, weil zum einen, ich halte das ja für keine so bescheuerte Idee, sozusagen. 01:00:09.765 --> 01:00:16.877 Also, das Framework löst ja irgendwie so dein Problem. Du willst irgendwie dein Produkt da entwickeln, aber dazu gehört halt eben auch, das irgendwo 01:00:16.930 --> 01:00:17.908 zum Laufen zu bekommen. 01:00:18.578 --> 01:00:25.068 Und halt irgendwie eine sozusagen mit dem Framework gut zusammenspielende Hostingplattform 01:00:25.068 --> 01:00:31.109 anzubieten, man gibt es ja bei Lavarel genauso, halte ich jetzt erstmal nicht für eine per se beknackte Idee. 01:00:31.348 --> 01:00:36.388 Also ich würde das ja tatsächlich mehr so als Einheit sehen. 01:00:37.294 --> 01:00:42.632 Also, weißt du, das ist jetzt getrennt so operationell und sicherlich auch im Marketing, 01:00:42.828 --> 01:00:44.415 aber de facto ist es wie du sagst. 01:00:45.333 --> 01:00:54.308 Und man sollte das glaube ich auch so sehen dass nextjs Eigentlich zu diesem anderen ding dazugehört und man kann das auch unabhängig davon betreiben aber das kostet halt eben weil es ein nicht 01:00:54.308 --> 01:00:58.308 so gedachte Einsatz von diesem Tool ist. 01:01:01.690 --> 01:01:05.858 Aber trotzdem ist das mein Hauptproblem, das macht ja nichts. 01:01:06.596 --> 01:01:13.456 Das tut nichts, das macht nichts, was ich haben will und ich muss aktiv dagegen ankämpfen, um simpelste Dinge zu tun. 01:01:13.951 --> 01:01:17.066 Sehr viel Code für das, dass es nichts tut. 01:01:17.579 --> 01:01:23.620 Ja, pass auf, ich habe hier so User Interface und in dem User Interface hast du so dein Projekt und da schraubst du drin rum. 01:01:23.620 --> 01:01:29.030 Und dann kannst du aber auch aus dem User Interface sagen, mach mir einen Falk von diesem Projekt. 01:01:29.354 --> 01:01:32.900 Dass du wirklich so ein neues Projekt mit neuer ID und was nicht allem hast. 01:01:33.909 --> 01:01:38.800 Ich weiß ja nicht, was verkehrt mit mir ist, aber ich dachte so, ah wunderbar, dann machst 01:01:38.800 --> 01:01:43.080 du einfach einen Button da so rein in das User Interface, das nimmt den aktuellen Projekt 01:01:43.080 --> 01:01:47.890 State, so was da alles so eingefüllt ist in die Felder und macht einen Post zum Server. 01:01:49.015 --> 01:01:52.440 Weil dann geht der Server nämlich hin, tut das neu in die Datenbank, kriegt eine neue 01:01:52.440 --> 01:01:54.911 ID und redirectet dich dann auf die neue ID zurück. 01:01:55.830 --> 01:02:00.120 Das ist so radikal grundlegend, dass das eigentlich funktionieren müsste. 01:02:00.120 --> 01:02:04.800 Ja geht halt nicht. Also wobei es geht, aber pass auf, es ist halt so, das ist definitiv nicht vorgesehen. 01:02:04.800 --> 01:02:10.215 Weil die halt total ihre Single Page Application Brain Poison noch am Start haben. 01:02:10.566 --> 01:02:14.482 Ich hab das Projekt jetzt mal auf, dann kann ich dir genau sagen, wie ich das rausgehackt habe. 01:02:14.720 --> 01:02:19.160 Du kennst dich ja mit dem Next.js zumindest ein wenig aus. Oh, drei Jahre kein Next.js mehr. 01:02:19.160 --> 01:02:21.594 Es ist leider wirklich so. Aber erzähl. 01:02:22.107 --> 01:02:27.180 Ja, pass mal auf hier. Ich hab hier in meiner index-file irgendwie so ein... 01:02:28.670 --> 01:02:30.220 Wo ist denn das? Wo ist denn das? 01:02:31.730 --> 01:02:35.340 Fionna. Moment, ich muss mal kurz hier eine Katze bremsen, die ist gerade ein bisschen lästig. 01:02:36.520 --> 01:02:38.340 Lass die noch abpennen, du Nerfsack! 01:02:39.626 --> 01:02:40.980 Ich habe gesehen, dass der Napf wieder funktioniert. 01:02:42.902 --> 01:02:48.100 Irgendwie kriegt der Napf... die haben ja alle hier sensorgesteuerte Futterautomaten wegen diverser diätischer Einschränkungen. 01:02:48.340 --> 01:02:51.620 Und Ira hat gestern Abend gesponnen, da musste ich Futterautomaten debatten. 01:02:52.427 --> 01:02:55.740 Irgendwie so reset frequenzerweiterung blabla katzepfüttern war früher auch 01:02:55.740 --> 01:03:02.260 einfacher so wo haben wir es denn da guck ich 01:03:02.260 --> 01:03:12.740 finde es schon gar nicht wieder doch hier haha pass form ich habe ich also eine library genommen die heißt formidable die macht halt ein post passt 01:03:12.740 --> 01:03:16.500 halt so form data aus dem request raus und die habe ich dann halt irgendwie so 01:03:16.500 --> 01:03:27.643 mühsam in meine get server site props glaube ich reingesteckt genau wo ich halt so gucke wenn es ein post request ist und das ist halt wirklich alles so, 01:03:28.490 --> 01:03:35.820 ich gucke mir manuell das request objekt rein und gucken ob da die method irgendwie post ist und wenn ja mache ich halt so ein paar sich die form 01:03:35.820 --> 01:03:38.940 speichere das abkriegt eine neue id und redirected an manuell weil ich muss halt 01:03:38.940 --> 01:03:49.860 manuell in diesem request objekt rumfummeln weil es hat nicht einfach die Möglichkeit gibt zu sagen wenn post mach was und redirect dann. Ja ja ja das ist ich verstehe was 01:03:49.860 --> 01:03:53.156 was du machen musst und ich verstehe, wo dein Problem ist. Das ist Spitze, weil da bricht 01:03:53.580 --> 01:03:54.290 denke ich genau. 01:03:55.596 --> 01:04:02.437 Genau dieses grundlegende Feature von HTTP, dass du Daten hinschicken kannst und dass du nachher auch mit der Response den Output steuern kannst, 01:04:02.491 --> 01:04:10.936 durch die vielen Einstiegspunkte in diesem Framework, und halt einfach der Fakt, dass das Ding nicht für solche einfachen Sachen gemacht ist. 01:04:11.458 --> 01:04:17.093 Weil die Alternative des Dostes, dass du halt mit einer API redest, das heißt, das ist irgendeine Serverless Function, die du schreibst, 01:04:17.446 --> 01:04:20.433 und das rennt ja irgendwo, wie willst du da Redirects machen? 01:04:20.550 --> 01:04:25.646 Oder wie kannst du das sauber redirects machen? Weil das ist ja komplett detached von dem Rest deiner Software. 01:04:25.646 --> 01:04:29.966 Machst das du über die Seiten, die du rendest, hast du das Problem, dass du halt nur den 01:04:29.966 --> 01:04:34.886 Initialpunkt kriegst, aber nie den verarbeiteten Daten, die über einen Request reinkommen. 01:04:35.160 --> 01:04:39.126 Also ich kann mir vorstellen, dass das irrsinnig mühselig ist, das reinzukriegen. 01:04:39.374 --> 01:04:42.606 Ja, das hört sich alles sehr richtig an, was du sagst, aber trotzdem, ich mache halt 01:04:42.606 --> 01:04:44.343 hier am Ende des Tages immer noch eine Web-Applikation. 01:04:44.685 --> 01:04:50.246 Wenn ich mir ein Bein ausreißen muss, um Post zu machen, dann bin ich unwillig zu, da irgendwie 01:04:50.246 --> 01:04:54.948 Konzessionen bezüglich dessen zu machen, dass ich halt hier im Recht bin und dass die Blödsinn bauen. 01:04:55.632 --> 01:05:06.344 Ja, da hat Gott sei Dank versiell den Riesenvorteil, dass so Dinge wie HTTP-Post sowieso nicht mehr auf dem Schirm der meisten Entwicklerinnen und Entwickler heutzutage ist. 01:05:07.020 --> 01:05:08.955 Und das ist ein bisschen bitter. 01:05:09.630 --> 01:05:16.026 Ich bin halt zum Ergebnis gekommen, dass dieser ganze React-Kram, also das ist halt mehr so inklusive Ökosystem, 01:05:16.220 --> 01:05:21.026 Das darf man halt nicht wirklich als Web-Framework bezeichnen und mit Web-Erwartungen herangehen, 01:05:21.026 --> 01:05:24.026 sondern das ist halt irgendwie sein eigenes Ding. Das ist so semi-native. 01:05:24.214 --> 01:05:29.026 Und wenn man halt irgendwie so sein Gehirn vergiftet hat mit so Dingen wie Postrequests 01:05:29.026 --> 01:05:33.026 oder irgendwie so der Web-Animation-API, meinem Lieblings-, ich heiße React-Beispiel. 01:05:34.000 --> 01:05:36.367 Wo man halt irgendwie imperativ einen Effekt auslösen kann. 01:05:38.401 --> 01:05:43.891 Wenn man weiß, dass das da ist, dann ist man frustriert. Wenn man vergisst, dass das da ist und einfach nur so stumpf sagt, 01:05:43.891 --> 01:05:47.296 okay, wie macht man das im React nicht? Wie macht man das in einem Webbrowser? 01:05:48.011 --> 01:05:51.971 Dann geht das. Aber es ist so gut, du sagst so viel richtige Sachen. 01:05:51.971 --> 01:05:53.211 Ich habe das vermisst. 01:05:53.211 --> 01:05:56.331 Das Thema ist ja dann, genau durch solche Dinge, wo du sagst, 01:05:56.331 --> 01:06:01.611 jetzt kommt irgendein Case, der wäre einfach mit Bordmitteln einfach zu lösen. 01:06:01.611 --> 01:06:05.171 Und du merkst, das ist eine riesige Anstrengung, dass du das mit dem Framework löst. 01:06:05.171 --> 01:06:09.971 Schränkt es ja diese Bandbreite der möglichen Anwendungsfälle für das Framework ein, weil es 01:06:09.971 --> 01:06:14.131 steht nicht dafür, dass du sagst, du musst mehr auf- und betreiben für etwas, das eigentlich 01:06:14.131 --> 01:06:18.051 grundlegend sein soll, weil du auf diesen Abstraktionen vom Framework arbeitest. Wunderschön. 01:06:18.051 --> 01:06:22.091 Und das Problem ist dann, wenn du drüber nachdenkst und mehr und mehr schaust, was da eigentlich 01:06:22.091 --> 01:06:27.691 was schief geht, dann hast du in Wirklichkeit ein Single Page Application Framework, mit dem du 01:06:27.691 --> 01:06:33.131 hauptsächlich semistatische Daten anschaust. Entweder Sachen, die aus einem JSON kommen, 01:06:33.131 --> 01:06:36.052 oder Sachen, die von einem CMS kommen, fertig. 01:06:36.291 --> 01:06:42.211 Es ist a few. Es ist nicht das, was dir erlaubt, umfangreiche Applikationen zu schicken, die jetzt über 01:06:42.211 --> 01:06:44.289 einen einfachen JSON-Request rausgehen. 01:06:44.757 --> 01:06:47.731 Und du hast teilweise aber die Fälle, wo du das machen musst. 01:06:47.731 --> 01:06:49.529 Es geht gar nicht anders. 01:06:50.032 --> 01:06:51.311 In vielen, vielen Fällen. 01:06:51.959 --> 01:06:55.891 Und darum ist auch der Großteil der Demos oder Projekte, die damit betrieben werden 01:06:55.891 --> 01:06:58.990 oder gezeigt werden, Webseiten und Blogs. 01:06:59.611 --> 01:07:04.951 Und da musst du dich halt fragen, ist das dann den ganzen Aufwand von dem Framework, 01:07:04.951 --> 01:07:10.491 steht das dafür, wenn du nachher sowieso nur deine keine Ahnung 50-100 HTML Seiten hast, 01:07:10.801 --> 01:07:13.611 aber der Klick von A nach B geht halt ein bisschen schöner. 01:07:14.069 --> 01:07:21.171 Also ja, ich glaube das ist gerade die Britulie, in der wir sind, die auch die Diskussion anregt. Punkt. 01:07:22.567 --> 01:07:29.580 Von dem her, also ja, also spannend. Es ist eine richtig, richtig schöne und interessante Feststellung für dich. 01:07:30.003 --> 01:07:36.187 Fällt mir sehr gut. Ja, naja, das Ding ist halt eben, ist ja weiterhin irgendwie so, für was nützlich, das React. 01:07:36.502 --> 01:07:41.670 Also in meinem konkreten Fall ist so das User Interface, wie es sich darstellt und wie man da drin rumklickt. 01:07:42.642 --> 01:07:50.377 Das ist halt eine mega komplexe Angelegenheit mit irgendwie, da ist Track and Draft drin und da sind irgendwelche Dinge, die initialisiert werden, API Requests. 01:07:50.377 --> 01:07:52.229 Das ist halt wirklich eine Single-Page-Application. 01:07:52.301 --> 01:07:54.147 Mit dem Gramm bin ich ja auch einverstanden. 01:07:54.912 --> 01:08:01.377 Aber dass halt irgendwie dann sozusagen das Backend darunter leidet und dadurch eingeschränkt ist, dass ich halt im Frontend 01:08:01.417 --> 01:08:06.390 diesen komplizierten Klumpatsch habe, da geh ich halt nicht mit. 01:08:06.737 --> 01:08:11.857 Okay, die Leute, die sich mit React einen Blog bauen, jeder kann sich auf seine eigene Weise ans Kreuz nageln, 01:08:11.897 --> 01:08:13.097 ist nicht mein Problem. 01:08:13.137 --> 01:08:16.680 Die könnten das sicherlich einfacher haben. Ist ja alles egal. 01:08:17.017 --> 01:08:24.538 Das kriegst du halt eben auch noch hin. Ich nerf halt mehr so weißt du das hat deshalb so das back end auf mein front end irgendwie so direkt wechsel wirkt um, 01:08:25.137 --> 01:08:29.897 server side rendering zu machen dass ich ja gar nicht bräuchte wenn ich den ganzen kram auf, 01:08:30.489 --> 01:08:32.777 sagen wir mal die sinnvollen use cases beschränken würde. 01:08:34.063 --> 01:08:41.877 Mein aktueller schlagplan ist back end pap ich operiere das front end da aus next.js raus und betreibe das als eine normale single page 01:08:41.977 --> 01:08:43.713 application ohne server side rendering, 01:08:44.361 --> 01:08:49.337 Weil so kram wie der landing page und ein login formular mache ich halt irgendwie damit pap das kommt vom server das geht ohnehin schnell, 01:08:50.051 --> 01:08:50.942 Und wenn ich halt eingeloggt bin, 01:08:52.121 --> 01:08:54.534 Man wartet halt drei Sekunden bis das Ding sich initialisiert hat. 01:08:55.083 --> 01:08:55.470 Ja. 01:08:56.740 --> 01:09:03.670 Das ist mein Plan, weil, äh, nee, ey, nee. Das Spannende ist aber die Alternative, vielleicht bleiben wir noch ganz kurz dort. 01:09:03.670 --> 01:09:08.064 Wir kommen heute sicher zu TypeScript, ich bin mir hundertprozentig sicher, wir schaffen das. 01:09:08.226 --> 01:09:12.583 Aber die Alternative dazu ist ja, du sagst, es gibt andere Tools für einen Blog, ne? 01:09:13.448 --> 01:09:22.990 Und ich hab mir jetzt geschworen, ich möchte meinen nächsten Blog ohne einem Charscript-basierten Blog-Framework schreiben. 01:09:22.990 --> 01:09:27.890 Ich nenne es jetzt mal Blog-Framework. Also es fallen daraus Dinge wie Next, es fallen Dinge raus wie Next, es fallen Dinge 01:09:27.890 --> 01:09:33.610 raus wie Eleventy, was meine aktuelle Webseiten laufen drauf und ich find's cool, man kann 01:09:33.610 --> 01:09:37.350 coole Sachen damit machen, es macht irrsinnig viel Sinn, aber es fällt auch Astro raus 01:09:37.350 --> 01:09:42.750 und alles andere, weil ich hab nicht vor, dass ich diese Webseite, ich bin jetzt nebenberuflich 01:09:42.750 --> 01:09:48.557 selbstständig Webseiter, dass ich mich da auch nur um ein bisschen Maintenance kümmere. 01:09:49.097 --> 01:09:52.810 Hab ich einfach nicht vor. Und das Problem ist, so wie du einen NPM Install machst, 01:09:52.810 --> 01:09:56.200 hast du einfach technical dept da und du bist im maintenance mode. 01:09:56.596 --> 01:10:04.810 Mit der ersten Installation einer dependency. Und jetzt haben wir andere Sachen angeschaut und wow, 01:10:04.810 --> 01:10:07.830 die sind halt alle im Stich gelassen worden in den letzten Jahren. 01:10:08.236 --> 01:10:18.110 Sämtliche damals populäre heute vielleicht nicht mehr Seitengeneratoren oder alles was von irgendeiner anderen Programmiersprache kommt, 01:10:18.110 --> 01:10:22.910 die Beineres produzieren kann, wie Hugo oder Solar, das ist in Rust geschrieben und so weiter, 01:10:22.910 --> 01:10:29.790 die sind entweder nicht dort oder nicht mit dem Interesse oder mit einer eigenen Komplexität, 01:10:29.790 --> 01:10:35.830 die schlecht dokumentiert ist. Also es hat sich einfach die Szene komplett auf diese 01:10:35.830 --> 01:10:39.470 JavaScript Tools gelegt und der Rest ist einfach ausgetrocknet. Ist irrsinnig, bitte, 01:10:39.470 --> 01:10:43.910 ich bin jetzt bei dem Punkt, wo jeder von uns irgendwann noch mal in seinem Leben ist, 01:10:44.236 --> 01:10:50.790 schreibe ich mir's halt selbst. Und vor dem hab ich eigentlich noch mehr Angst, 01:10:50.790 --> 01:10:57.430 als vor einem NPM-Install. Naja, das Ding ist halt, ein statischer Seitengenerator ist glaube ich, 01:10:57.430 --> 01:10:59.030 Das ist, glaube ich, echt so... 01:11:00.548 --> 01:11:06.543 Weißt du, du hast ein Flugzeug und das fliegt halt hoch. Und wenn es halt hoch fliegt und der Luftdruck irgendwie geringer ist und so. 01:11:07.156 --> 01:11:09.558 Da muss das halt irgendwie so seine Geschwindigkeit ziemlich genau halten, 01:11:09.598 --> 01:11:12.478 weil sonst wird es halt eben zu schnell und dann fällt es auseinander oder zu langsam 01:11:12.518 --> 01:11:14.238 und dann reißt die Strömung ab und das fällt runter. 01:11:14.278 --> 01:11:15.473 Das nennt man die Coffin Corner. 01:11:16.031 --> 01:11:21.278 Und ich glaube, die Coffin Corner von Softwareentwicklung ist der statische Seitengenerator, weil das so, 01:11:21.318 --> 01:11:23.404 du kommst da halt sehr leicht rein. 01:11:24.008 --> 01:11:28.238 So, aber du kommst aus der Nummer halt nie wieder raus. Es ist halt so einfach, dass du dir sofort sagen kannst, 01:11:28.278 --> 01:11:30.021 ah, ich weiß, was ich tun muss und was ich haben will. 01:11:30.075 --> 01:11:33.998 Und dann baust du das ein. Und das funktioniert halt so lange, bis du es veröffentlichst und 01:11:33.998 --> 01:11:38.474 irgendwer da draußen das auch anfängt zu nutzen und ein bisschen andere Anforderungen hat. Weil 01:11:38.798 --> 01:11:41.998 dann geht die Komplexität durch die Decke, du musst also warten, was du nicht tun wirst, 01:11:41.998 --> 01:11:46.638 dann wird es abandoned und dann reißt du dich halt ein in die ganze lange Liste von den gerade 01:11:46.638 --> 01:11:51.518 genannten Tools, wo es halt nicht mehr weitergeht. Mein nächstes Blog wird ein WordPress, das sag 01:11:51.518 --> 01:11:57.158 ich dir, ohne irgendwelches JavaScript. Mal bitte ja. Und einfach einen fetten Cash 01:11:57.158 --> 01:12:02.498 davor dann das ist mein aktuelles cms auch das ist ein steinaltes irgendwie pp cms das kriegt hin und 01:12:02.498 --> 01:12:07.178 wieder noch ein security update das ist gänzlich schrecklich das backend ist irgendwie mit gott 01:12:07.178 --> 01:12:11.338 wie heißt es denn ich erinnere mich schon gar nicht mehr bei so ein altes javascript 01:12:11.338 --> 01:12:15.738 UIToolkit, also irgendwie so eine Generation nach jQuery UI, aber nur nach dem gleichen Paradigma. 01:12:16.761 --> 01:12:23.782 Schlimm zu bedienen ganz schrecklich alles ist grausam aber weißt du wie xjs oder so das war es ja. 01:12:25.286 --> 01:12:31.966 So also kann ich auf mobile nicht benutzen alles blabla blabla aber weißt du das liefert halt html seiten aus und hat den genannten fetten cash davor, 01:12:32.533 --> 01:12:37.651 Es lädt halt super schnell ich muss nichts tun und da will ich halt gerne wieder hin nur in zukunft mit irgendeinem ding was halt ein 01:12:37.651 --> 01:12:39.651 bisschen besser support ist und vielleicht ein paar mehr 01:12:40.059 --> 01:12:43.091 Sicherheitsupdates bekommt das muss ich halt irgendwann mal alles nach wordpress migrieren 01:12:43.390 --> 01:12:48.224 Aber einfach nur weil ich habe halt für den ganzen Kram keine Zeit mehr. 01:12:48.818 --> 01:12:57.091 Ich bin ein alter Mann, ich habe keine Zeit für den Scheiß. Und du sagst wieder was ganz richtiges, also danke an alle Hörerinnen und Hörer. 01:12:57.091 --> 01:13:01.412 Ihr habt jetzt wieder mal 30 Minuten alte Männer beschweren sich, dass Samas alles besser war, gehört. 01:13:01.491 --> 01:13:06.741 Es hat schon einen Grund gegeben, warum ich nicht mehr beim Podcast dabei bin. 01:13:07.039 --> 01:13:12.170 So ist es ja nicht. Es sind ja nicht die Alten, es ist ja nicht früher war alles besser, 01:13:12.287 --> 01:13:18.851 sondern wir haben heutzutage Alternativen, die wohnen halt nicht so direkt in dem von uns wahrgenommenen Mainstream. 01:13:19.002 --> 01:13:23.571 Weil, ich mein, ist ja nicht so, dass so was wie WordPress nicht weiterentwickelt würde. 01:13:23.891 --> 01:13:27.861 Oder so was wie Laravel. Das spielt ja wirklich die ganze PHP-Klavier-Tour einmal runter. 01:13:28.291 --> 01:13:33.131 Und das ist ja supermodern mit Package-Manager und... Docker-Deployment, blablabla. 01:13:33.415 --> 01:13:39.851 Das ist ja von der Oberfläche, von der User-Experience her. Was kriegst du alles geliefert und was kannst du alles tun? 01:13:40.761 --> 01:13:44.695 Auf einer stufe mit dem ganzen next.js universum du kriegst das hier ein du generiert das hin da 01:13:44.851 --> 01:13:48.611 ist hallo weltrind rückst auf den knopf das wird die ploid du schmeißt da irgendwie fünf dollar 01:13:48.611 --> 01:13:52.451 rüber und dann läuft die kiste das ist ja das gleiche das ist halt nur mit aller technologie 01:13:52.451 --> 01:13:59.051 gebaut aber halt eben mit aller technologie die halt einfach besser abgehangen ist einfach und 01:13:59.051 --> 01:14:02.611 die halt schon so ich glaube die hatten die ganzen fehler die jetzt aktuell gemacht werden schon 01:14:02.611 --> 01:14:07.451 gemacht und hat so dann auch wieder zurückgerudert und war wahrscheinlich nie mit dieser großen 01:14:07.451 --> 01:14:13.484 Explosion an an Nutzern und Nutzern konfrontiert. Das weiß ich nicht. 01:14:15.654 --> 01:14:20.304 Es gibt ja durchaus Perlen und es hat ja durchaus Perlen gegeben im JavaScript-Ökosystem, 01:14:20.304 --> 01:14:24.017 aber es ist halt einfach irre durch NPM zu wandern. 01:14:24.314 --> 01:14:31.606 Es ist einfach Wahnsinn, was da passiert. Und, ja, aber wir kennen die Probleme, das ist es. 01:14:31.744 --> 01:14:35.104 Also gut, vielleicht beschweren Sie nicht, alte Männer, dass damals alles besser war, 01:14:35.104 --> 01:14:39.424 vielleicht haben wir halt einfach wirklich nicht mehr die Zeit für den Mist. 01:14:39.424 --> 01:14:44.064 Weil damals war meine Toleranz gegenüber neuen Technologien weitaus größer. 01:14:44.425 --> 01:14:51.681 Also, ja, und du hast halt auch möglicherweise mit möglicherweise weniger Erfahrung nicht ganz so viel Idee davon, wie es woanders aussehen könnte. 01:14:52.356 --> 01:15:00.064 Ja, das stimmt. Ich meine, ich bin ja ich bin ja auch sehenden Auges in Next.js reingerannt und dachte, so macht man das halt eben. 01:15:00.064 --> 01:15:05.878 Und so Krams wie halt irgendwie so Scaffolding und Postrequest gibt es halt nicht mehr. 01:15:06.064 --> 01:15:13.809 Finde dich halt damit ab und dann bin ich zum Ergebnis gekommen, dass äh nee will ich aber jetzt haben. 01:15:14.064 --> 01:15:24.584 Oh wey. Kann ich kriegen. So, so viel zum Intro. Genau, das war jetzt das Intro und ich glaube, es könnte 01:15:24.584 --> 01:15:27.784 mir endlich über TypeScript reden oder? Gibt es da eigentlich irgendwas zu sagen? 01:15:27.784 --> 01:15:34.384 Weiß nicht, wollen wir jetzt nach dem Vorgeplänkel vielleicht so die Einleitung in die Sendung machen? 01:15:34.856 --> 01:15:39.222 Ja, genau. Also, die Sabine wird sicher entscheiden, was sie jetzt mit der letzten halben Stunde macht. 01:15:42.453 --> 01:15:46.384 Genau, vielleicht kommt es davor, vielleicht kommt es danach, vielleicht kommt es irgendwann. 01:15:47.384 --> 01:15:51.024 Aber jetzt können wir die Einleitung machen. auch Bonus Content wird das daraus erlöst oder so. 01:15:53.040 --> 01:16:16.080 Music. 01:16:18.850 --> 01:16:20.362 Beep! Beep! Beep!


fyyd: Podcast Search Engine
share








 March 17, 2023  1h16m