WEBVTT

00:00:00.017 --> 00:00:03.277
Was ist der einfache Weg? Wenn ich meine Daten richtig modele,

00:00:04.137 --> 00:00:07.317
dann sind die Outcomes auch automatisch richtig.

00:00:07.557 --> 00:00:11.017
So ein ISO-Standard, wenn sich da was tut, wenn sich da was erweitert,

00:00:11.277 --> 00:00:15.597
dann bedeutet das Millioneninvestitionen in der Industrie.

00:00:16.077 --> 00:00:20.137
Ich meine, es gibt ja immer die Frage, warum habt ihr überhaupt dieses Plain-Präfix genommen?

00:00:20.677 --> 00:00:23.877
Und da kommt es dann wieder darauf an, dass es um Entwicklerfreundlichkeit,

00:00:23.997 --> 00:00:25.257
um Lernfreundlichkeit geht.

00:00:25.717 --> 00:00:28.917
Wir wollten dem Erklärbären quasi das Leben einfacher machen.

00:00:54.961 --> 00:01:00.701
Revision 708. Wir sind heute zu dritt am Start. Da hätten wir aus dem Team einmal

00:01:00.701 --> 00:01:02.821
den Peter. Hallo Peter. Halli, hallo, hallo.

00:01:03.641 --> 00:01:07.581
Ich bin der Shep und wir haben wieder einen Gast und das ist heute der Philipp Dunkel. Hallo Philipp.

00:01:08.541 --> 00:01:13.281
Servus. Philipp, du warst noch nie bei uns und ich freue mich auch sehr, dass du da bist.

00:01:13.841 --> 00:01:17.081
Kannst du einmal kurz sagen, wer du bist und was du machst?

00:01:17.081 --> 00:01:21.261
Ah, ich bin Entwickler,

00:01:21.581 --> 00:01:30.141
API-Constructor und Mädchen für alles bei Bloomberg momentan und habe die letzten

00:01:30.141 --> 00:01:33.861
neun Jahre mit vielen, vielen, vielen anderen damit verbracht,

00:01:34.201 --> 00:01:42.841
die Welt von JavaScript durcheinanderzubringen und unter anderem Datum und Uhrzeit beizubringen.

00:01:44.261 --> 00:01:50.741
Genau, vielleicht zum Hintergrund. Bloomberg kennt man ja so als News-Firma oder Media-House,

00:01:50.921 --> 00:01:55.201
aber ihr macht eben irgendwie viel im Web und habt da hohe Ansprüche und darum

00:01:55.201 --> 00:01:59.381
ist es irgendwie passiert, dass ihr euch eben da auch engagiert.

00:02:00.001 --> 00:02:03.221
Ja, nicht gerade. Bloomberg ist eigentlich eine Technik-Company.

00:02:03.661 --> 00:02:08.501
Eine von den Großen, nur kennt man es nicht, weil es kein Customer-Produkt ist,

00:02:08.921 --> 00:02:10.081
kein Endkunden-Produkt.

00:02:10.977 --> 00:02:16.897
Das Hauptprodukt ist eigentlich eine Softwarelösung für die Finanzindustrie im Groben und Ganzen.

00:02:17.637 --> 00:02:22.297
Und die Technologie, auf der das basiert, ist alles wieder Webtechnologie.

00:02:22.477 --> 00:02:25.697
Also gar nicht so sehr, wie wir im Web unterwegs sind, das auch.

00:02:26.217 --> 00:02:31.717
Aber das ist nur die Spitze des Eisbergs. Dahinter ist noch ein Riesengewulst

00:02:31.717 --> 00:02:39.357
an Webtech-basierten Bezahlprogrammen, die die Finanzindustrie wählen.

00:02:40.137 --> 00:02:43.637
Ja, ich hatte das schon mitbekommen, das ist so mehr so Bleeding-Edge-Kram oder

00:02:43.637 --> 00:02:48.017
so, sagen wir mal, Special-Interest-Dinge, die halt nicht die Masse brauchen,

00:02:48.317 --> 00:02:52.517
aber die eben dann, also SVG, glaube ich, habt ihr auch mal.

00:02:53.117 --> 00:02:58.537
Und Hintergrundinformationen, die halt diese Menschen brauchen,

00:02:58.577 --> 00:03:02.757
ich verstehe es ja auch nicht, ich gebe ihnen nur die Information, also. Ja.

00:03:04.513 --> 00:03:07.793
Genau, bald brauchen wir keine UIs mehr, da haben wir ja KI,

00:03:07.973 --> 00:03:09.733
die haben das nicht nötig. Genau, ja.

00:03:13.713 --> 00:03:18.953
Weil Technik verstehen, ist ja vollkommen überflüssig. Wer braucht das? Das macht ja die KI.

00:03:20.093 --> 00:03:26.973
Und kurz danach atmet und lebt die auch. Meine Frau ist schon lange mit der KI weggelaufen.

00:03:28.253 --> 00:03:32.053
Und dann hören wir alle auf. Vielleicht sind wir auch alle KI,

00:03:32.193 --> 00:03:35.133
wer weiß. Ihr könnt uns ja nicht sehen, ihr Hörer. Innen.

00:03:35.593 --> 00:03:41.093
So. In Wirklichkeit mehr. Ja, der Titel gibt es ja auch schon wieder her.

00:03:41.353 --> 00:03:49.233
Also wir wollen über einen neuen API-Themenkomplex sprechen, nämlich Temporal.

00:03:49.993 --> 00:03:53.933
Anlass war, dass ich, da hatten wir auch hier im Podcast ein bisschen Werbung

00:03:53.933 --> 00:03:59.373
für gemacht, dass ich die State of the Browser-Konferenz remote per Video verfolgt habe.

00:03:59.373 --> 00:04:06.413
Und da hat dein Kollege Jason Williams einen Vortrag über Temporal API gehalten

00:04:06.413 --> 00:04:09.713
und den fand ich super, sehr interessant.

00:04:10.013 --> 00:04:14.233
Ich habe mich damit auch noch nicht so viel beschäftigt und dann sah ich irgendwann

00:04:14.233 --> 00:04:16.273
auf einem Slide einen Namen auftauchen,

00:04:16.653 --> 00:04:19.173
also seine Teamkollegen und da war ein Name dabei, wo ich dachte,

00:04:19.333 --> 00:04:23.133
ah, Moment mal, das könnte jemand sein, den man in einen deutschsprachigen Podcast

00:04:23.133 --> 00:04:25.093
wohl einladen könnte und das warst du.

00:04:25.753 --> 00:04:31.713
Genau, und so kam es, dass du hier bist. Und genau, wir wollen heute über Temporal sprechen.

00:04:32.573 --> 00:04:37.653
Genau, Jason ist, also diese Slide waren jetzt weniger Teamkollegen,

00:04:37.753 --> 00:04:39.673
weil das suggeriert, dass das alles Bloomberger waren.

00:04:40.493 --> 00:04:45.793
Das war die Liste der Champions von Temporal bei TC39.

00:04:47.284 --> 00:04:52.464
Da sind dabei Maggie Pint, damals von Microsoft,

00:04:52.884 --> 00:04:57.864
Brian Trollson, damals Microsoft, da ist Matt Johnson, da ist,

00:04:58.024 --> 00:05:01.444
also, wie gesagt, da gibt es eine ganze Liste und es lohnt sich wirklich,

00:05:01.624 --> 00:05:05.104
die alle durchzugehen, denn das sind jeden einzelne geniale Menschen.

00:05:05.244 --> 00:05:09.544
Da sind Menschen von Google dabei, da sind Menschen von, da ist Amber dabei,

00:05:09.644 --> 00:05:13.444
der das für Firefox implementiert hat, da sind Menschen über die ganze Welt

00:05:13.444 --> 00:05:15.704
verstreut und über alle Interessenssagen verspreut.

00:05:16.284 --> 00:05:20.104
Da ist Shane dabei, der macht Internationalization bei Google.

00:05:20.284 --> 00:05:22.124
Also eigentlich was ganz anderes wieder.

00:05:22.804 --> 00:05:27.424
Also eher ein Collaborate. Genialen und netten Menschen mit Fokus auf genial.

00:05:28.444 --> 00:05:32.444
Das finden wir selten. Und die eben, wie gesagt, über die letzten neun Jahre

00:05:32.444 --> 00:05:37.644
teilweise immer wieder rein und dann wieder oder dann doch wieder raus,

00:05:37.724 --> 00:05:39.344
weil neun Jahre hält ja kaum keiner durch.

00:05:40.364 --> 00:05:45.684
Und so kam eben dann Jason auch vor, naja, ich bin vor acht Jahren dazugestoßen,

00:05:45.764 --> 00:05:52.284
Jason for 6 oder so in der Größenordnung herum, um Temporal wirklich durchzubringen.

00:05:52.464 --> 00:05:56.304
Und die letzten zwei Jahre waren bei mir eigentlich mehr andere Leute treten,

00:05:56.424 --> 00:05:59.924
als selber noch was tun, während Jason über,

00:06:00.664 --> 00:06:07.364
Temporal RS, das ist die Rust-Library, die auch V8 und Boa und etliche andere

00:06:07.364 --> 00:06:09.384
jetzt verwenden, um für die Implementierung,

00:06:10.184 --> 00:06:15.844
da viel koordiniert hat, weil Jason hat ja ursprünglich auch den Boer Browser.

00:06:17.784 --> 00:06:23.384
Die Boer JavaScript Engine in Rast geschrieben, vor 100 Jahren.

00:06:24.840 --> 00:06:29.800
Und so war er jetzt quasi die letzten zwei Jahre mehr aktiv involviert und ich

00:06:29.800 --> 00:06:30.840
habe mehr Leute getreten.

00:06:31.900 --> 00:06:35.800
Und da ist dann klar, nee, Jason muss die Reden halten. Also,

00:06:35.880 --> 00:06:38.120
absollend kann er das besser und ich habe es nicht mehr in Not.

00:06:42.120 --> 00:06:45.280
Diese Revision von Working Draft wird euch präsentiert von Midwald.

00:06:45.500 --> 00:06:48.040
Next Level Container Hosting für eure Projekte.

00:06:48.440 --> 00:06:52.100
Wie euch bestimmt nicht entgangen ist, reden alle überall und ständig über Automatisierung

00:06:52.100 --> 00:06:54.760
und Self-Hosting. Und das klingt auch immer alles voll super,

00:06:55.140 --> 00:06:56.600
wenn's denn mal eingerichtet ist und läuft.

00:06:56.740 --> 00:07:00.280
Nur über diesen Schritt redet fast keiner, weil er meist kompliziert und anstrengend ist.

00:07:00.440 --> 00:07:04.500
Aber es gibt eine Ausnahme und das ist Mittfalls Container-Hosting und das funktioniert,

00:07:05.441 --> 00:07:09.661
Erster Schritt, in Mittwald's M-Studio einloggen. Ganz einfach und bequem direkt im Browser.

