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!