00:07:10.221 --> 00:07:13.601
Zweitens, fünf Minuten für die Konfiguration eures Containers aufwenden.

00:07:13.801 --> 00:07:16.881
Mehr Zeit braucht ihr nicht, denn ihr könnt die meisten Vorschläge für Entry-Points

00:07:16.881 --> 00:07:19.141
und Umgebungsvariablen einfach direkt übernehmen.

00:07:19.721 --> 00:07:23.081
Dritter Schritt, äh, euer Container läuft. Ihr seid fertig. Das war's.

00:07:23.221 --> 00:07:27.021
Von Nerds für Nerds bringt euch Mittwald das Beste, was Container-Hosting zu bieten hat.

00:07:27.181 --> 00:07:30.021
Nämlich eure Eintrittskarte ins Automatisierungs-Wunderland.

00:07:30.241 --> 00:07:34.481
Deployt ganz einfach, was ihr wollt, wie ihr wollt. Und alles dazu findet ihr

00:07:34.481 --> 00:07:38.161
auf mitwald.de slash workingdraft.

00:07:38.261 --> 00:07:43.481
Das war nochmal mitwald.de slash workingdraft.

00:07:43.641 --> 00:07:47.321
Wir danken Mitwald für die Unterstützung von dieser Revision von Working Draft.

00:07:50.681 --> 00:07:56.841
Genau, und vielleicht können wir mal starten damit. Also Temporal ist eine API,

00:07:57.221 --> 00:08:05.781
die uns den Umgang mit Daten und Zeit, Zeiträumen, Zeitmomenten und so besser

00:08:05.781 --> 00:08:07.641
gestaltet, als das bisher der Fall ist.

00:08:07.901 --> 00:08:12.541
Besser? Oder meinst du jetzt irgendwie erstmals erträglich? Eigentlich erstmals erträglich, genau.

00:08:13.661 --> 00:08:19.781
Bislang gab es dafür ja die Date-API oder das Date-Objekt.

00:08:20.381 --> 00:08:26.501
Und das gab es ja, glaube ich, schon seit JavaScript in den zehn Tagen zusammengezimmert wurde.

00:08:28.441 --> 00:08:32.821
Da gibt es ja die, da gibt es nicht, wo sie gesagt haben, wir haben nur zehn

00:08:32.821 --> 00:08:34.561
Tage, wir haben keine Zeit, was zu machen.

00:08:34.941 --> 00:08:39.181
Also klauen wir eins zu eins Java-Date, Java-YouTube-Date.

00:08:41.071 --> 00:08:46.511
Und Java hat dann ein Jahr später Java-Util-Date eliminiert, weil untauglich.

00:08:46.831 --> 00:08:49.711
Und wir haben damit noch 20 Jahre gelebt, ne?

00:08:50.411 --> 00:08:53.511
Genau, ich glaube, ich hatte irgendwie, oder vielleicht hat Jason es auch im

00:08:53.511 --> 00:08:58.531
Talk gesagt, also bei Java ist schon quasi der Nachfolger von dem Nachfolger irgendwie am Start.

00:08:59.611 --> 00:09:05.611
Und genau, in JavaScript-Land waren wir sozusagen festgenagelt auf dieses alte

00:09:05.611 --> 00:09:11.991
und auch eben in großen Teilen unzulängliche Date-Objekte festgelegt.

00:09:12.011 --> 00:09:14.571
Ich meine, in der Praxis warst du ja festgenagelt auf irgendwelche Libraries,

00:09:14.651 --> 00:09:15.671
die das wegabstrahiert haben.

00:09:16.471 --> 00:09:21.011
Genau, das war dann der nächste Schritt, um sozusagen dieses Problem dann so

00:09:21.011 --> 00:09:26.831
abzumildern, dass man eben gesagt hat, da steckt so viel drin und so viel Komplexität,

00:09:27.131 --> 00:09:30.891
lass uns das in Libraries gießen. Also da gab es ja einige von.

00:09:31.811 --> 00:09:34.331
Ja, aber der Pattern ist vor allem interessant.

00:09:35.671 --> 00:09:41.851
Weil sehr oft ist es ja so, dass quasi geh hin und designe eine API und du hast

00:09:41.851 --> 00:09:43.571
aber eigentlich keine Ahnung, was du designen willst.

00:09:43.631 --> 00:09:46.631
Du weißt zwar den Space und du bist dann für sich smart und gut,

00:09:46.891 --> 00:09:49.711
aber designe einfach mal in die Wüste rein.

00:09:50.811 --> 00:09:57.671
Und der Pattern von Temporal ist da anders, weil Maggie war eine Maintainer von Momentum.

00:09:59.013 --> 00:10:02.153
Genau, die Brücke hätte ich dann nämlich geschlagen. Ah, perfekt.

00:10:02.553 --> 00:10:04.573
Okay, na ja, gut, bauen wir doch gemeinsam eine Brücke.

00:10:05.513 --> 00:10:09.673
Und viele der Ideen, also ich habe mich lange mit Luxon beschäftigt,

00:10:10.633 --> 00:10:12.213
eben um zu schauen, was machen die?

00:10:12.373 --> 00:10:15.073
Was machen die anders? Wie schauen die APIs aus?

00:10:15.773 --> 00:10:21.713
Was brauchen wir eigentlich? Und ich glaube, der wichtigste Wurf von Temporal

00:10:21.713 --> 00:10:24.813
ist gar nicht mal, dass wir jetzt ein neues Date-Objekt haben.

00:10:25.973 --> 00:10:32.813
Also zoned date time kann eigentlich ja alles was du jetzt mal brauchst,

00:10:32.993 --> 00:10:38.153
also ist quasi das Äquivalent des neuen Date Objects, es wäre aber ein absolut

00:10:38.153 --> 00:10:40.433
dramatischer Fehler, wenn man jetzt einfach hergeht und sagt,

00:10:40.553 --> 00:10:43.193
ach okay, das kann eh alles, was ich brauche, jetzt nutze ich nur mehr das,

00:10:44.293 --> 00:10:50.753
denn der Kern Fortschritt meines Erachtens nach, ist, dass es erstmals möglich ist,

00:10:51.993 --> 00:11:00.413
Datum, Uhrzeit und dauern, so darzustellen, so abzubilden, wie sie eigentlich

00:11:00.413 --> 00:11:02.093
semantisch richtig sind.

00:11:03.173 --> 00:11:08.553
Und wenn ich das tue, dann lässt mich auch die Temporal API genau nur mehr die

00:11:08.553 --> 00:11:12.913
Dinge tun, also jetzt nicht als Restriktion, sondern im Sinne von,

00:11:12.953 --> 00:11:16.173
was ist der einfache Weg.

00:11:16.173 --> 00:11:20.033
Wenn ich das einmal richtig model, wenn ich meine Daten richtig model,

00:11:20.393 --> 00:11:24.113
dann sind die Outcomes auch automatisch richtig.

00:11:26.759 --> 00:11:30.839
Weil dann passieren mir so Dinge, wenn ich das als Plane Date,

00:11:30.979 --> 00:11:32.639
wenn ich ein Datum als Plane Date händle,

00:11:33.419 --> 00:11:39.499
ja, dann passieren mir solche Dinge wie Philipp Cimento und andere der Champions

00:11:39.499 --> 00:11:46.379
hat da einen Talk, ich glaube letztes Mal in Amsterdam bei der JS Nation gehalten,

00:11:46.799 --> 00:11:50.619
wo er erzählt, ja, er hat ein Hotel gebucht und das war dann für den falschen

00:11:50.619 --> 00:11:54.879
Tag, weil er war in Australien, die das gebucht haben und das Hotel aber nicht.

00:11:54.879 --> 00:12:00.619
Und dann ging das über die Datumsurzheitsgrenze und Date hat das über das Jahr geschoben.

00:12:00.999 --> 00:12:04.039
Das kann dir gar nicht passieren, wenn ich das als Datum melde,

00:12:04.099 --> 00:12:07.179
weil ein Datum hat keine Zeitzone.

00:12:08.279 --> 00:12:13.139
Und dann schaffst du es automatisch richtig quasi. Und das ist eigentlich der große Fortschritt.

00:12:13.499 --> 00:12:17.059
Viel mehr als nur ein neues Date-Objekt quasi.

00:12:17.919 --> 00:12:24.019
Ja. Um nochmal auf die Libraries zurückzukommen, die dann sozusagen eingesprungen

00:12:24.019 --> 00:12:28.059
sind für das unzulängliche Date-Objekt, also Moment.js, hast du ja gerade gesagt.

00:12:28.559 --> 00:12:36.299
Maggie war da Teil des Projektes, die ist dann auch als Fachfrau in den Temporal

00:12:36.299 --> 00:12:38.759
Working Group dann gejoint.

00:12:38.979 --> 00:12:42.019
Die konnte dann natürlich ihre Erfahrungswerte von der Library einbringen.

00:12:42.059 --> 00:12:48.019
Und ihr Mann Matt Thompson, war ja auch bei Moment eine Zeit lang.

00:12:48.799 --> 00:12:52.399
Dann hast du Luxon erwähnt eben, das war ja auch eine. Und dann gibt es ja noch

00:12:52.399 --> 00:12:56.599
Date Functions, das ist ja quasi die dritte Library im Bunde, oder? Gibt's noch eine?

00:12:57.119 --> 00:13:01.019
Ich glaub, die waren so die verbreitetsten, würd ich sagen, oder DateFNS.

00:13:01.479 --> 00:13:06.059
Ja, ja, ich glaub, das war's so im Großen und Ganzen, ne? Mhm.

00:13:07.134 --> 00:13:12.654
Genau, und ich glaube, die Maggie hat doch auch diese ganze Temporal-API-Geschichte

00:13:12.654 --> 00:13:14.574
dann letztlich losgetreten.

00:13:15.054 --> 00:13:21.174
Ja, genau. Das war so nach der Realisierung, ich glaube, da gibt es so eine

00:13:21.174 --> 00:13:24.614
Story, die Frage ist, ob es wahr ist, ich habe keine Ahnung.

00:13:24.914 --> 00:13:26.354
Ja, also angeblich war er auf der Jazz.

00:13:26.734 --> 00:13:28.754
Im Zug durch Europa.

00:13:30.134 --> 00:13:33.574
Also, das geht eigentlich, wir können das eigentlich nicht mehr halten,

00:13:33.594 --> 00:13:38.634
dieses ganze Momentszeug. das gehört eigentlich Kiefer vergraben im Browser.

00:13:39.074 --> 00:13:42.794
Und so kam dann der Standards-Track los.

00:13:43.254 --> 00:13:47.254
Genau, aber eben ein Aspekt, warum das in den Browser gehört,

00:13:47.414 --> 00:13:50.534
ist, dass es, selbst wenn es als Library perfekt funktioniert,

00:13:51.494 --> 00:13:52.994
sie einfach wahnsinnig groß ist.

00:13:53.334 --> 00:13:58.554
Also ich weiß nicht, wie viele? 300 Kilobyte oder was? Also alleine die Moment.js oder sowas?

00:13:59.334 --> 00:14:03.014
Genau, aber bei den 300-Kader sind noch keine Zeitzondaten dabei.

00:14:03.974 --> 00:14:07.234
Also da kommen ja dann noch die Datenpackages dabei und wenn du nicht weißt

00:14:07.234 --> 00:14:13.234
vorher, welche Zeitzone du denn brauchen wirst, weil woher,

00:14:13.734 --> 00:14:20.314
da kommt dann der Benutzer aus Afghanistan und plötzlich hast du jetzt die Zeitzone nicht da.

00:14:21.014 --> 00:14:24.834
Das kommt ja noch dazu, also da kommen dann teilweise Megabyte zusammen, Schatz, ne?

00:14:26.282 --> 00:14:34.722
Naja, und genauso wie wir die Intel API haben, um alle Themen hinsichtlich Internationalisierung,

00:14:34.842 --> 00:14:37.022
Lokalisierung irgendwie abzuwickeln,

00:14:37.442 --> 00:14:40.622
was früher auch Libraries erledigt haben, heute auch noch wahrscheinlich,

00:14:40.962 --> 00:14:47.642
gibt es eben jetzt dann Temporal, was die Erfahrung, die sozusagen die Leute,

00:14:47.702 --> 00:14:54.442
die diese Libraries gemacht haben, wie auch deren Benutzende einfließen lässt in den Webstandard.

00:14:54.442 --> 00:14:58.202
Also so paving the cow path mäßig. Genau.

00:14:59.042 --> 00:15:03.982
Genau. Und in dem Zusammenhang finde ich Intel immer so spannend,

00:15:04.222 --> 00:15:10.662
weil die Zusammenarbeit mit den Intel-Menschen, also da war sehr viel Overlapped with.

00:15:12.902 --> 00:15:20.402
ECMO 402, das ist der, 402 ist quasi die Internationalization-Gruppe. Denn,

00:15:21.547 --> 00:15:26.847
wie man ein Datum formatiert, in welchem Land, in welcher Sprache.

00:15:27.887 --> 00:15:31.847
Und es ist aber nicht nur Datum, sondern es macht ja einen Unterschied,

00:15:31.967 --> 00:15:35.227
ob das ein Datum ist, ob das eine Uhrzeit ist, ob das beides ist,

00:15:35.787 --> 00:15:40.587
ob das in der Zeitzone ist, ob das in meiner Zeitzone ist, in einer anderen Zeitzone ist.

00:15:40.667 --> 00:15:46.407
All diese Dinge sind ja in der Localization dann drinnen.

00:15:48.047 --> 00:15:52.747
Also diese Zusammenarbeit ist auch nochmal intensiv. Also nur vielleicht auch

00:15:52.747 --> 00:15:56.087
halt einer der Gründe, warum das alles so lange dauert, ne? Ja, klar.

00:15:57.247 --> 00:16:03.327
Ja, das sind halt so Aspekte, die auch Date ja überhaupt nicht abdecken konnte,

00:16:04.627 --> 00:16:13.367
wie, dass man Offset ja angeben kann zur UTC-Zeit, und damit sozusagen zwar

00:16:13.367 --> 00:16:17.447
so eine Timezone hat, aber man noch immer nicht weiß,

00:16:18.067 --> 00:16:20.167
hey, wie sieht es denn eigentlich mit Sommer- und Winterzeit aus?

00:16:20.887 --> 00:16:24.767
Wann schlägt die zu? Wann ist Sommerzeit? Wann endet die?

00:16:25.027 --> 00:16:28.227
So diese ganzen Infos sind ja nicht drin. Das heißt also auch,

00:16:28.407 --> 00:16:37.727
da kommt ja dann noch deutlich mehr dann dazu, was so quasi Lokalisierungsdaten angeht.

00:16:39.347 --> 00:16:44.147
Genau. Das ist auch einer der Gründe, warum es zum Beispiel Custom Time Zones gibt.

00:16:45.507 --> 00:16:49.567
Eine der Funktionalitäten von Temporal ist, dass du Custom Time Zones einrichten

00:16:49.567 --> 00:16:54.287
kannst, wo du als Programmierer wirklich sagst, okay, und das sind die Regeln.

00:16:54.287 --> 00:16:58.747
Das sind für so Fälle wie in, ich glaube in Marokko ist das,

00:16:59.627 --> 00:17:03.107
da wird jedes Jahr, da geht es jedes Jahr ab in die Sommerzeit.

00:17:03.407 --> 00:17:06.327
Je nachdem wann Ramadan ist, oder? Wenn es dem König zu heiß wird.

00:17:06.847 --> 00:17:11.347
Ah, okay. Für, was natürlich nicht ganz stimmt, ist nicht, wenn es dem König zu heiß wird.

00:17:11.527 --> 00:17:13.867
Ich glaube, das hat mit Ramadan zu tun. Hat mit Ramadan zu tun natürlich,

00:17:14.047 --> 00:17:18.307
aber wenn es dem König zu heiß wird, dann beschließt er, so,

00:17:18.447 --> 00:17:21.187
jetzt machen wir doch mal kurz Nicht-Sommerzeit, weil ich hätte nämlich gerne

00:17:21.187 --> 00:17:23.847
früher am Abend wieder was zu essen.

00:17:25.905 --> 00:17:32.525
Während des Ramadan. Und dann stellt das Parlament eben wie gesagt von heute

00:17:32.525 --> 00:17:36.145
auf morgen, also es geht dann ganz kurzfristig, die Zeitzone um.

00:17:36.225 --> 00:17:39.925
So kurzfristig, dass es natürlich in der Browser-Release niemals reinkommt.

00:17:41.005 --> 00:17:46.125
Und für den Fall kann man dann quasi sagen, okay, normalerweise nehmen die Zeitzone, aber,

00:17:47.285 --> 00:17:52.105
sollte quasi in der Website die Flag gesetzt sein, Achtung, jetzt ist Ramadan

00:17:52.105 --> 00:17:57.905
und die Marokkaner sind unterwegs, dann nimm doch bitte meine Custom-Times und

00:17:57.905 --> 00:18:00.525
die halt jetzt gerade wieder Winterzeit haben.

00:18:01.385 --> 00:18:06.365
Und solche Spielchen gehen dann eben, um wirklich, wirklich solide abzudämmen.

00:18:07.540 --> 00:18:11.520
Ja, da gibt es ja noch so viele andere Merkwürdigkeiten, die man irgendwie einfach nicht weiß.

00:18:11.720 --> 00:18:15.640
Also ich glaube, Brasilien, da ist der irgendwie, der nördliche Teil hat irgendwie

00:18:15.640 --> 00:18:19.460
keine Sommerzeit und der südliche Teil hat Sommerzeit.

00:18:19.940 --> 00:18:23.440
Oder das gleiche gilt auch für australische Bundesstaaten. Da gibt es ja welche,

00:18:23.560 --> 00:18:27.900
die haben das und manche nicht. Also ich glaube, um die Komplexität tatsächlich

00:18:27.900 --> 00:18:30.640
abzubilden, musst du immer sagen, gerade ist das so.

00:18:30.840 --> 00:18:34.680
Im Moment ist es halt so, dass in Brasilien das so ist und so ist und theoretisch

00:18:34.680 --> 00:18:37.800
könnte irgendein Parlament oder Diktator jederzeit sich entscheiden,

00:18:38.060 --> 00:18:41.180
das anders zu machen, weil es halt zu einem guten Punkt halt einfach arbiträr

00:18:41.180 --> 00:18:42.980
ist, wer wann, welche Zeitzone hat.

00:18:43.600 --> 00:18:45.480
Die Briten sind dafür ja bekannt.

00:18:46.360 --> 00:18:50.100
Als ich, also ich habe ja, als einer meiner ersten Taten quasi war,

00:18:50.200 --> 00:18:56.100
schreiben wir mal ein Polyfill für die damalige Version der Temporal APIs,

00:18:56.540 --> 00:19:00.300
damit man mal ein Gefühl dafür kriegt, also bevor wir quasi sagen,

00:19:00.460 --> 00:19:01.880
okay, das ist jetzt in Stein gegossen,

00:19:02.540 --> 00:19:05.200
wollten wir mal ein Gefühl dafür haben, wie kann man damit einfach umgehen,

00:19:05.280 --> 00:19:09.940
wie geht denn das programmatisch, wie funktioniert das, ist das ergonomisch quasi.

00:19:11.420 --> 00:19:17.500
Und ich teste mich verrückt an dem Ding und verstehe nicht, warum kriege ich

00:19:17.500 --> 00:19:21.440
falsche Ergebnisse für meine Zeitzonenberechnung.

00:19:22.300 --> 00:19:26.340
Naja, wo fängt der Programmierer an? In welchem Tatum, in welchem Jahr,

00:19:26.460 --> 00:19:30.920
wenn du erstmal sowas testest, wo fängst du an?

00:19:31.480 --> 00:19:33.800
Am 01.01.1970.

00:19:34.380 --> 00:19:38.080
Natürlich. Weil da hat ja bekanntlicherweise die Zeit begonnen,

00:19:38.820 --> 00:19:40.580
alles vorher ist negativ.

00:19:41.982 --> 00:19:48.902
So, das Problem ist, dass in den Jahren 70 und 71 hat Großbritannien beschlossen,

00:19:48.902 --> 00:19:52.302
den Versuch zu wagen, ohne Sommerzeit zu leben.

00:19:53.342 --> 00:19:58.922
Das heißt, wenn du genau im Jahr 1970 zufällig startest, dann geht dein Test schief.

00:19:59.222 --> 00:20:03.422
Na ja, er geht nicht schief, er passt schon, nur gab es da keine Sommerzeit.

00:20:04.002 --> 00:20:08.062
Das heißt, wenn du dann versuchst, in dem Jahr deine Sommerzeitberechnung in

00:20:08.062 --> 00:20:11.302
London zu testen, ja, viel Glück.

00:20:13.242 --> 00:20:18.062
Da gibt es etliche so Dinge. Während dem Zweiten Weltkrieg haben die Briten

00:20:18.062 --> 00:20:23.642
beschlossen, naja, wir müssen unsere Sommerzeit ändern. Wir gehen zwar auf Sommerzeit,

00:20:23.802 --> 00:20:24.762
aber dann nicht mehr zurück.

00:20:25.342 --> 00:20:28.502
Und im nächsten Jahr haben sie es nochmal gemacht, sodass am Ende des Kriegs

00:20:28.502 --> 00:20:35.142
sind sie drei Stunden früher unterwegs als sonst, um die deutsche Luftwaffe zu verwirren.

00:20:35.362 --> 00:20:38.922
Warum die geglaubt haben, dass man damit die deutsche Luftwaffe verwirrt, frag mich nicht.

00:20:39.922 --> 00:20:47.502
Aber Aber solche Perversionen gibt es auf der ganzen Welt über alle Kulturen.

00:20:47.602 --> 00:20:52.082
Also das sind nicht nur die Marokkaner und Ramana, das sind die Briten und ihre Kriege.

00:20:52.262 --> 00:20:57.502
Wie oft Amerika schon diskutiert hat, Sommerzeit ja oder nein.

00:20:57.962 --> 00:21:01.342
Da gibt es auch Arizona, wie gesagt, hat gar keine Sommerzeit.

00:21:01.482 --> 00:21:06.302
Aber alle Staaten rundherum haben Sommerzeit. Also, ja.

00:21:08.642 --> 00:21:15.242
Das ist viel zu politisch, als dass man sich da sinngemäß einreihen kann. Ähm,

00:21:16.992 --> 00:21:19.892
Und da kommen wir auch zu so Dingen wie Zeitzonenbenennung.

00:21:22.152 --> 00:21:27.172
Heißt das jetzt Kiew oder es ist Kiew? Je nachdem, auf welcher Seite ich da

00:21:27.172 --> 00:21:30.392
jetzt dieses Konflikt konkret stehe.

00:21:31.952 --> 00:21:37.572
Und da wollten wir eigentlich schauen, dass sich auf JavaScript so weit wie möglich aushält.

00:21:38.752 --> 00:21:42.092
Und darum war eine der ersten Entscheidungen, und das war auch nach wie vor

00:21:42.092 --> 00:21:45.252
eine der, also jetzt nicht nur aus dem Grund, eine der großen,

00:21:45.412 --> 00:21:48.952
wichtigen Entscheidungen ist, Wir erfinden die Welt nicht neu.

00:21:49.152 --> 00:21:51.772
Wir verwenden alle Standards, die es dazu gibt.

00:21:52.092 --> 00:21:58.352
Das bedeutet, für Zeitzonen richten wir uns genau nach dem IANA-Schema und nach sonst gar nichts.

00:21:58.512 --> 00:22:03.272
Wir erfinden jetzt nicht Systemzeitzonen wie in Microsoft Windows.

00:22:04.992 --> 00:22:10.412
IANA ist ja dieses Europe-slash-Berlin zum Beispiel, ne? Genau, genau.

00:22:12.312 --> 00:22:16.772
Wir halten uns in unseren Ausgabeformaten. Alles, was ein Sidestring ist,

00:22:17.252 --> 00:22:20.112
der nicht durch die Localization-API geht,

00:22:20.712 --> 00:22:28.372
hat ein ISO 8801-Format, also dieses klassische 4-Tage-Jahr-Strich,

00:22:28.612 --> 00:22:36.212
2-Tage-Monat-Strich, 2-Tage-Tag und dann hinten noch eine Zeit dran.

00:22:36.212 --> 00:22:41.192
Wir halten uns einfach an alle Standards, die es da gibt, damit wir so möglichst

00:22:41.192 --> 00:22:46.292
interoperabel sind und möglichst wenig neu dazu erfinden.

00:22:46.752 --> 00:22:55.352
Weil selbst wenn man möglichst wenig neu dazu erfindet, ist die Dimension des Proposals,

00:22:56.809 --> 00:23:00.929
Immer noch die größte in der Geschichte von JavaScript.

00:23:01.549 --> 00:23:04.249
Größer noch als ES6 damals. Und ES6

00:23:04.249 --> 00:23:07.429
haben wir alle hingefiebert von wegen Error-Functions und was nicht alles.

00:23:08.269 --> 00:23:15.429
In Sachen Tests ist Temporal größer. In Sachen Speck-Text-Länge ist Temporal größer.

00:23:15.969 --> 00:23:18.949
Ja, das war sehr eindrucksvoll im Talk von Jason. Ich glaube,

00:23:19.029 --> 00:23:22.369
da hat er die Menge Tests, die allein auf Temporal entfallen,

00:23:22.389 --> 00:23:25.649
auch mal in so einem Chart gezeigt und die verglichen mit den Tests,

00:23:25.729 --> 00:23:27.089
die man sonst für andere Dinge hat.

00:23:27.729 --> 00:23:31.249
Und es ist wirklich, also dagegen ist alles andere zusammen nix.

00:23:33.189 --> 00:23:38.589
Genau, also wir haben sehr viel Wert auf Vollständigkeit und auf wirklich solide

00:23:38.589 --> 00:23:47.669
und konservativ im Sinne von vorsichtig und progressiv im Sinne von API-weitertragend.

00:23:48.914 --> 00:23:52.014
Genau, da bleibt ja auch genug Arbeit übrig, deswegen macht es total Sinn,

00:23:52.234 --> 00:23:56.214
sich da irgendwie auf bestehende ISO-Standards zu stützen.

00:23:56.834 --> 00:24:01.034
Genau, ich glaube, der Haupt-ISO-Standard ist ja dieser 8601,

00:24:01.514 --> 00:24:02.894
der da eine Rolle spielt.

00:24:02.894 --> 00:24:09.974
Aber da hatte zumindest Jason in seinem Talk erzählt, dass ihr sozusagen beantragt

00:24:09.974 --> 00:24:15.994
habt, dass diese IANA Notation eben, die war nämlich eben nicht Teil dieser,

00:24:16.274 --> 00:24:20.954
also bis zu diesem Zeitpunkt dieser ISO Standards, dass das sozusagen als Update

00:24:20.954 --> 00:24:23.434
aufgenommen wird, dass das eben auch erlaubt wird.

00:24:23.434 --> 00:24:28.494
Und ich glaube, es ist auch so, dass Geräte, die eben noch nicht die Sianer

00:24:28.494 --> 00:24:32.754
Erweiterung kennen, glaube ich, einfach trotzdem das dann parsen können. Das ist halt das Schöne.

00:24:33.394 --> 00:24:36.334
Das ist auch nicht, dass wir erfunden haben, diese Notation.

00:24:37.034 --> 00:24:43.874
Die haben wir abgekupfert. Weil das Problem, dass man die Zeitzone als Zeitzone

00:24:43.874 --> 00:24:51.974
in ISO in 8601 nicht abbilden kann, sondern nur als Offset, ist ja nicht neu.

00:24:52.174 --> 00:24:55.194
Das haben ja andere auch, dieses Problem.

00:24:55.794 --> 00:25:00.914
Und ich bilde mir ein, ich weiß nicht mehr, wer es war.

00:25:02.445 --> 00:25:07.605
War es Oracle? Nicht unsere Erfindung quasi. Ja.

00:25:08.445 --> 00:25:11.645
Date for Java oder irgend so, wer war das? Hat das erfunden.

00:25:13.065 --> 00:25:16.905
Und wir haben nur geschaut, okay, machen wir das auch so?

00:25:17.065 --> 00:25:21.645
Weil das ist das Einzige, was es quasi im Groben und Ganzen gibt,

00:25:22.285 --> 00:25:24.005
um dieses Thema zu lösen.

00:25:24.325 --> 00:25:28.345
Oder was auch nur irgendwie standardisiert ist über die Sprachen hinweg.

00:25:28.465 --> 00:25:34.785
Und wenn Java das macht, okay, ja gut, dann Und dann gibt es zumindest Interoperabilität

00:25:34.785 --> 00:25:38.205
einer auf irgendeine Weise, weil alle anderen machen gar nichts.

00:25:39.305 --> 00:25:42.145
Dann haben wir gesagt, okay, aber wir wollen ja Standards abkupfern.

00:25:42.265 --> 00:25:43.485
Wir wollen ja nicht neu erfinden.

00:25:44.385 --> 00:25:47.445
Dann haben wir festgestellt, nee, das ist noch nirgendwo standardisiert.

00:25:47.645 --> 00:25:48.965
Das haben sie einfach gemacht.

00:25:50.885 --> 00:25:53.745
Und dann haben wir gesagt, okay, das kriegen wir nie durchs Komitee.

00:25:53.905 --> 00:26:01.045
Und insofern ist dann Utschba, es ist dann losgelaufen und hat lange mit ISO und RFC gekämpft.

00:26:01.845 --> 00:26:05.705
Um das auch in den Standard zu bringen. Und es war einer der großen Siege quasi,

00:26:06.765 --> 00:26:08.665
das in den ISO-Standard einzubringen.

00:26:09.945 --> 00:26:13.765
Und das wiederum war dann eine Voraussetzung, damit TC39 dann gesagt hat,

00:26:13.865 --> 00:26:14.985
ja, okay, könnt ihr so machen.

00:26:15.265 --> 00:26:18.425
Also es ist dann quasi die Kettenreaktion der Zeitstandards.

00:26:19.205 --> 00:26:22.845
Und das war ja so am Ende auch so das, was so mit am längsten gedauert hat,

00:26:22.965 --> 00:26:23.805
so in meiner Wahrnehmung.

00:26:24.105 --> 00:26:28.165
Dass so in der letzten Meile das noch irgendwie so durchzubringen,

00:26:28.225 --> 00:26:30.565
der Rest schien da ja schon relativ ausgewürfelt. ausgewürfelt,

00:26:30.865 --> 00:26:32.305
so habe ich es jedenfalls mitbekommen.

00:26:33.665 --> 00:26:39.365
Ja, fühlt sich so an, wenn man es einfach nur beobachtet, wenn man quasi sieht,

00:26:39.505 --> 00:26:43.605
okay, wann haben die damit angefangen, was waren die Bedingungen und was ist

00:26:43.605 --> 00:26:45.125
dann sonst noch am Standard passiert.

00:26:46.425 --> 00:26:51.505
Das war dann aber so Gen-Ende von der Stage-2-Phase.

00:26:52.985 --> 00:26:53.485
Und,

00:26:54.865 --> 00:27:00.045
Die Stage-3-Phase ist ja von außen betrachtet eigentlich kaum sichtbar.

00:27:00.385 --> 00:27:04.645
Weil da tut sich am Standard nichts mehr, also da sollte sich nicht mehr viel tun.

00:27:05.725 --> 00:27:08.825
Da wird nicht mehr groß diskutiert, machen wir es so oder so.

00:27:09.185 --> 00:27:10.725
Da wird nur mehr implementiert.

00:27:12.145 --> 00:27:19.885
Und diese gesamte Stage-3-Phase, mal angefangen mit der phänomenalen Arbeit

00:27:19.885 --> 00:27:27.045
von Amber, der das für Firefox implementiert hat, Dann die ersten Versuche von Frank,

00:27:27.305 --> 00:27:31.225
das für V8 zu machen.

00:27:33.225 --> 00:27:42.245
Frank hat das Ganze dann liegen lassen und hat andere Aufgaben gefunden sozusagen.

00:27:42.245 --> 00:27:48.145
Und dann das über Temporal RS zu implementieren.

00:27:48.925 --> 00:27:54.885
Das ist eine lange Implementierungsphase von mehreren Jahren quasi,

00:27:56.105 --> 00:27:59.625
in der von außen sichtbar jetzt gar nicht so viel passiert.

00:27:59.965 --> 00:28:05.505
Weil das passiert alles bei den Browsern. Das passiert im V8 Repository und

00:28:05.505 --> 00:28:10.245
dort wahrscheinlich im internen oder im Firefox Repository.

00:28:10.405 --> 00:28:14.185
Aber jetzt nicht sonderlich auffällig. Da gibt es nichts Neues,

00:28:14.265 --> 00:28:15.285
da gibt es keine Nachrichten.

00:28:16.305 --> 00:28:18.685
Ich finde, es gibt auch keine, jetzt in dem Sinn.

00:28:20.425 --> 00:28:24.365
Und insofern scheint es, glaube ich, mehr, als es real ist.

00:28:25.525 --> 00:28:29.325
Aber es war vor allem,

00:28:30.992 --> 00:28:39.572
Vor allem viel Warten dabei. Ja. Weil Ushwal hat absolut genial die Negotiations

00:28:39.572 --> 00:28:41.472
gehandelt und hat die alle davon überzeugt.

00:28:42.692 --> 00:28:45.612
Und dann haben die gesagt, okay, mach mal. Und dann lief das.

00:28:46.132 --> 00:28:47.492
Und dann war das auf Schiene.

00:28:49.072 --> 00:28:52.812
Und Ushwal hat nur recht regelmäßig geschaut, dass er auf Schiene bleibt.

00:28:52.972 --> 00:28:55.332
Aber das ist dann mehr so, passt eh alles.

00:28:56.572 --> 00:29:02.692
So den Blick auf die Seite. Aber das dauert einfach, bis ISO sowas losbringt.

00:29:04.292 --> 00:29:10.212
Die sind ja fast so schlimm wie TC39. Das dauert eine halbe Ewigkeit.

00:29:10.472 --> 00:29:12.992
Also da sind dazwischen schon die Dinosaurier wieder eingegangen.

00:29:13.532 --> 00:29:17.372
Gibt das irgendwie einen Grund für? Sind die irgendwie so organisationstechnisch

00:29:17.372 --> 00:29:21.992
oldschooliger drauf, weil irgendwie ältere Organisationen und irgendwie machen

00:29:21.992 --> 00:29:24.652
sowas wie ein Videocall nicht, sondern müssen sich halt irgendwie in Person

00:29:24.652 --> 00:29:25.852
treffen? Irgendwie sowas?

00:29:26.212 --> 00:29:33.792
Die sind schon modern. Also die Arbeitsstrukturen oder genauso wie modern wie alle anderen auch.

00:29:34.012 --> 00:29:39.072
Ich meine, nee, sondern das ist einfach, weil das Auswirkungen hat.

00:29:40.652 --> 00:29:44.592
So ein ISO-Standard, wenn sich da was tut, wenn sich da was erweitert,

00:29:45.432 --> 00:29:51.752
dann bedeutet das Millionen Investitionen in der Industrie, wenn Millionen genug sind.

00:29:51.752 --> 00:29:56.772
Weil dann bedeutet es plötzlich, dass jede Software auf der Welt es behaupten

00:29:56.772 --> 00:30:04.052
möchte, ISO 8601 zu unterstützen oder dass tatsächlich solche Datumstrings kriegt,

00:30:04.472 --> 00:30:06.052
müssen die jetzt alle erweitern.

00:30:06.052 --> 00:30:14.912
Das heißt, jeder von dem kleinen Schrauber in Deutschland, metaphorischer Schrauber,

00:30:15.792 --> 00:30:24.092
der seine PIM-Suite für irgendwas baut, das hat ja Konsequenz.

00:30:25.401 --> 00:30:28.381
Und darum ist man da sehr vorsichtig. Passt es eh?

00:30:28.921 --> 00:30:33.121
Wie läuft es? Können wir das hinzufügen, sodass wir dann nicht die ganze Welt zerstören?

00:30:33.521 --> 00:30:39.181
Also sprich, können die bestehenden Implementierungen, ist es eigentlich kompatibel?

00:30:39.261 --> 00:30:40.941
Was sagen eigentlich die Regeln dazu?

00:30:41.981 --> 00:30:46.581
Wie sollen diese Strings gehandelt werden, wenn man sie nicht unterstützt?

00:30:46.581 --> 00:30:57.441
Also zum Beispiel double-checken und schauen, dass die vorhergehende Spezifikation von ISO 8601 gesagt hat,

00:30:57.781 --> 00:31:02.821
ja, nach dem ersten ungewöhnlichen Buchstaben, wie zum Beispiel der eckigen Klammer,

00:31:03.421 --> 00:31:07.061
ist der Pass-Vorgang zu Ende und der Rest zu verwerfen.

00:31:07.861 --> 00:31:13.601
Das war ja der Grund, warum Java das so gemacht hat und gerade in eckigen Klammern

00:31:13.601 --> 00:31:19.081
und nicht anders, mit Abstand oder keine Ahnung was, weil eben die Pass-Regel

00:31:19.081 --> 00:31:20.781
so war, dass man sagen kann, okay.

00:31:22.314 --> 00:31:25.274
Ist nach wie vor gültiger String, hat halt mehr Info.

00:31:26.134 --> 00:31:29.874
Ja. So, und jetzt muss man schauen, ist es kompatibel?

00:31:30.394 --> 00:31:35.314
Was macht Java eigentlich wirklich? Gibt es da irgendwelche Sondersperrenzchen,

00:31:35.794 --> 00:31:37.274
die man berücksichtigen muss?

00:31:37.374 --> 00:31:45.034
Und all diese Fragen sind es, warum das bei ISO so lang dauert und im Volumen

00:31:45.034 --> 00:31:47.894
um ein Vielfaches größer, aber genau die gleiche Problematik,

00:31:48.114 --> 00:31:52.314
warum das bei TC39 so lang dauert, bei ECMA. ne?

00:31:53.254 --> 00:31:55.674
Weil neun Jahre ist ja auch nicht voll schlecht schnell, ne?

00:31:56.354 --> 00:32:00.574
Ich meine, das ist ein halbes Erwachsenenleben.

00:32:01.134 --> 00:32:04.934
Ja, sicherlich, aber ich meine, wir kriegen ja einiges dafür, ne?

00:32:05.454 --> 00:32:08.354
Also es ist ja irgendwie so im Endergebnis kann ich mich darüber jetzt auch

00:32:08.354 --> 00:32:11.874
nicht beklagen, so aus der Sicht des Nutzers, weil ich meine,

00:32:12.974 --> 00:32:15.714
sowohl, was ich jetzt alles an die Pendencies nicht mehr an der Backe habe,

00:32:17.014 --> 00:32:21.434
wie durchdacht das offensichtlich ist, wie alle Use Cases irgendwie offensichtlich

00:32:21.434 --> 00:32:25.874
abgedeckt sind, Und wie logisch das auch aufgebaut ist, da ist ja auch Qualität

00:32:25.874 --> 00:32:27.934
am Ende entstanden. Das hat sich also schon gelohnt.

00:32:28.994 --> 00:32:31.274
Da gibt es ja durchaus auch so Sachen im ECMAScript-Standard,

00:32:31.334 --> 00:32:35.294
wo ich jetzt sagen würde, die sind dann vielleicht weniger gut durchdacht. Auch neuere, aber ...

00:32:38.234 --> 00:32:44.594
Ja, genau so ist es. Also es ist natürlich, da ist viel Arbeit reingeflossen

00:32:44.594 --> 00:32:50.094
und viel Aufmerksamkeit reingeflossen und viel Detailnähe reingeflossen.

00:32:52.554 --> 00:32:57.374
Sehr oft verifiziert, dass die Designprinzipien halten und so.

00:32:58.034 --> 00:33:03.634
Und es freut mein kleines Herz, dich sagen zu hören, dass da was gelungenes

00:33:03.634 --> 00:33:05.774
drunter ist in dem Haufen.

00:33:07.834 --> 00:33:14.434
Ja, in Wirklichkeit wird es sich jetzt weisen, weil jetzt kommt es dann irgendwann

00:33:14.434 --> 00:33:15.734
hoffentlich mal in Safari,

00:33:16.434 --> 00:33:20.014
vermutlich ist mal, also Safari macht es immer dann im Eilverfahren,

00:33:20.314 --> 00:33:23.034
aber erst wenn es dann schon am Markt ist für alle anderen.

00:33:25.894 --> 00:33:29.334
Also erwarte ich mal das kommt jetzt dann auf Safari und sobald es ein Safari

00:33:29.334 --> 00:33:35.314
und insbesondere auf den Telefonen ist, dann wird die Adoptionsrate richtig

00:33:35.314 --> 00:33:38.614
in die Höhe gehen, weil dann brauche ich keine Polyphils mehr.

00:33:39.715 --> 00:33:46.915
Und dann muss es sich beweisen, weil bis jetzt hat ja noch niemand außer in

00:33:46.915 --> 00:33:55.075
irgendwelchen Samples und Experimenten irgendwas produktiv damit gemacht,

00:33:55.275 --> 00:34:03.615
was auch quasi durch die Realität getestet wird und nicht nur fürs Vergnügen.

00:34:03.935 --> 00:34:06.795
Und da wird es sich dann beweisen, ob wirklich was Sinnvolles dabei ist.

00:34:06.795 --> 00:34:10.195
Ich hoffe es natürlich sehr. Wir haben uns sehr Mühe gegeben.

00:34:12.535 --> 00:34:16.715
Aber man weiß ja nicht mehr. Also ich zweifle da doch keine Sekunde dran im

00:34:16.715 --> 00:34:19.395
Vergleich zu ... Also ich meine, jetzt sagst du auch schon irgendwie,

00:34:19.455 --> 00:34:21.815
der Safari muss das unterstützen, weil dann ist man den Polyfill los.

00:34:21.915 --> 00:34:25.635
Aber der Polyfill ist ja letztlich auch nur ein Implementierungsdetail bei denen,

00:34:25.635 --> 00:34:26.675
die es am Ende einsetzen.

00:34:26.815 --> 00:34:30.915
Ich meine, du tauschst ja im Prinzip deine Oldschool-Datums- und Zeitlibrary

00:34:30.915 --> 00:34:35.195
aus gegen das Ding, das du hinterher nur noch irgendwann mal dran denken musst zu löschen.

00:34:36.215 --> 00:34:39.035
Das ist ja schon ein relativ guter Deal, dass man den Leuten auch jetzt schon

00:34:39.035 --> 00:34:41.935
sagen kann mit dem jetzt existierenden Browser-Support, guck mal,

00:34:42.295 --> 00:34:45.135
das ist die Zukunft und wenn du das nächste Mal entweder was Neues aufgleist

00:34:45.135 --> 00:34:46.655
oder einen größeren Umbau machst,

00:34:46.955 --> 00:34:49.015
dann schmeißt doch einfach mal den alten Krempel raus, du den neuen rein,

00:34:49.535 --> 00:34:53.095
deine Use-Cases sind alle abgedeckt und für den Safari baust du das noch ein

00:34:53.095 --> 00:34:55.975
und schreibst dir halt einen Kommentar dahin, dass das halt demnächst raus kann.

00:34:56.695 --> 00:34:59.755
Also der Grund, warum ich halt glaube, dass so die Erfolgsaussichten relativ

00:34:59.755 --> 00:35:04.355
gut sind, ist halt, dass mir so als erklärbar das bisher immer relativ einfach

00:35:04.355 --> 00:35:05.595
gefallen ist, das zu verkaufen.

00:35:06.095 --> 00:35:10.715
Im Sinne von, das ist jetzt da, es ist offensichtlich erkennbar durch die API-Oberfläche,

00:35:10.955 --> 00:35:12.295
was das alles abdeckt und,

00:35:13.455 --> 00:35:16.735
dann hat man noch ein paar Beispiele und die Leute sind sofort sold und sagen

00:35:16.735 --> 00:35:18.655
sich, okay, wenn ich meinen ganzen Bestandscode nicht hätte,

00:35:18.735 --> 00:35:21.555
würde ich jetzt Moment oder hast du nicht gesehen, sofort in die Tonne treten.

00:35:21.655 --> 00:35:24.195
Das bringt mich auf eine interessante Frage, die ich euch stelle,

00:35:24.315 --> 00:35:31.435
weil ihr habt doch glaube ich mehr den Finger am Puls der breiteren Web-Öffentlichkeit

00:35:31.435 --> 00:35:33.735
sozusagen. sagen, ne? Ähm...

00:35:35.314 --> 00:35:44.794
Ein Gedanke, mit dem ich schwanger gehe quasi, ist, würde es sich lohnen oder wäre es sinnvoll,

00:35:45.914 --> 00:35:55.214
eine Moment.js API-getreue Implementierung zu machen, wo ich die Moment.js APIs

00:35:55.214 --> 00:35:59.434
auf Basis von Temporal implementiere.

00:35:59.434 --> 00:36:06.814
Also sprich, nur die API-Oberflächen transparent durch MAPE quasi und ähnliches

00:36:06.814 --> 00:36:08.914
für Date-Functions, right?

00:36:09.774 --> 00:36:17.914
Oder ist das eh mehr oder weniger lass bleiben, weil die, die das nicht selbstständig

00:36:17.914 --> 00:36:19.534
in den nächsten paar Jahren ändern,

00:36:20.434 --> 00:36:25.214
die nutzen auch sowas nicht?

00:36:26.034 --> 00:36:31.174
Ah, why not both? Also weil, ähm Ne, ich frage mich, ob sich das lohnt,

00:36:31.234 --> 00:36:33.894
das ist ja nicht both Doch, doch, doch, pass auf, pass auf,

00:36:34.414 --> 00:36:38.634
Pass auf, pass auf Du musst ja bedenken, das klingt in meinen Ohren,

00:36:38.714 --> 00:36:42.634
der ich jetzt ja von dem Zeug wirklich gar keinen Plan habe aber schon nach

00:36:42.634 --> 00:36:47.014
einem Job, der ja für unsere neuen künstlich intelligenten Overlords wie geschaffen scheint.

00:36:50.372 --> 00:36:53.732
Weil du denen im Prinzip sagen könntest, hier hast du API, so soll das sein,

00:36:53.972 --> 00:36:56.772
hier hast du schon die Test-Suite von Moment.js, die soll am Ende genauso grün

00:36:56.772 --> 00:36:58.432
werden, wie sie vorher war und

00:36:58.432 --> 00:37:01.912
jetzt mach mal, dass das sozusagen einen Unterbau hat, der temporal ist.

00:37:01.912 --> 00:37:05.212
Wie gesagt, ich mach sowas jetzt nicht, aber ich könnte mir vorstellen,

00:37:05.352 --> 00:37:08.012
dass wenn die Teile irgendwas auf die Kette kriegen, dann eine,

00:37:09.172 --> 00:37:12.552
dermaßen ausdefinierte Aufgabe und das würde ja tatsächlich den Aufwand sehr

00:37:12.552 --> 00:37:15.712
klein machen und das würde dann tatsächlich so einem lohnt sich der Aufwand.

00:37:15.832 --> 00:37:17.232
Naja, der Aufwand ist nicht existent.

00:37:18.832 --> 00:37:22.272
Warum nicht? Also ich könnte mir vorstellen, dass das, wenn du mit so Kram arbeiten

00:37:22.272 --> 00:37:25.692
willst, ein sehr billig durchzuführendes Experiment ist und ich könnte mir vorstellen,

00:37:25.772 --> 00:37:27.572
dass du damit relativ weit kommst im ersten Anlauf.

00:37:28.592 --> 00:37:31.692
Ja, also ich meine im Endeffekt ist das ja, also ich denke auch,

00:37:31.692 --> 00:37:37.032
dass dann wahrscheinlich diese Library-Maintainer dieser Libraries wahrscheinlich oder irgendwann,

00:37:37.492 --> 00:37:40.652
wie auch immer, ob KI-gestützt oder nicht, eben eine Version rausbringen,

00:37:40.752 --> 00:37:45.332
die dann im Grunde sich auf die Temporal-API stützt.

00:37:45.912 --> 00:37:51.892
Und so ein bisschen kennen wir das ja auch von Lodash, was viel so auf native

00:37:51.892 --> 00:37:57.972
Funktionen der Browser gemappt hat, was Underscore, quasi das Original,

00:37:58.292 --> 00:38:00.452
ja noch irgendwie alles selber implementiert hat.

00:38:02.232 --> 00:38:06.532
Ja, macht total Sinn. Moment ist unwahrscheinlich, dass sie es machen,

00:38:06.672 --> 00:38:08.672
weil die haben ja vor fünf Jahren

00:38:08.672 --> 00:38:13.052
oder was schon gesagt, Moment is now deprecated. Do not use this anymore.

00:38:14.167 --> 00:38:17.747
Das war ja auch der Moment, wo dann Date Functions quasi hinter dem Mistisch

00:38:17.747 --> 00:38:19.927
mal kamen oder größer wurde.

00:38:20.367 --> 00:38:24.747
Bis dahin war ja Moment der große Bär.

00:38:25.647 --> 00:38:28.167
Ja, ist halt die Frage, vielleicht müssen die das auch nicht machen,

00:38:28.267 --> 00:38:29.427
vielleicht macht es einfach irgendwer anders.

00:38:29.567 --> 00:38:33.467
Die Frage ist halt, ist der Schmerz größer, den eigenen Code an Temporal anzupassen

00:38:33.467 --> 00:38:41.547
oder ist der Schmerz größer, eben eine Moment.js-kompatible Library zu bauen, die nur durchmappt?

00:38:42.387 --> 00:38:46.567
Naja, ich komme an, wen du fragst. Wenn du mich fragst, der vorschlägt.

00:38:48.907 --> 00:38:53.067
Diese Schnittstellen-Package zu bauen, dann ist das natürlich mein Schmerz und

00:38:53.067 --> 00:38:56.867
der natürlich für mich am größten. Aber dafür ist der Schmerz für alle anderen weniger.

00:38:57.327 --> 00:39:01.607
Ja, das käme dann sicherlich von jemandem, der auch Schmerzen hat,

00:39:01.927 --> 00:39:06.647
mit zum Beispiel der Größe von Moment.js und der eben weiß, hey,

00:39:06.727 --> 00:39:10.587
hier in meinem Team, wir wissen alle gar nicht, wo wir Moment.js einsetzen.

00:39:10.587 --> 00:39:14.227
Ist es auch viel zu schwierig, das irgendwie jetzt alles zu finden und zu refactoren,

00:39:14.887 --> 00:39:19.087
aber wir können die Arbeit quasi reinstecken in so eine Library und dann wandert

00:39:19.087 --> 00:39:22.307
die sozusagen aus einem praktischen Projekt in die Öffentlichkeit.

00:39:22.587 --> 00:39:27.287
So könnte es dann passieren. Aber mal gucken, ja, wäre interessant, das zu beobachten.

00:39:29.347 --> 00:39:34.367
Wir haben ja noch gar nicht darüber gesprochen, wie Temporal sich bedienen lässt.

00:39:34.487 --> 00:39:36.207
Also wie sieht die API aus?

00:39:36.647 --> 00:39:42.627
Wollen wir das vielleicht nochmal so oder zumindest so ein paar Konzepte von Temporal mal sagen.

00:39:42.707 --> 00:39:47.607
Also wir haben zwar auch sowas gesagt wie hey, Plane Date haben wir fallen lassen,

00:39:47.607 --> 00:39:54.687
so als Stichwort und Zoned XY, aber irgendwie so die Top 3 Sachen,

00:39:54.847 --> 00:39:57.587
die an Date offensichtlich doof sind und die jetzt besser sind.

00:39:58.287 --> 00:40:01.567
Nee, wenn, dann mache ich das schon vollständig, weil es nämlich so einfach und strukturiert ist.

00:40:01.947 --> 00:40:07.547
Auf geht's, ich hab heute nichts weiter vor. Es gibt einen Kalender an unserer

00:40:07.547 --> 00:40:16.147
Wand und die quasi die Zeit im normalen täglichen Leben, wie wir sie als Normalbürger wahrnehmen.

00:40:16.367 --> 00:40:17.847
Da gibt es meine Wanduhr.

00:40:19.146 --> 00:40:25.466
Plain Time, da sehe ich nur die Uhrzeit. Da gibt es meinen Kalender am Tisch, Plain Date.

00:40:25.826 --> 00:40:29.006
Da ist nichts Zeit, das ist einfach nur das Datum.

00:40:29.646 --> 00:40:37.406
So, und dann gibt es meine Armbanduhr, auf der steht Datum und Uhrzeit, Plain Date Time.

00:40:38.266 --> 00:40:41.666
Und dann gibt es noch Feiertage, die kehren jedes Jahr wieder,

00:40:41.866 --> 00:40:43.666
so wie Weihnachten, 24.12.

00:40:44.406 --> 00:40:48.146
Das hat kein Jahr, das ist Plain Day Month.

00:40:49.386 --> 00:40:56.666
Und dann gibt es noch den, sorry, Month Day, ja.

00:40:57.186 --> 00:41:00.626
Und dann gibt es noch Year Month.

00:41:00.966 --> 00:41:09.006
Das ist quasi im Jänner 2026, wenn es länger braucht.

00:41:09.206 --> 00:41:12.406
Das sind so die Begriffe, mit denen wir als Individuen umgehen.

00:41:13.426 --> 00:41:20.046
So, und dann gibt es auf der anderen Seite die Atomuhr in Frankfurt,

00:41:20.366 --> 00:41:28.866
die rechnet eigentlich nur mit Sekunden oder genauer zu sein Nanosekunden und das ist instant,

00:41:29.266 --> 00:41:34.086
abgebildet als Nanosekunden seit dem 01.01.1970,

00:41:34.746 --> 00:41:40.326
um eben synchron zu bleiben mit der Reste der Computerei.

00:41:41.895 --> 00:41:45.855
Und dann stellt sich nur mal die Frage, wie verbinde ich die beiden?

00:41:46.295 --> 00:41:53.875
Dafür gibt es so ein Daytime. Wenn ich einem Instant eine Timezone hinzufüge,

00:41:54.815 --> 00:41:57.095
dann kriege ich Datum und Uhrzeit raus.

00:41:57.555 --> 00:42:01.155
Und umgekehrt, wenn ich hergehe und ich habe nur ein Datum und Uhrzeit,

00:42:01.235 --> 00:42:04.955
weiß aber nicht wo und ich füge eine Zeitzone hinzu, dann kann ich es am Instant festmachen.

00:42:05.355 --> 00:42:07.535
Das ist der gesamte Graph der Oberfläche.

00:42:09.035 --> 00:42:12.415
Gibt es nicht auch Duration? Operation. Ja, genau.

00:42:12.835 --> 00:42:19.655
Das ist für Unterschiede zwischen zwei von diesen Objekten auf der rechten Seite.

00:42:19.835 --> 00:42:22.615
Das können in Tagen sein, es können in Minuten sein.

00:42:24.355 --> 00:42:29.515
Dann ist es halt ein Intervall von einem Tag oder von fünf Tagen oder von fünf

00:42:29.515 --> 00:42:32.435
Minuten oder von drei Tagen und zwei Stunden.

00:42:32.795 --> 00:42:36.295
Das ist dann überkommen.

00:42:37.175 --> 00:42:40.415
Und halt eben, muss man halt eben noch rausstellen, weil wir gerade schon vom API-Design reden.

00:42:40.415 --> 00:42:42.915
Dass diese Konzepte, die du ja gerade alle aufgelistet hast,

00:42:42.995 --> 00:42:46.075
halt eben da repräsentiert sind durch halt eigene in Airquotes Klassen,

00:42:46.335 --> 00:42:50.935
also Objekte für diese ganzen Use Cases mit ihren jeweils eigenen APIs im Vergleich

00:42:50.935 --> 00:42:53.975
zu halt eben so, den Hitler-Vergleich rausholen, das Date-Objekt,

00:42:54.095 --> 00:42:55.395
ein Objekt, sie alle zu knechten.

00:42:55.935 --> 00:42:57.835
Das ist also, alles kann, aber nichts richtig.

00:42:58.435 --> 00:43:01.215
Das ist halt so, dir offensichtlich so, dass du halt einfach viele,

00:43:01.275 --> 00:43:03.795
viele Objekte hast, mit denen du jonglieren kannst und für den jeweiligen Use

00:43:03.795 --> 00:43:08.735
Case hast du das Ding, da ist die API drin, OOP at its best und deswegen relativ,

00:43:08.995 --> 00:43:11.935
sagen wir mal, offensichtlich durchdacht erscheint im Vergleich halt eben zu Date.

00:43:12.435 --> 00:43:17.255
Genau, und vom Naming her auch, ne? Also, dass diese Prefixe mit Plain und Prefix

00:43:17.255 --> 00:43:24.395
zoned, dass also klar ist, hier an diesem Datum, da hängt noch gar keine Zeitzoneninformation dran.

00:43:24.395 --> 00:43:29.195
Also das kannst du so auch gar nicht irgendwie benutzen, wenn du einen Kalendereintrag

00:43:29.195 --> 00:43:31.395
machen willst oder so. Das reicht dann nicht.

00:43:32.515 --> 00:43:37.235
Genau. Und in dem Zusammenhang, ich meine, es gibt ja immer die Frage,

00:43:37.395 --> 00:43:39.835
warum habt ihr überhaupt dieses Plane-Präfix genommen?

00:43:41.310 --> 00:43:44.350
Und da kommt es dann wieder drauf an, dass es um Entwicklerfreundlichkeit,

00:43:44.490 --> 00:43:45.730
um Lernfreundlichkeit geht.

00:43:46.130 --> 00:43:49.430
Wir wollten dem Erklärbären quasi das Leben einfacher machen.

00:43:49.850 --> 00:43:54.330
Denn in dem Moment, wo ich sage, das ist Date, Time, Date, Time,

00:43:54.650 --> 00:43:58.490
kommst du in Erklärungsnotstand,

00:43:58.970 --> 00:44:03.550
warum diese Objekte keine Zeit zonen können und warum das eigentlich nicht das

00:44:03.550 --> 00:44:05.610
Objekt ist, für was du jetzt gerade brauchst.

00:44:05.610 --> 00:44:09.070
Und insofern ist das Präfix eigentlich,

00:44:09.490 --> 00:44:13.290
also wir haben da nicht nur auf Architektonisch schön geschaut,

00:44:13.570 --> 00:44:20.630
sondern insbesondere Justin Brandt war da extrem dahinter, die Benutzerergonomie

00:44:20.630 --> 00:44:26.890
und die Discoverability und das Lernvermögen quasi einfach zu halten.

00:44:26.890 --> 00:44:36.070
Wir haben dabei schon so einen TypeScript oder VS Code Hilfe vermutet,

00:44:36.250 --> 00:44:41.290
aber damit soll eigentlich alles discoverable sein und es soll auch so sein,

00:44:41.370 --> 00:44:45.090
dass du nach Möglichkeit sofort weißt.

00:44:46.750 --> 00:44:52.810
Welche Funktion an dem Objekt du da nutzen musst, dass es eigentlich unzweideutig ist, was sinnvoll ist.

00:44:52.810 --> 00:44:55.290
Ja, so wie dieses Set-Unsafe.

00:44:55.990 --> 00:44:59.150
Es gibt ja auch dieses Set-Unsafe-HTML oder sowas.

00:44:59.290 --> 00:45:05.090
Also das sind ja auch solche Konzepte, wo quasi die Benennung schon sehr viel

00:45:05.090 --> 00:45:10.430
sozusagen darüber verrät, wie das halt funktioniert. Genau.

00:45:11.390 --> 00:45:15.550
Ja, genau. Dann ist ein Vorteil von Temporal im Gegensatz zu Date,

00:45:15.730 --> 00:45:20.970
dass es kein Mutieren von Daten gibt.

00:45:21.610 --> 00:45:23.570
Also kommt immer quasi ein Neues raus.

00:45:24.450 --> 00:45:28.130
Passieren keine ungeplanten Side Effects oder sowas.

00:45:30.417 --> 00:45:42.577
Genau, das ist ganz wichtig, weil ich sonst eigentlich aus dem Datum immer eine Zahl machen muss,

00:45:42.797 --> 00:45:50.717
um nicht mutiert zu werden und das sind in Wirklichkeit in großen Codebases,

00:45:50.717 --> 00:45:56.617
ist diese Art von Fehler genau das, was man nie findet, was dir ewig bleibt.

00:45:56.617 --> 00:46:04.237
Da passt du einmal in eine Funktion ein Datum rein und plötzlich verändert sich

00:46:04.237 --> 00:46:10.457
das Ding unbewusst, aber erst drei Monate später, weil jemand eine Addition bauen wollte und ja.

00:46:11.237 --> 00:46:16.497
Das ist bei Objekten und Erics ja auch der Fall. ist, ne? Das ist dann ganz

00:46:16.497 --> 00:46:18.157
schwierig zu debakten und zu finden, ne?

00:46:18.597 --> 00:46:23.977
Ja. Und insofern war das Key, ähm, was waren so die Prinzipien?

00:46:24.997 --> 00:46:31.537
Discoverability, Offensichtlichkeit, ähm, Immutability und Korrektheit, ne?

00:46:31.717 --> 00:46:37.417
Es gibt ja so Dinge, wo nicht unbedingt klar ist, was jetzt die richtige Antwort ist, ne?

00:46:38.237 --> 00:46:44.957
Also zum Beispiel, wir haben ja jetzt kommende Woche ab Zeitpunkt der Aufnahme,

00:46:45.937 --> 00:46:49.217
vor ein paar Wochen zum Zeitpunkt des Releases.

00:46:51.357 --> 00:46:54.897
Sommerzeitumstellung. Da verlieren wir eine Stunde, da bewegt sich dann die

00:46:54.897 --> 00:46:58.877
Zeit eine Stunde vor was, also um 2 Uhr nachts ist es plötzlich 3 Uhr.

00:46:59.337 --> 00:47:06.237
Das heißt, den Zeitraum zwischen 2 Uhr und 3 Uhr, also jetzt chronologisch gibt

00:47:06.237 --> 00:47:07.977
es ihn, aber auf der Uhr gibt es ihn nicht.

00:47:10.077 --> 00:47:16.917
So, jetzt lande ich aber, wenn ich hergehe und sage, neben 12 Uhr Mitternacht

00:47:16.917 --> 00:47:20.577
plus 2 Stunden, lande ich um 2, plus 2 Stunden 30, ja?

00:47:21.377 --> 00:47:23.197
So, da lande ich genau in der Mitte.

00:47:24.057 --> 00:47:28.137
2 Stunden 30 gibt es jetzt nicht. Das heißt aber,

00:47:29.643 --> 00:47:35.723
dass ich jetzt dann eigentlich schon auf 3.30 Uhr muss. Das wäre korrekt.

00:47:37.803 --> 00:47:41.803
Jetzt macht es aber mal in eine andere Richtung. Der Herbst kommt,

00:47:41.923 --> 00:47:43.363
da verlieren wir eine Stunde.

00:47:43.543 --> 00:47:48.123
Um 3 Uhr ist plötzlich wieder 2 Uhr. Das heißt, 2 Uhr gibt es zweimal.

00:47:48.843 --> 00:47:52.743
Macht die gleiche Addition. Um Mitternacht plus 2,5 Stunden.

00:47:53.063 --> 00:47:54.683
Welches 2 Uhr ist denn das jetzt?

00:47:55.123 --> 00:47:59.003
Das am Anfang oder am Ende? Also das erste 2 Uhr oder das zweite 2 Uhr?

00:47:59.923 --> 00:48:08.583
Ähm, und da gibt's unterschiedliche Situationen, in der die unterschiedliche Antwort richtig ist.

00:48:10.483 --> 00:48:17.183
Ähm, und das heißt, der Default muss Saint sein, muss vernünftig sein,

00:48:17.303 --> 00:48:21.643
muss den Großteil abdecken, aber ich muss, egal was kommt, immer die richtige

00:48:21.643 --> 00:48:22.503
Antwort kriegen können.

00:48:23.363 --> 00:48:28.123
Das ist genauso wie mit Times und Parsing. Solange es strukturell richtig ist,

00:48:29.707 --> 00:48:36.387
Kann er parsen? Und semantische Fehler, also keine Ahnung, 13.

00:48:36.687 --> 00:48:41.187
Monat oder so, okay, die können wir, da kannst du mir dann sagen,

00:48:41.287 --> 00:48:42.647
wie möchtest du damit umgehen?

00:48:43.247 --> 00:48:47.027
Soll ich da sagen, okay, der 13. Monat ist der erste des nächsten Jahres?

00:48:47.387 --> 00:48:50.607
Oder möchtest du sagen, ich cap bei 12? Oder möchtest du sagen,

00:48:50.727 --> 00:48:52.147
ich throw eine Exception oder was auch immer?

00:48:52.147 --> 00:48:58.747
Also diese Art von Parsing-Fehler bei Datumsinterpretationen sind eben,

00:48:59.607 --> 00:49:03.107
da möchte ich, dass wir flexibel sind und möchte ich, dass wir alle Möglichkeiten

00:49:03.107 --> 00:49:08.207
abdecken können, solange es strukturell, also formatmäßig quasi passt.

00:49:08.207 --> 00:49:16.667
Und all diese Dinge müssen, es muss möglich sein, dass ich die richtige Antwort, die ich brauche,

00:49:18.127 --> 00:49:22.627
rechne und nicht nur irgendeine zufällige Räte wie, keine Ahnung,

00:49:23.247 --> 00:49:29.207
da 31, was ist da, der Famous, die Famous One ist vom 31.

00:49:29.547 --> 00:49:33.667
Januar plus ein Monat oder sowas. Ein Monat ist der 3. März.

00:49:35.207 --> 00:49:37.987
Genau, das würde Date ja dann verkacken, oder?

00:49:38.207 --> 00:49:46.687
Das würde Date vercutten und da gibt es, wie gesagt, unterschiedliche Modelle,

00:49:47.087 --> 00:49:49.607
wo der Default ist der 31.

00:49:49.867 --> 00:49:56.467
Jänner plus ein Monat ist der Default ist mal der 28. oder 29. Februar.

00:49:57.567 --> 00:50:02.007
Aber dann gibt es eine Flag, die sagt, nee, halte den 3.

00:50:02.147 --> 00:50:08.167
März für Date-Kompatibilität oder nee, throw eine Exception oder mach was anderes.

00:50:08.827 --> 00:50:10.947
Je nach Bedürfnis eben auch.

00:50:12.458 --> 00:50:16.378
Genau, und was wir jetzt quasi implizit auch erzählt haben, ist,

00:50:16.618 --> 00:50:24.118
dass eben viele dieser Objekte oder dieser Methoden auf dem Objekt wiederum

00:50:24.118 --> 00:50:28.758
Methoden implementieren wie Add, Substract und sowas in der Art.

00:50:28.978 --> 00:50:31.858
Oder bei Duration dann wieder andere Sachen.

00:50:32.558 --> 00:50:36.078
Genau, das ist quasi die Date and Time Math.

00:50:36.878 --> 00:50:41.418
Und gerade da ist einer von diesen Punkten, wo viele Fehler auftreten können,

00:50:41.558 --> 00:50:43.618
wo du also die Flexibilität brauchst.

00:50:45.258 --> 00:50:50.538
Entscheiden zu können, in welche Richtung deine Antwort gehen soll oder was

00:50:50.538 --> 00:50:52.158
die richtigen Regeln sind.

00:50:52.838 --> 00:50:57.378
Und das ist quasi auch die Verwendung des Duration Objects, ist eigentlich für DateNath.

00:50:58.098 --> 00:51:01.858
Das ist Abstand zwischen zwei Zeiten im Endeffekt.

00:51:02.798 --> 00:51:07.318
Genau so. Eigentlich kann man sagen, eine wirklich gut designte,

00:51:07.618 --> 00:51:09.838
relativ übersichtliche API,

00:51:11.058 --> 00:51:16.418
die aber, wo aber unglaublich viel Heavy Lifting unten drunter stattfindet und

00:51:16.418 --> 00:51:22.358
genau die auch per Default sinnvolle oder die sinnvolle Defaults hat.

00:51:22.638 --> 00:51:28.498
Aber wer dann so tiefer einsteigt in, weiß ich nicht, Localization,

00:51:29.498 --> 00:51:35.798
kulturelle Dinge, kann dann eben auch quasi anpassen und Dinge tun oder es gibt

00:51:35.798 --> 00:51:42.018
ja auch die Möglichkeit irgendwie nicht nur Jahre nach gregorianischem Kalender

00:51:42.018 --> 00:51:46.598
und nach hier Christi Orthodox oder wie das heißt zu zählen,

00:51:46.698 --> 00:51:49.538
sondern eben dann auch Ära und Jahr,

00:51:49.778 --> 00:51:52.598
also in Kulturen, wo das dann irgendwie,

00:51:53.338 --> 00:51:54.698
vorwiegend der Fall ist.

00:51:55.498 --> 00:51:57.698
Ich meine, da tut viel Heavy Lifting.

00:52:01.218 --> 00:52:03.938
Die drunterliegenden Hände,

00:52:05.896 --> 00:52:09.616
Name. Unique-Organ-Groach. Ach so.

00:52:10.136 --> 00:52:13.356
Du meinst nicht das Betriebssystem oder sowas? Ja, das Betriebssystem,

00:52:13.436 --> 00:52:17.936
da gibt's ha, jetzt ist man mal komplett blind.

00:52:18.896 --> 00:52:23.576
Die Intel Libraries verwenden es auch, die ganzen, die darunter lebende.

00:52:26.036 --> 00:52:30.336
Nicht schlimm. Ja, aber die Datenbasis ist halt, wo die Wahrheit drin wohnt.

00:52:30.476 --> 00:52:33.176
Die Datenbasis, wo eben auch die ganzen Zeitzonen und so weiter drin sind,

00:52:33.676 --> 00:52:35.396
die implementieren auch,

00:52:37.436 --> 00:52:41.896
vorgefertigte Kalender, den japanischen, den hebräischen, den arabischen,

00:52:42.516 --> 00:52:44.376
Typus A und B, so aus dem Motto.

00:52:44.816 --> 00:52:47.276
Und die machen eigentlich viel Heavy Lifting.

00:52:48.416 --> 00:52:54.796
Was Temporal macht, ist, diese Konzepte an die Oberfläche bringen und quasi

00:52:54.796 --> 00:52:59.576
aus der Versenkung holen, damit man das Richtige dann damit tun kann.

00:53:00.216 --> 00:53:03.956
Weil mit Date hat man ja gar nicht die Wahl. Und warum hat man mit Date nicht

00:53:03.956 --> 00:53:05.996
die Wahl? weil Date versucht, alles zu verstecken.

00:53:06.916 --> 00:53:13.016
Das heißt, ich bin bei solchen APIs immer ein großer Fan von möglichst transparent,

00:53:13.376 --> 00:53:15.456
möglichst durchgriffig zu sein.

00:53:16.096 --> 00:53:20.256
Gib dem User die Power, weil früher oder später, wenn du es nicht tust,

00:53:20.496 --> 00:53:22.276
dann baut er Dinge wie Moment.js,

00:53:23.456 --> 00:53:27.476
die dich sowieso umgehen, die alles, was du verhindern wolltest,

00:53:27.616 --> 00:53:34.676
dann trotzdem tun, nur sie machen es richtig hässlich und groß und unmaintainable.

00:53:35.416 --> 00:53:38.736
Und im Endeffekt musste dann das Recht Temporal werden. Und darum bin ich ein

00:53:38.736 --> 00:53:42.236
Fan von früher Transparenz für Power-User.

00:53:43.036 --> 00:53:46.896
Ja, genau. Es ist quasi so, das Leben findet einen Weg und es stellt sich raus,

00:53:46.976 --> 00:53:51.196
dass Jurassic Park eigentlich eine Dokumentation über Web-Entwicklung war. Genau, genau so.

00:53:52.672 --> 00:53:59.532
Super, ich muss leider vorschlagen, dass wir das sozusagen zu einem schönen

00:53:59.532 --> 00:54:04.952
Abschlusssatz schon deklarieren, was daran liegt, dass ich in vier Minuten leider

00:54:04.952 --> 00:54:05.792
in den nächsten Callen muss.

00:54:05.892 --> 00:54:09.452
Und ich bin auch Host, das habe ich nicht bedacht, dass ich,

00:54:09.652 --> 00:54:13.092
wenn ich rausgehen will und quasi wieder ein Videocall machen will im Anschluss,

00:54:13.252 --> 00:54:14.692
ich das hier nicht laufen lassen kann.

00:54:15.992 --> 00:54:19.012
Ja, das sollten wir jetzt dann etwa jetzt endlich mal geschafft haben,

00:54:19.092 --> 00:54:22.792
durch externe Einflüsse eine Sendung auf tatsächlich eine Stunde zu begrenzen.

00:54:23.012 --> 00:54:24.752
Es scheint so. Das ist Wahnsinn.

00:54:27.012 --> 00:54:30.472
Vielleicht dürfte er machen, ne? Ja, ich würde sagen, Philipp ist hier ein guter Einfluss.

00:54:32.732 --> 00:54:35.612
Ja, also ich fand es auf jeden Fall super, sehr cool.

00:54:35.792 --> 00:54:41.552
Auch irgendwie viel Backstory gehört nochmal und auch so ein Vorgeschmack auf die API.

00:54:41.952 --> 00:54:47.172
Wir werden natürlich das alles verlinken. Und vielen Dank für eure Arbeit und

00:54:47.172 --> 00:54:51.352
vielen Dank, dass du heute dabei warst. Ja, das war mein Vergnügen.

00:54:52.092 --> 00:54:57.372
Ja, und vielleicht in zwei Jahren nochmal, dann im kleineren Rahmen vielleicht

00:54:57.372 --> 00:55:01.352
auch, für die ganze Feedback-Runde, wie hat es denn dann geklappt?

00:55:01.492 --> 00:55:05.992
So nach dem Motto, zwei Jahre später, war es tatsächlich so benutzt?

00:55:06.092 --> 00:55:08.972
Hat es tatsächlich funktioniert oder nicht?

00:55:09.452 --> 00:55:12.352
Und wenn es schlecht läuft, haben wir dann Temporal 2 zurück in die Zukunft.

00:55:12.492 --> 00:55:16.012
Das wollen wir ja. Genau, da kommt Temporal 2 zurück in die Zukunft.

00:55:16.512 --> 00:55:19.812
Dann habe ich wieder für die nächsten zehn Jahre was zu tun, ne?

00:55:22.432 --> 00:55:25.632
So machen wir das. Das ist eine gute Idee. Vielen Dank, Philipp.

00:55:26.972 --> 00:55:30.692
Vielen Dank, Peter. Vielen Dank allen Hörenden. Wenn ihr Fragen habt,

00:55:30.792 --> 00:55:31.852
ihr wisst, wie ihr uns erreicht.

00:55:32.352 --> 00:55:37.312
Und wir werden Philipp natürlich auch verlinken, sodass ihr ihn auch anhauen

00:55:37.312 --> 00:55:39.812
könnt. Und ansonsten liken wir das gerne weiter.

00:55:40.332 --> 00:55:46.412
Nächste Woche geht's um HTTP3. Das wird auch eine spannende Folge.

00:55:47.052 --> 00:55:51.752
Genau, und bis dahin. Macht's gut, habt eine gute Woche. Und bis dann.

00:55:51.992 --> 00:55:54.292
Tschüss. Tschüssi. Ciao.

