WEBVTT

00:00:00.017 --> 00:00:05.697
Die erste Frage, die wir jetzt hier auf der Liste haben, ist zum Thema Progressive Enhancement von Tom.

00:00:06.877 --> 00:00:09.317
Ich kann so grobe Sachen machen, wie simuliere mir Light Mode.

00:00:09.497 --> 00:00:11.237
Ich kann sowas machen, wie mach Skript aus.

00:00:11.757 --> 00:00:13.977
Aber eigentlich ist das ja nicht, was ich brauche, um Progressive Enhancement

00:00:13.977 --> 00:00:17.437
zu betreiben. Ich muss halt wirklich den Knopf haben, mach Anchor Positioning aus.

00:00:18.757 --> 00:00:21.337
Okay, ich fühle mich jetzt über Bildformate extrem gut informiert.

00:00:21.837 --> 00:00:25.397
Super. Genau, und hoffe ich, dass das auch für die Hörenden gilt.

00:00:28.297 --> 00:00:33.337
Hey, kurze Werbeansage von uns. Seit 2011 sind wir regelmäßig auf der Beyond

00:00:33.337 --> 00:00:36.197
Tellerrand, einer Konferenz für Kreative und Entwickler.

00:00:36.437 --> 00:00:38.657
Und sie inspiriert uns bis zum heutigen Tag.

00:00:39.237 --> 00:00:45.697
Das nächste Mal findet die Konferenz am 27. und 28. April 2026 in Düsseldorf statt.

00:00:46.417 --> 00:00:52.777
Tickets kosten 349 Euro, was für zwei Tage Konferenz mit dem Line-Up ein Schnapper

00:00:52.777 --> 00:00:56.097
ist. und wir würden uns freuen, dich dort zu treffen.

00:00:56.717 --> 00:01:01.697
Auf der Webseite beyondtellerand.com ohne Bindestrich gibt es alle Infos.

00:01:02.377 --> 00:01:07.497
Und noch ein Tipp, gönnt euch ein Zimmer im Holiday Inn oder im New Tab neben

00:01:07.497 --> 00:01:12.877
der Venue, denn abends kann man dort oft noch mit den Speakern und der Community an der Bar abhängen.

00:01:13.417 --> 00:01:15.757
Wir alle freuen uns, wenn du dabei bist.

00:01:16.927 --> 00:01:21.587
Wer darüber hinaus noch Bock hat, dem gebe ich persönlich gerne eine Führung

00:01:21.587 --> 00:01:27.707
durch Düsseldorf, inklusive Königsallee, Altstadt, Medienhafen und japanischem Viertel.

00:01:32.227 --> 00:01:37.727
Revision 703 Willkommen beim Working Draft. Wir sind heute zu zweit.

00:01:37.967 --> 00:01:41.847
Da hätten wir aus dem Team den Peter. Moin, moin.

00:01:42.727 --> 00:01:48.067
Und ich bin der Shep und wir wollen heute ein paar hörenden Fragen beantworten.

00:01:49.087 --> 00:01:52.707
Ja, wir haben absolut keine Ideen mehr und ehe wir jetzt anfangen,

00:01:52.987 --> 00:01:57.107
irgendwie einfach Reruns zu machen, dachten wir, fragen wir mal das Publikum.

00:01:57.447 --> 00:02:02.647
Ja, das möchte ich ja widersprechen, aber da möchte ich widersprechen.

00:02:02.767 --> 00:02:07.587
Ich habe schon ein paar. Ich war am Wochenende bei der Fostem und allein das

00:02:07.587 --> 00:02:09.627
hat mir schon wieder ein paar coole, neue Ideen gegeben.

00:02:10.007 --> 00:02:14.067
Also Also, genau, fand ich übrigens sehr, also ich war zum ersten Mal da,

00:02:14.627 --> 00:02:17.947
irgendwie die vergangenen Jahre habe ich das vorhin mal registriert und gedacht

00:02:17.947 --> 00:02:21.387
so, ja, könnte man mal hinfahren, ist jetzt ja nicht so weit von mir,

00:02:21.647 --> 00:02:24.027
unkostenlos, also in Brüssel.

00:02:25.801 --> 00:02:28.501
Aber ich hatte immer so das Gefühl, ja, da wird halt zu viel,

00:02:28.821 --> 00:02:33.361
irgendwie, da geht es zu viel um Linux, Datenbanken, also Krempel,

00:02:33.441 --> 00:02:35.801
mit denen ich eigentlich meistens nicht so viel zu tun habe und wo ich mich

00:02:35.801 --> 00:02:36.621
auch nicht so gut auskenne.

00:02:38.281 --> 00:02:43.601
Und dann gab es natürlich immer einen JavaScript-Track und auch einen Web-Performance-Track und so.

00:02:44.021 --> 00:02:47.481
Deswegen habe ich drüber nachgedacht und dachte, ja, nee, im Großen und Ganzen

00:02:47.481 --> 00:02:50.281
ist das, glaube ich, nichts für mich. Und diesmal habe ich irgendwie gedacht,

00:02:50.401 --> 00:02:51.461
nee, ich fahre jetzt mal hin.

00:02:52.261 --> 00:02:57.081
Und das war sehr abgefahren. Also ich war auch erst mal so ein bisschen so abgeschreckt

00:02:57.081 --> 00:02:59.981
und dachte, ist das jetzt eine gute Idee gewesen?

00:03:00.241 --> 00:03:06.341
Weil es waren wirklich unfassbar viele Menschen auf diesem riesigen Uni-Campus.

00:03:06.661 --> 00:03:14.461
Ich glaube, es gibt, die haben 37 parallele Tracks und irgendwie an die 1000 Vorträge in zwei Tagen.

00:03:15.241 --> 00:03:20.241
Und es ist halt echt sehr krass nerdig. Also so maximal voll nerdig.

00:03:21.461 --> 00:03:22.901
Das sagst du, als wäre das irgendwie ein Problem.

00:03:24.281 --> 00:03:28.981
Also es war auf jeden Fall total weird und es war so überlaufen,

00:03:29.041 --> 00:03:31.001
dass man halt auch warten musste vor den Räumen.

00:03:31.121 --> 00:03:34.641
Also man kam nicht zwangsläufig rein in die Räume, in die man rein wollte.

00:03:36.421 --> 00:03:39.881
Aber je länger ich da war, desto cooler wurde das eigentlich.

00:03:40.041 --> 00:03:43.041
Und wenn du halt einmal im Raum drin bist, dann kannst du da auch einfach nicht

00:03:43.041 --> 00:03:44.721
mehr rausgehen und dann ist es bisher safe.

00:03:47.121 --> 00:03:53.541
Genau, also war cool und Und wie gesagt, da habe ich ein paar sehr interessante Vorträge gesehen.

00:03:54.620 --> 00:03:57.740
Wo ich auch mal gucken werde, dass wir die Leute dann bei uns auch haben.

00:03:57.860 --> 00:04:01.700
Wer auch da einen Vortrag gehalten hat, war der Kadir Topal.

00:04:01.860 --> 00:04:03.300
Also das war eine Panel-Diskussion.

00:04:04.240 --> 00:04:10.100
Der war ja schon mal bei uns vor vielleicht sechs Jahren oder so, als er noch MDN leitete.

00:04:11.840 --> 00:04:15.560
Und genau, der ist jetzt bei Google, macht im Grunde auch, arbeitet auch für

00:04:15.560 --> 00:04:19.760
Open Web Docs, glaube ich, oder die Doku-Abteilung, die DX-Abteilung.

00:04:20.480 --> 00:04:24.300
Genau, und wer auch da war, war der Marius Kleidel, den wir mal zu Progressive

00:04:24.300 --> 00:04:27.480
Uploads da hatten. Ah, ja, ja, stimmt.

00:04:28.460 --> 00:04:36.940
Genau, der hat natürlich auch darüber gesprochen. Und den hier Local First Jan,

00:04:37.160 --> 00:04:39.160
oder? Wie heißt der mit Nachnamen?

00:04:40.580 --> 00:04:44.460
Jan Lehnert. Genau. Genau, die haben auch einen Vortrag.

00:04:44.580 --> 00:04:49.380
Es gab auch so Local First, Local First, hieß es Local First?

00:04:49.480 --> 00:04:52.340
Jetzt heißt es nicht Local First. Loflein first,

00:04:53.539 --> 00:04:57.899
Nee, doch, genau. Offline-First war das alte und Local-First ist das, wie es aktuell heißt.

00:04:58.519 --> 00:05:01.119
Genau, und das hat uns der Jan ja auch erzählt in der Folge,

00:05:01.239 --> 00:05:02.219
die wir mit ihm aufgenommen haben,

00:05:02.619 --> 00:05:07.959
dass es da vor allem eben so um kollaboratives Arbeiten und Peer-to-Peer-Netzwerken

00:05:07.959 --> 00:05:12.759
geht und das Ganze eben so ein bisschen kleinteiliger ist, also quasi so wie

00:05:12.759 --> 00:05:14.359
wir hier im Google Doc rumhantieren.

00:05:14.359 --> 00:05:22.259
Das wäre dann im Grunde so ein Szenario, was diese Local-First-Bewegung irgendwie beschäftigt.

00:05:24.119 --> 00:05:29.039
Genau, naja, auf jeden Fall, es gibt Ideen. Also ich habe auf jeden Fall von

00:05:29.039 --> 00:05:31.559
dieser Veranstaltung ist mir ein Foto im Gedächtnis geblieben.

00:05:31.819 --> 00:05:39.999
Und das ist vom VLC, der Videoplayer, wo da eine Person, die offenbar da den Stand bemannt hat,

00:05:40.779 --> 00:05:46.719
komplett angezogen war, so wie Gandalf, aber halt eben mit so diesen Verkehrsdingern,

00:05:46.859 --> 00:05:48.059
so diesem... Als Hut, oder?

00:05:48.519 --> 00:05:51.139
Ja, genau, als Hut. Die laufen da alle mit solchen Hüten rum.

00:05:51.859 --> 00:05:55.779
Also die, ich glaube, dass, ich weiß es nicht, was das, also das ist auch,

00:05:56.039 --> 00:05:58.699
genau, also werden unsere Hörenden, die da öfter hingehen, wahrscheinlich wissen,

00:05:58.939 --> 00:06:01.959
aber es liefen auf jeden Fall greichlich so Menschen rum, die,

00:06:02.039 --> 00:06:04.159
glaube ich, auch gar nicht zu Videolahnen gehören, oder vielleicht gehören die

00:06:04.159 --> 00:06:05.159
doch dazu, ich weiß es nicht.

00:06:05.739 --> 00:06:08.139
Oder werden von denen bezahlt, die werden von denen bezahlt.

00:06:08.139 --> 00:06:11.199
Genau, die hatten auf jeden Fall diese Dinge auf dem Kopf.

00:06:12.979 --> 00:06:16.359
Ich habe aber kein System drin erkannt. Also es war jetzt nicht so,

00:06:16.579 --> 00:06:18.859
dass alle offiziellen so rumliefen oder sowas.

00:06:20.835 --> 00:06:23.655
Nö, aber das sah auf jeden Fall sehr gut aus und dann dachte ich so,

00:06:23.755 --> 00:06:29.675
das ist gut, wenn man solche Leute frei rumlaufen lässt, passieren gute Dinge. Ja, das stimmt.

00:06:57.515 --> 00:07:03.075
Das stimmt. Es geht wirklich immer weiter. Du musst dich aktiv dafür entscheiden,

00:07:03.175 --> 00:07:07.955
einen Talk zu verpassen, wenn du in der Hallway dich mit Leuten treffen möchtest

00:07:07.955 --> 00:07:10.775
oder wenn du irgendwie mal was essen musst oder sowas.

00:07:11.715 --> 00:07:17.935
Ja. Genau. Oder du musst halt entsprechend bevorratet dahin gehen mit deinem Rucksack.

00:07:18.455 --> 00:07:22.735
Ja, du brauchst ja auch ohnehin einfach Pause zum Hirnauslüften früher oder später.

00:07:23.335 --> 00:07:26.695
Ach ja, und auch ein bisschen Sauerstoff ans Hirn ranlassen,

00:07:26.695 --> 00:07:30.515
weil die Räume natürlich auch sehr warm und arm an Sauerstoff wurden irgendwann.

00:07:30.715 --> 00:07:32.035
Das ist natürlich gar nicht mal so gut.

00:07:33.175 --> 00:07:37.315
Ja, aber war das Jahr 2026, meine Damen und Herren, wir könnten mal rausfinden,

00:07:37.415 --> 00:07:39.315
wie man irgendwie Belüftung macht.

00:07:39.475 --> 00:07:42.955
Es gab mehr als genug Anlass dazu. Ja, und Luftfilterung.

00:07:45.295 --> 00:07:49.735
Ja, tausch halt die Luft aus, dann brauchst du nicht große Filter. Ja, das stimmt.

00:07:50.275 --> 00:07:53.575
Ich meine, du musst sie eh austauschen, weil du willst ja, das,

00:07:53.615 --> 00:07:57.195
was du ja mit Sauerstoff fehlt, meinst, ist ja ein Überschuss an was anderem.

00:07:57.635 --> 00:08:00.075
Und das kannst du auch nicht wegfiltern, wenn du jetzt nicht irgendwie Apollo

00:08:00.075 --> 00:08:01.375
13 bist. Der Scheiß muss halt raus.

00:08:03.046 --> 00:08:07.306
Ja, ich habe ja auch immer mein CO2-Messgerät stehen. 668 steht da.

00:08:08.086 --> 00:08:12.206
533 habe ich am Start. Da im Norden in Kiel ist die Luft einfach immer besser.

00:08:13.426 --> 00:08:17.406
Entweder das oder die Kalibrierung von diesem möglichst günstigen Teil ist halt off.

00:08:17.766 --> 00:08:22.886
Aber ich muss mir ja nur sagen, vielleicht machst du jetzt mal ein Fenster auf.

00:08:24.086 --> 00:08:28.106
Und tatsächlich auf dieses Detail ist egal. Ja, genau.

00:08:30.646 --> 00:08:35.166
Diese Grenzwerte sind ja im Grunde auch so ein bisschen ein bisschen arbitrierer.

00:08:38.146 --> 00:08:42.026
Thematisch, wir haben diverse Fragen geschickt bekommen.

00:08:42.346 --> 00:08:45.886
Vielleicht machen wir da auch zwei Folgen draus, weil es einfach mehr sind,

00:08:46.026 --> 00:08:51.326
als wir diesmal bearbeiten können und manche auch irgendwie besser zusammenpassen als andere.

00:08:51.866 --> 00:08:54.866
Und weil natürlich jetzt, wo ihr wisst, dass das a thing ist,

00:08:54.966 --> 00:08:56.386
ihr uns noch viel mehr Fragen schickt.

00:08:56.746 --> 00:09:00.786
Genau, aber vielleicht filmen dass wir auch mal irgendwie so ein Formular auf

00:09:00.786 --> 00:09:05.026
die Seite packen, wo man einfach seine Frage reinhacken kann und das wäre auch

00:09:05.026 --> 00:09:06.646
mal ganz cool, oder? Ja, das stimmt.

00:09:07.526 --> 00:09:11.266
Vielleicht kann man das sogar aus dem Podcast, aus der Podcast-App,

00:09:11.286 --> 00:09:13.766
aus den Shownotes heraus irgendwie bedienbar machen. I don't know.

00:09:15.806 --> 00:09:18.706
Ich meine, es muss ein Formular sein, das am Ende irgendwo ein Post-Request

00:09:18.706 --> 00:09:22.486
hinballert, wenn man da jetzt nicht irgendwie das mit Next.js oder so overengineert. Ja.

00:09:23.346 --> 00:09:25.126
Es könnte funktionieren. Ansonsten ist es halt ein Link.

00:09:26.826 --> 00:09:29.426
Ich glaube, das geht. Ich glaube, unsere Hörerschaft ist in der Lage,

00:09:29.486 --> 00:09:30.306
auf einen Link zu drücken.

00:09:30.446 --> 00:09:35.006
Naja, genau, aber man hört uns ja mutmaßlich wahrscheinlich zwischen Tür und Angel.

00:09:35.166 --> 00:09:38.986
Also mir geht es oft so, dass ich dann keinen Rechner zur Hand habe,

00:09:39.246 --> 00:09:47.046
wenn ich einen Podcast höre und dann der Podcast von mir irgendwie Aktionen verlangt.

00:09:49.714 --> 00:09:53.734
Ja gut, aber ich glaube, das ist durch Links schon ganz gut abgebildet. Ich glaube, das geht.

00:09:55.454 --> 00:10:00.874
Ich vertraue an die Macht des Links. Das hat sich, glaube ich, bewährt.

00:10:01.954 --> 00:10:04.274
Ich werde es recherchieren, was man machen kann.

00:10:05.614 --> 00:10:07.954
Genau, aber wir haben uns auf jeden Fall ein paar Fragen ausgesucht,

00:10:08.174 --> 00:10:14.494
die wir jetzt heute mal machen wollen, beantworten wollen oder drüber philosophieren möchten.

00:10:15.434 --> 00:10:19.034
Vier Stück. Weiß aber nicht, ob wir alle vier schaffen. Wahrscheinlich ufert

00:10:19.034 --> 00:10:21.914
das alles aus und wir schaffen nicht alle vier, wie das immer so ist.

00:10:21.994 --> 00:10:23.974
Ist aber auch nicht schlimm. Abwarten, abwarten.

00:10:25.154 --> 00:10:27.474
Genau, und die erste Frage, die wir jetzt hier auf der Liste haben,

00:10:27.474 --> 00:10:31.214
ist zum Thema Progressive Enhancement von Tom.

00:10:32.414 --> 00:10:38.154
Da wäre die Frage, warum tun sich EntwicklerInnen so schwer mit Progressive Enhancement?

00:10:38.334 --> 00:10:42.134
Wir predigen es. Es funktioniert in der Theorie und auch in der Praxis,

00:10:42.294 --> 00:10:45.914
aber die Leute da draußen verwenden es eher wenig, um neue Webfeatures heute

00:10:45.914 --> 00:10:48.814
schon zu nutzen und warten lieber auf universelle Unterstützung.

00:10:51.514 --> 00:10:55.674
Okay. Erste Frage. Stimmt das?

00:10:57.334 --> 00:10:59.954
Das weiß ich nicht. Das würde ich mich eigentlich auch fragen.

00:11:00.094 --> 00:11:04.514
Allerdings muss man dazu sagen, dass der Tom bei Google arbeitet und ich glaube,

00:11:04.674 --> 00:11:09.694
dass er auch über ein bisschen mehr Datenbasis verfügt als wir.

00:11:10.754 --> 00:11:14.654
Vielleicht bezieht er sich auch auf den Web-Almanac, der solche Dinge untersucht.

00:11:15.974 --> 00:11:20.114
Ja, aber kann der das wirklich erfassen, weil Progressive Enhancement,

00:11:20.274 --> 00:11:25.874
die Grundidee ist halt, man verwendet neue Features, um eine Webseite oder Applikation

00:11:25.874 --> 00:11:28.414
zu verbessern, wenn die Features da sind und wenn sie nicht da sind,

00:11:28.514 --> 00:11:29.874
funktioniert es trotzdem auf irgendeine Weise.

00:11:31.125 --> 00:11:34.805
Das heißt zum Beispiel irgendwie mit Formulader, das wir jetzt gerade fantasiert

00:11:34.805 --> 00:11:37.945
haben, müsste man dann irgendwie so bauen, dass es halt irgendwie funktioniert,

00:11:38.025 --> 00:11:41.865
wenn es unterstützt ist und nicht zu einem Link auf dem Google Form oder so

00:11:41.865 --> 00:11:43.365
degeneriert, wenn es nicht unterstützt ist.

00:11:43.605 --> 00:11:45.825
Aber auf jeden Fall kann man am Ende seine Daten übermitteln.

00:11:45.945 --> 00:11:47.065
Das wäre halt so eine Idee dahinter.

00:11:47.065 --> 00:11:50.325
Vielleicht kann man auch sagen, dass das Progressive Enhancement ja so ein Begriff

00:11:50.325 --> 00:11:55.125
ist, den man tendenziell benutzt, um neue Features irgendwie einzusetzen bei

00:11:55.125 --> 00:12:00.305
sich und einen Fallback zu bauen, wenn es eben noch nicht implementiert ist.

00:12:00.965 --> 00:12:04.765
Dann gibt es ja noch den Gegenpart, das ist Graceful Degradation.

00:12:04.905 --> 00:12:08.725
Das ist also, wenn man im Grunde davon ausgeht, dass die meisten Browser irgendwas können,

00:12:09.425 --> 00:12:13.305
aber eben dann irgendwie vielleicht doch noch ein alter Browser kommt und man

00:12:13.305 --> 00:12:16.925
dem irgendwie, den ich die Tür vor der Nase zuschlagen will,

00:12:17.005 --> 00:12:22.025
dann fällt man irgendwie auf so eine etwas schlechtere User Experience zurück,

00:12:22.285 --> 00:12:23.365
die aber auch funktioniert.

00:12:24.465 --> 00:12:27.585
Aber im Grunde sind die dasselbe. Genau, das ist das Ding.

00:12:27.845 --> 00:12:32.005
Die sind dasselbe. Es ist halt ein Muster, um Features einzusetzen,

00:12:32.245 --> 00:12:36.105
kombiniert mit einer Intention und im Falle von diesem Unterschied zwischen

00:12:36.105 --> 00:12:40.305
Progressive Enhancement und Grateful Degradation ist es ja dann sozusagen noch eine dritte Ebene,

00:12:40.605 --> 00:12:43.625
nämlich nicht nur eine Art und Weise, eine Technologie einzusetzen,

00:12:43.825 --> 00:12:46.545
sondern auch irgendwie eine Philosophie dahinter, eine Zielsetzung.

00:12:46.545 --> 00:12:50.525
Und ich weiß nicht, ob man das aus irgendwelchen Daten ableiten kann.

00:12:50.805 --> 00:12:55.985
Du kannst ja nur sehen, Feature wird verwendet und du kannst ja notwendigerweise

00:12:55.985 --> 00:12:58.985
aus Daten noch nicht mal irgendwie ableiten, wie denn der Fall aussieht,

00:12:59.065 --> 00:13:00.225
wenn das Feature nicht funktioniert.

00:13:00.945 --> 00:13:05.265
Kannst du aus den Daten erkennen, ob es Progressive Enhancement ist oder nicht.

00:13:05.465 --> 00:13:08.305
Du kannst es halt in den einfachsten Fällen, so wie hier mit unserem Zencaster,

00:13:08.385 --> 00:13:11.065
mit dem wir hier aufnehmen, da kannst du halt erkennen, weil wenn du da mit

00:13:11.065 --> 00:13:13.865
Firefox drauf gehst, sagt er, du kommst hier nicht rein. Ja.

00:13:15.344 --> 00:13:18.924
Progressive Enhancement oder Gracious Degradation wäre, wenn es dann auch mit

00:13:18.924 --> 00:13:23.684
Firefox funktionieren würde, gegebenenfalls weniger gut, weil er halt irgendwelche Features nicht hat.

00:13:24.184 --> 00:13:27.144
Ja, so. In dem einfachen Fall kannst du es feststellen. Genau,

00:13:27.224 --> 00:13:32.884
ich denke mal, dass wahrscheinlich seine Frage daherkommt, dass er ja beteiligt ist daran,

00:13:33.384 --> 00:13:39.504
neue Webtechnologien auszurollen und sie dann wahrscheinlich auch im Nachgang tracken.

00:13:40.464 --> 00:13:46.424
Werden die aufgenommen von der Programmiererschar oder irgendwie links liegen gelassen.

00:13:47.984 --> 00:13:53.264
Genau, und dass er wahrscheinlich beobachtet, dass Entwicklende da sehr zurückhaltend

00:13:53.264 --> 00:13:57.644
sind, was solche neuen Features angeht, obwohl sie, wenn sie Progressive Enhancement

00:13:57.644 --> 00:14:02.604
praktizieren würden, sie diese Features einsetzen könnten. Auch jetzt schon.

00:14:03.024 --> 00:14:08.324
Also manche nicht, sowas wie CSS-Nesting oder, weiß ich nicht,

00:14:08.584 --> 00:14:13.464
Scopes und Layers und so, das ist halt so ein Make-or-Break-Ding,

00:14:13.804 --> 00:14:15.284
da muss man sich das gut überlegen,

00:14:15.764 --> 00:14:18.924
aber bei anderen Dingen geht das ja theoretisch schon besser.

00:14:19.984 --> 00:14:23.524
Ja, du könntest ja theoretisch sagen, View Transitions baue ich halt ein und

00:14:23.524 --> 00:14:25.044
wenn es nicht geht, dann geht es halt nicht. Genau.

00:14:27.618 --> 00:14:31.258
Ja, also nehmen wir da mal an, dass das tatsächlich stimmt.

00:14:31.818 --> 00:14:37.238
Ich würde halt immer nur bei so Sachen, wo ich halt wirklich Zweifel daran habe,

00:14:37.258 --> 00:14:41.038
ob man die wirklich hart aus Daten herholen kann, die nicht irgendwelche Umfragen sind.

00:14:41.158 --> 00:14:44.138
Seitdem bei Umfragen habe ich jetzt nicht allzu viel Vertrauen in unsere Branche,

00:14:44.158 --> 00:14:46.378
da irgendwas Konklusives draus zu ziehen.

00:14:47.398 --> 00:14:49.918
Aber nehmen wir mal an, das stimmt. Shep, was ist dein Take?

00:14:50.038 --> 00:14:51.058
Warum tut man sich damit so schwer?

00:14:53.918 --> 00:14:59.818
Tja, gute Frage. Danke. Also ich mache das ja schon gerne.

00:14:59.998 --> 00:15:03.238
Ich setze viele Dinge möglichst früh ein.

00:15:04.518 --> 00:15:08.998
Zum einen ist es vielleicht einfach, dass die Dinge zu den Leuten noch immer

00:15:08.998 --> 00:15:13.818
nicht so richtig durchdringen, also dass einfach die Wahrnehmung dieser neuen

00:15:13.818 --> 00:15:17.818
Features irgendwie nicht so gegeben ist.

00:15:18.778 --> 00:15:24.838
Vor allem, weil die breite Masse der Leute sich ja auch oder im Web vielleicht

00:15:24.838 --> 00:15:30.198
gar nicht so vorgegeben mit Frontend beschäftigen und da dann Bleeding Edge machen,

00:15:30.518 --> 00:15:36.898
sondern sich mit vielen verschiedenen Facetten beschäftigen und dann eben solche

00:15:36.898 --> 00:15:42.018
Dinge vielleicht gar nicht mitbekommen oder es für die auch nicht so super interessant

00:15:42.018 --> 00:15:45.038
ist, wenn sie darüber stolpern, ob sie das jetzt einsetzen sollen oder nicht.

00:15:45.038 --> 00:15:50.958
Oder sie stützen sich auf irgendwelche Frameworks, die das wiederum noch nicht implementieren.

00:15:51.778 --> 00:15:54.558
Es ist super, wie jetzt, obwohl wir über die Meta-Ebene gesprochen haben,

00:15:54.658 --> 00:16:00.078
das komplett anders lesen, was die sozusagen Konsequenz ist aus der Tatsache,

00:16:00.138 --> 00:16:01.518
dass wir annehmen, dass das eine Frage ist.

00:16:01.758 --> 00:16:06.118
Weil, so wie ich das lese, ist, statt Progressive Enhancement gibt es halt ein

00:16:06.118 --> 00:16:09.398
Splash-Screen, du kommst hier nicht rein, wenn du nicht der Browser bist,

00:16:09.498 --> 00:16:13.138
mit dem die Entwickler gerade gearbeitet haben. So lese ich das eher.

00:16:15.227 --> 00:16:19.147
Ja, aber er schreibt ja auch, aber die Leute da draußen verwenden es eher wenig,

00:16:19.287 --> 00:16:23.227
um neue Webfeatures heute schon zu nutzen und warten lieber auf universelle Unterstützung.

00:16:23.767 --> 00:16:28.147
Also das heißt ja eigentlich, also für mich heißt das, dass er die Beobachtung

00:16:28.147 --> 00:16:33.067
macht, dass die Leute eben schauen, wie sieht es aus mit dem Browser-Support.

00:16:33.067 --> 00:16:38.367
Oha, sieht nicht so gut aus, dann beschäftige ich mich damit erstmal auch nicht.

00:16:38.847 --> 00:16:42.307
Also ich versuche es irgendwie gar nicht in den Browsern auszurollen,

00:16:42.367 --> 00:16:47.647
die es unterstützen, sondern ich habe da so Wiedervorlage für in einem Jahr

00:16:47.647 --> 00:16:50.107
oder was weiß ich, oder wenn ich dann nochmal drüber stolper.

00:16:52.247 --> 00:16:55.767
Ja, deckt sich halt nicht mit meiner Erfahrung. Also es gibt halt in meiner

00:16:55.767 --> 00:16:58.947
Wahrnehmung die Make-or-Break Features, wenn die halt im Safari,

00:16:59.107 --> 00:17:01.927
sind wir mal ehrlich, nicht funktionieren, dann ist halt nicht. Ja.

00:17:02.567 --> 00:17:05.607
Aber wenn das halt irgendwie so was ist, wo man irgendwie sagen könnte,

00:17:05.607 --> 00:17:08.687
mit etwas mehr Aufwand kriege ich es halt irgendwie auch in Firefox zum Funktionieren,

00:17:08.887 --> 00:17:10.467
dann schmeißt man den lieber raus.

00:17:13.661 --> 00:17:17.801
Tja, aber deine Theorie ist also, wenn ich es richtig verstanden habe,

00:17:18.141 --> 00:17:20.941
die Leute kriegen gar nicht mit, dass neue Features da sind und wir brauchen

00:17:20.941 --> 00:17:24.701
einfach mehr Developer Relations, die den Leuten beibiegen, guck mal hier, was geht.

00:17:26.281 --> 00:17:29.981
Genau. Und wir finden das sehr interessant. Wir beschäftigen uns damit den ganzen

00:17:29.981 --> 00:17:34.261
Tag. Für uns ist das irgendwie auch ein bisschen Spielzeug, neue Features.

00:17:34.621 --> 00:17:38.961
Wir handeln damit gerne rum und unsere Hörenden wahrscheinlich tendenziell auch.

00:17:38.961 --> 00:17:45.761
Aber für manche Leute ist es vielleicht auch eher nochmal so Komplexität,

00:17:45.841 --> 00:17:48.541
die sie sich einkaufen, auch wenn sie dann irgendwelche Feature-Tests einbauen

00:17:48.541 --> 00:17:51.181
müssen oder Fallbacks sich überlegen müssen.

00:17:51.941 --> 00:17:55.661
Oder sie haben vielleicht auch einfach irgendwie Leute in der Chefetage,

00:17:55.801 --> 00:17:59.341
die dann nicht verstehen, warum haben wir das Feature denn jetzt da und warum

00:17:59.341 --> 00:18:00.841
ist das jetzt auf dem anderen Dings nicht?

00:18:01.201 --> 00:18:04.001
So dieses, die Pixel müssen überall gleich aussehen Problem,

00:18:04.681 --> 00:18:08.121
nur eben auf Features übertragen und dann sagen die so, nee,

00:18:08.821 --> 00:18:12.501
mein Leben ist schon kompliziert genug, ich muss mich noch um so viele andere Dinge kümmern,

00:18:13.461 --> 00:18:18.121
ich mach das jetzt erstmal nicht und ich kann es mir nochmal irgendwo angucken,

00:18:18.181 --> 00:18:20.341
wenn es supported wird, so. Hm?

00:18:22.267 --> 00:18:25.727
Das ist ja wie, wenn man so irgendwie ein Webprodukt baut und denkt so,

00:18:26.227 --> 00:18:29.267
boah, das ist so toll, die Leute, die werden sich den ganzen Tag nur mit meiner

00:18:29.267 --> 00:18:30.507
tollen UI beschäftigen,

00:18:30.767 --> 00:18:35.227
machen die aber nicht, weil du bist nur ein Baustein von ganz vielen in deren

00:18:35.227 --> 00:18:39.847
Leben und die haben Stress, die sind müde und die müssen sich um tausend andere

00:18:39.847 --> 00:18:42.627
Sachen kümmern und dann sagen die halt so, ja, nee, lass mal.

00:18:44.307 --> 00:18:50.227
Ich glaube, das Beste tatsächlich ist was so die Adoption Rate angeht das irgendwie

00:18:50.227 --> 00:18:55.267
in viel genutzte Frameworks solche Features reinzubekommen oder in Libraries

00:18:55.267 --> 00:18:57.947
hineinzuverpacken, die wiederum für Menschen,

00:18:58.267 --> 00:19:02.127
also wo das dieses ganze Progressive Enhancement auch mit drin gekapselt ist,

00:19:02.187 --> 00:19:03.747
beziehungsweise irgendwie Polyfills und

00:19:03.747 --> 00:19:11.007
Fallbacks die man einfach dann NPM installieren kann einhängt und nutzt,

00:19:12.387 --> 00:19:15.307
Ist das dann Progressive Enhancement?

00:19:17.707 --> 00:19:23.807
Wenn dieses Paket dann intern Progressive Enhancement praktiziert,

00:19:24.587 --> 00:19:32.307
dann dir als konsumierender Entwickler ist es dann am Ende egal.

00:19:33.227 --> 00:19:37.287
Aber du brauchst halt nur die Garantie von irgendwem, du kannst es benutzen,

00:19:37.387 --> 00:19:43.407
es ist einfach einzubinden, es macht nichts kaputt und geht in jedem Browser so gut, wie es geht.

00:19:43.927 --> 00:19:48.907
Dann kann nur noch dein Chef ankommen und sagen, warum habe ich hier keinen

00:19:48.907 --> 00:19:52.007
Geolocation-Knopf in dem einen Browser und im anderen schon oder so.

00:19:53.807 --> 00:19:57.767
Das ist blöd, mach das weg oder mach das gleich. Und dann sagst du so,

00:19:57.927 --> 00:19:59.367
okay, das kann ich dann wiederum nicht, tschö.

00:20:03.255 --> 00:20:09.635
Okay. Also ich glaube ja, das ist eine Idee, die lässt sich,

00:20:09.675 --> 00:20:13.895
glaube ich, den Entwicklerinnen und Entwicklern recht einfach verkaufen.

00:20:15.295 --> 00:20:20.455
Weil, ich meine, kennt man ja aus der Alltagserfahrung unterschiedliche Geräte und Browser.

00:20:21.235 --> 00:20:23.615
Also du brauchst ja nur irgendeine Art von Smartphone zu haben,

00:20:23.835 --> 00:20:26.975
um zu wissen, dass das nicht das gleiche ist, was dein Laptop,

00:20:27.055 --> 00:20:27.995
Tablet, was auch immer macht.

00:20:28.755 --> 00:20:32.895
Und dass da halt eben unterschiedliche UIs und unterschiedliche Verhaltensweisen,

00:20:33.035 --> 00:20:34.835
unterschiedliche Performance-Charakteristiken am Start sind,

00:20:35.535 --> 00:20:39.095
ist glaube ich jedem unmittelbar klar und ich glaube auch diese Chefetage von

00:20:39.095 --> 00:20:43.155
der Fraktion, jeder Pixel muss gleich sein, ist jetzt nicht unbedingt eine wachsende

00:20:43.155 --> 00:20:46.655
Zielgruppe, weil die halt auch der Alltagserfahrung nicht entkommen.

00:20:47.955 --> 00:20:53.335
Ich glaube halt, Progressive Enhancement ist einfach mit dem gegebenen Tooling,

00:20:53.555 --> 00:20:57.635
das wir als Entwicklerinnen und Entwickler im Moment haben, einfach ein bisschen zu schwer.

00:20:58.655 --> 00:21:02.575
Also selbst wenn du irgendwie das krasseste Büro-Setup aller Zeiten hast,

00:21:03.055 --> 00:21:05.875
machst du ja wahrscheinlich sowas wie, ich tippe irgendwo Code,

00:21:06.155 --> 00:21:11.195
schaue ich meine Agents durch die Gegend und dann gucke ich halt in einem Browser,

00:21:11.415 --> 00:21:12.515
ob das korrekt aussieht.

00:21:13.155 --> 00:21:17.835
Aber um tatsächlich Progressive Enhancement so zu machen, wie das jetzt so gedacht

00:21:17.835 --> 00:21:20.335
ist, müsstest du ja auch die Gegenprobe haben.

00:21:20.535 --> 00:21:25.135
Du müsstest das ja in allen Browsern auf allen Devices irgendwie super gleichzeitig

00:21:25.135 --> 00:21:27.695
machen und das passiert halt nicht.

00:21:29.073 --> 00:21:34.153
Also die Anzahl der schlechten Mobile-Designs sagt mir ja schon,

00:21:34.353 --> 00:21:38.173
dass alleine sowas wie, guck halt, dass es auf allen möglichen Bildschirmbreiten

00:21:38.173 --> 00:21:43.093
irgendwie brauchbar aussieht, weniger häufig ist, als irgendwie gedacht.

00:21:44.293 --> 00:21:48.873
Ja, das ist ja so ein bisschen geschuldet dieser Multidimensionalität des Testens.

00:21:49.153 --> 00:21:53.793
Also du musst Light-Mode, Dark-Mode, kleines Gerät, mittelgroßes Gerät,

00:21:54.233 --> 00:22:00.753
Tablet, mittelgroßer Laptop, Riesenbildschirm und langsame schnelle Verbindung.

00:22:00.853 --> 00:22:03.713
Langsames Gerät, schnelles Gerät. Richtig, richtig. Genau, all diese Dinge.

00:22:05.453 --> 00:22:09.153
Und da geht dir das halt durch. Da gibt es dann auch ganz viel mehr Facetten,

00:22:09.253 --> 00:22:14.073
sowas wie Force Colors Mode und wie funktioniert die Seite, wenn du JavaScript abschaltest.

00:22:14.193 --> 00:22:15.893
Das teste ich auch immer noch mal gerne.

00:22:16.233 --> 00:22:21.993
Also, du könntest dich halt darauf beschränken, irgendwie so die Dinge abzugreifen,

00:22:22.393 --> 00:22:24.033
die für dich grundsätzlich relevant sind.

00:22:24.913 --> 00:22:27.933
Du könntest dir ja zumindest zum Ziel setzen, irgendwie ein Minimum zu unterstützen

00:22:27.933 --> 00:22:30.853
und könntest jetzt sagen, keine Ahnung, ich bin ein Grafikprogramm.

00:22:31.653 --> 00:22:34.433
Wenn der Kontrast jetzt für die Farbenblinden nicht ausreicht,

00:22:34.533 --> 00:22:36.853
ist das halt irgendwie auch so ein bisschen so ein Zielgruppen-Miss-a-Match

00:22:36.853 --> 00:22:38.793
und die schmeiße ich dann jetzt mal unter den Bus.

00:22:38.973 --> 00:22:41.953
Könnte man ja irgendwie sich zusammenreiben, dass jemand diese Überlegung macht.

00:22:42.933 --> 00:22:45.853
Aber selbst wenn du das sozusagen einfach nur auf ein Subset der Möglichkeiten

00:22:45.853 --> 00:22:47.853
beschränkst, also von allem, was du gerade aufgelistet hast,

00:22:48.213 --> 00:22:52.733
du sagst, um irgendwie ein Viertel davon will ich mich ernsthaft aktiv kümmern, ist das mega schwer.

00:22:53.493 --> 00:22:56.533
Ja, das ist auch viel Arbeit. Also genau, was wir auch noch nicht hatten,

00:22:56.533 --> 00:22:58.133
ist irgendwie gesumter Text.

00:22:58.393 --> 00:23:04.113
Also wie funktioniert das dann? Also es gibt einfach so viele Ebenen und ich

00:23:04.113 --> 00:23:07.553
schaffe das auch nicht, aber bei den Progressive Enhancement-Themen,

00:23:07.713 --> 00:23:09.213
da ist es ja in der Regel so, dass du,

00:23:10.013 --> 00:23:13.533
dass es irgendwie neue Technologie ist und dann gucke ich mir die Support-Table

00:23:13.533 --> 00:23:17.873
an dafür, also auf Basis der entscheide ich ja auch irgendwie,

00:23:18.953 --> 00:23:24.333
so will ich das jetzt benutzen oder nicht und da sehe ich ja dann eigentlich auch, welche Browser,

00:23:25.266 --> 00:23:28.326
supporten das nicht und dann teste ich die natürlich, weil ich weiß,

00:23:28.566 --> 00:23:31.686
also die sind eine potenzielle Fehlerquelle.

00:23:32.886 --> 00:23:36.726
Ja, aber dann testest du die natürlich? Also wirklich immer?

00:23:37.166 --> 00:23:39.686
Auch jedes Mal? Wenn du dann den Hotfix ausrollst?

00:23:40.726 --> 00:23:44.986
Nicht immer, aber wenn ich eben dieses Feature gerade neu implementiere oder

00:23:44.986 --> 00:23:48.866
anbinde, dann gucke ich mir das natürlich schon an, wie es in den verschiedenen

00:23:48.866 --> 00:23:50.826
Browsern am Ende dann funktioniert.

00:23:51.366 --> 00:23:55.006
Also was meines Erachtens wirklich helfen würde, wäre, es gibt ja so Browser

00:23:55.006 --> 00:23:56.526
für Mobile Development, die

00:23:56.526 --> 00:23:59.046
dir halt wirklich so irgendwie mehrere Viewport-Größen in eins anbieten.

00:23:59.666 --> 00:24:01.646
Polypane zum Beispiel. Ja, Polypane heißt er, genau.

00:24:03.446 --> 00:24:07.426
Das Ding braucht halt irgendwie Multi-Engine-Fähigkeit und die Fähigkeit,

00:24:07.586 --> 00:24:09.646
dass man da halt eben einfach Features ausschaltet.

00:24:12.166 --> 00:24:15.326
Der muss halt simulieren, hier, ich mach das jetzt irgendwie mit,

00:24:15.546 --> 00:24:17.026
keine Ahnung, was der für eine Engine unter der Haube hat.

00:24:17.986 --> 00:24:20.946
Chromium. Genau, Chromium, aber dem nehme ich jetzt eigentlich das Positioning weg.

00:24:22.421 --> 00:24:26.561
Für einen Viewport, damit ich halt eben jederzeit simuliert habe,

00:24:26.701 --> 00:24:28.581
auf einen Blick, was da geht.

00:24:29.101 --> 00:24:32.221
Also, um jetzt sozusagen auf Toms Frage zurückzukommen, das ist halt einfach

00:24:32.221 --> 00:24:34.801
ein Problem der Beobachtbarkeit.

00:24:35.321 --> 00:24:39.021
Progressive Financement ist halt, wie gesagt, eine Idee und die Effekte davon

00:24:39.021 --> 00:24:42.621
sind halt schwer zu beobachten, außer durch, man muss halt einfach immer dran

00:24:42.621 --> 00:24:45.221
denken, immer alles zu testen und das funktioniert halt nicht.

00:24:46.501 --> 00:24:49.261
Ja, also ich kann da eine Browser-Stack immer noch sehr empfehlen,

00:24:49.381 --> 00:24:54.181
also benutze ich immer noch sehr gerne, auch wenn es nicht so ganz günstig ist,

00:24:54.261 --> 00:24:56.461
aber Das ist zum Beispiel schon mal ein Problem?

00:24:56.741 --> 00:25:02.401
Das ist schon mal ein Problem, genau, aber du testest eben, du kannst auf allen,

00:25:03.421 --> 00:25:07.381
Plattformen alle möglichen auch historischen Browser testen.

00:25:08.421 --> 00:25:12.681
Ja, guck mal, du musst dafür aktiv zum Testen übergehen. Was ich halt nicht

00:25:12.681 --> 00:25:14.701
mache, wenn ich einfach an der Webseite rumschreibe, ist testen.

00:25:15.201 --> 00:25:17.641
Ich habe halt meinen Code-Editor neben meinem Browser-Festor,

00:25:17.641 --> 00:25:21.121
ich habe Auto-Reload angemacht und sobald ich neu lade, sehe ich den Effekt

00:25:21.121 --> 00:25:23.801
und wenn ich Mist gebaut habe, sehe ich es instantan und kann es reparieren,

00:25:23.881 --> 00:25:24.721
ohne darüber nachzudenken.

00:25:24.801 --> 00:25:30.001
Sobald ich prozedual einen Test durchführe und das nicht wirklich von irgendwelchen

00:25:30.001 --> 00:25:35.481
Profis, also halt so Software-Testern, gemacht wird, kann das halt nicht klappen.

00:25:36.701 --> 00:25:41.101
Also es liegt auch in der Verantwortung der Kolleginnen und Kollegen,

00:25:42.141 --> 00:25:46.221
also weil man ja auch als Programmierer oft den Wald vor lotter Bäumen nicht

00:25:46.221 --> 00:25:48.921
mehr sieht und man oft den Happy Path noch testet.

00:25:49.961 --> 00:25:55.421
Genau, da braucht man auch viele testende HelferInnen.

00:25:58.574 --> 00:26:01.554
Und solange du die nicht hast, musst du die halt so gut das geht mit irgendwelchen

00:26:01.554 --> 00:26:03.174
Tooling erschlagen und das sehe ich halt nicht.

00:26:04.214 --> 00:26:07.274
Ich habe halt nirgendwo in meinem Browser den Knopf, dieses Dropdown,

00:26:07.394 --> 00:26:10.114
wo ich sagen kann, so ein Multi-Select, wo ich sagen kann, was passiert,

00:26:10.174 --> 00:26:12.474
wenn ich dieses, dieses, dieses, dieses Feature deaktiviere.

00:26:13.834 --> 00:26:16.394
Ich kann so grobe Sachen machen, wie simuliere mir Light Mode.

00:26:16.614 --> 00:26:18.314
Ich kann sowas machen, wie mach Skript aus.

00:26:19.854 --> 00:26:22.154
Aber eigentlich ist das ja nicht, was ich brauche, um Progresivation mit zu

00:26:22.154 --> 00:26:26.314
betreiben. Ich muss halt wirklich den Knopf haben, mach Anchor Positioning aus. Mhm.

00:26:30.343 --> 00:26:33.043
Und das war die kostenlose Startup-Idee für heute.

00:26:35.323 --> 00:26:39.903
Schep, nächste Hörerfrage von so einem Typen namens Peter. Fragt provokant in

00:26:39.903 --> 00:26:42.303
den Raum, was sind die besten Bildformate?

00:26:42.603 --> 00:26:47.203
Ich glaube, der richtet sich damit an dich, der du ja Performance-Papst bist.

00:26:48.043 --> 00:26:53.143
Was sind die besten Bildformate? JPEG und PMG ist ja irgendwie nicht mehr das Mittel der Wahl, ne?

00:26:55.223 --> 00:27:01.123
Nee, ähm, die Frage ist, kommt die Frage von Peter, wir hatten nämlich auch

00:27:01.123 --> 00:27:07.703
ein Hörer, der glaube ich irgendwann mal frug, ob wir über Bildformate sprechen könnten. Ja.

00:27:08.663 --> 00:27:11.723
Wahrscheinlich hast du, oder hast du das einfach relayed?

00:27:12.803 --> 00:27:17.903
Nö, nö, nö, ich mache mal zur Abwechslung mal wieder eine Webseite mit Bildern

00:27:17.903 --> 00:27:21.043
drin und habe halt festgestellt, irgendwie so, ah, guck mal,

00:27:21.163 --> 00:27:25.083
dieses JPEG ist ja irgendwie in der Größenordnung größer als ein äquivalent

00:27:25.083 --> 00:27:27.643
aussehendes alternatives Format. Ja.

00:27:29.083 --> 00:27:31.943
Ich dachte so, ich hänge mich mal in den State of the Art rein,

00:27:31.963 --> 00:27:35.383
war die Überlegung. Äh, war die Überlegung von diesem Hörer, der da fragt. Ja.

00:27:36.883 --> 00:27:43.343
Also was sind die besten Bildformate? Da kommt es ja immer so ein bisschen, oder it depends, ne?

00:27:44.143 --> 00:27:50.383
Natürlich. Was du für Features haben willst. Vielleicht kann man vorab sagen,

00:27:50.603 --> 00:27:55.083
dass JPEG ja so ein waschechtes, reines Bildformat ist.

00:27:55.363 --> 00:28:02.703
Also während moderne Bildformate, die wir haben, wie WebP und AVIV auch eigentlich

00:28:02.703 --> 00:28:05.003
nur so Abfallprodukte sind von Video Codex.

00:28:05.783 --> 00:28:17.463
Also WebP ist ja ein Abfallprodukt von VP9, VP8, VP9 und AWEF ist ein Abfallprodukt von AV1.

00:28:20.103 --> 00:28:23.603
An sich ist das erstmal nicht schlecht, also ist ja auch cool,

00:28:23.863 --> 00:28:27.183
man hat Arbeit da reingesteckt und warum das nicht auch für ein Bildformat nutzen,

00:28:28.093 --> 00:28:34.573
Aber das bedeutet auch, dass die Bildformate unterschiedliche Fähigkeiten haben.

00:28:34.893 --> 00:28:45.293
Also zum Beispiel JPEG kann Progressive Decoding, während WebP und AWEF das nicht können.

00:28:45.293 --> 00:28:49.913
Beziehungsweise AWEF, also weil das gibt es im Video nicht.

00:28:50.153 --> 00:28:53.793
Also es gibt keine einzelnen Videoframes, die progressiv decoded werden.

00:28:53.893 --> 00:28:57.413
Also es gibt es einfach nicht. Es gibt entweder nun ganz oder gar nicht.

00:28:59.153 --> 00:29:03.553
Und der Jake Archibald hatte neulich ein bisschen was zusammengeschrieben,

00:29:03.673 --> 00:29:10.873
wo er versucht hat, auch progressives Laden oder Darstellen in AWEF hineinzuprügeln.

00:29:11.233 --> 00:29:13.613
Hat es auch so grob geschafft.

00:29:14.773 --> 00:29:20.713
Aber immer noch weniger elegant, als das bei JPEG der Fall gewesen wäre. Aber Moment, wie?

00:29:21.233 --> 00:29:23.913
Weil ich meine, ich stelle mir ja wirklich vor, man nehme Videocodec,

00:29:24.233 --> 00:29:28.173
reiße da halt die Bildtechnik raus, weil Videocodecs sind halt angewandte Magie.

00:29:28.433 --> 00:29:30.373
Es gibt schlechtere Stellen, an denen man sich bedienen kann.

00:29:31.253 --> 00:29:34.113
Aber wie du sagtest, die haben ja sowas nicht, weil warum würden sie?

00:29:34.213 --> 00:29:37.233
Wie macht man das denn progressiv? Kannst du mir das kurz zusammenfassen?

00:29:37.473 --> 00:29:42.473
Ja, also ich glaube, die AWEF hat da auch so ein Layer-Konzept,

00:29:42.473 --> 00:29:45.273
Aber irgendwie eins, das nicht so richtig funktioniert.

00:29:45.833 --> 00:29:50.853
Und du kannst dann in einem Pfeil mehrere Layer hineinstecken.

00:29:51.053 --> 00:29:57.093
Und wenn das eine Layer eben in den ersten, also zu Anfang kommt,

00:29:57.253 --> 00:30:01.593
das kleinere Layer, dann kannst du das eben schon mal zwischendrin darstellen

00:30:01.593 --> 00:30:03.753
und dann wird das andere Layer nachgeladen.

00:30:04.353 --> 00:30:09.953
Und bei JPEG ist das aber viel feingranularer, also in AVIF ist es eine Duplizierung der,

00:30:10.853 --> 00:30:15.273
Bildinformationen, also du hast im Grunde in einer Datei hast du zwei Bilder

00:30:15.273 --> 00:30:19.973
vom gleichen Motiv, einmal ein vollaufgelöstes, einmal eben ein kleines Preview-Dings.

00:30:22.633 --> 00:30:28.373
Aber es ist insofern trotzdem okay, als dass AVIF generell so viel besser komprimiert,

00:30:28.573 --> 00:30:29.813
dass man das vielleicht irgendwie,

00:30:30.839 --> 00:30:35.879
okay finden kann. Ich meine, es ist ja wirklich ein Mordsunterschied im Vergleich

00:30:35.879 --> 00:30:39.719
zu JPEG, je nach Bild natürlich, aber da merkt man halt tatsächlich schon,

00:30:39.779 --> 00:30:45.039
dass das eine einfach neuer ist, auch wenn es nicht so ein perfekter Match ist auf die Anforderungen,

00:30:45.839 --> 00:30:50.979
aber es gewinnt ja sozusagen einfach durch rohen Vorteil die Gnade der späten Geburt gleichsam.

00:30:51.239 --> 00:30:54.999
Ja, das ist einfach so schnell geladen und angezeigt,

00:30:55.159 --> 00:30:59.359
dass im Prinzip die Notwendigkeit irgendwas progressiv anzuzeigen,

00:30:59.359 --> 00:31:07.099
Also schon mal vorab ein bisschen Dinge anzudeuten, eben nicht mehr nötig ist.

00:31:07.679 --> 00:31:11.099
Ja, und es gibt ja auch so Hacks, wo man dann irgendwie in den Hintergrund erstmal

00:31:11.099 --> 00:31:13.739
so einen CSS-Gradient malt und ähnliche Kisten.

00:31:13.959 --> 00:31:17.899
Was ja sozusagen noch eine Annäherung daran ist und wo man dann auch nicht das

00:31:17.899 --> 00:31:20.899
Bildformat hacken muss, wo das Bild dann ja auch nicht kaputt geht,

00:31:20.979 --> 00:31:23.839
wenn man das dann irgendwie nochmal in Photoshop aufmacht und ein bisschen was nachjustiert.

00:31:24.199 --> 00:31:27.119
Ja, genau. Da gibt es verschiedene Techniken, die man anwenden kann.

00:31:28.599 --> 00:31:33.059
Genau, ich weiß nicht, ob das immer nötig ist ich hab dann manchmal das Gefühl,

00:31:33.199 --> 00:31:40.619
dass diese Techniken dann auch wieder andere Ressourcen fressen, wie CPU-Zeit und,

00:31:41.899 --> 00:31:45.819
dass das vielleicht dann nicht wert ist oder vielleicht nur in Konstellationen,

00:31:45.919 --> 00:31:49.599
wo man mit einer langsamen Verbindung unterwegs ist Naja und vor allen Dingen

00:31:49.599 --> 00:31:52.879
muss man ja immer die Frage sich überlegen, ist das gerade jetzt das Problem,

00:31:52.959 --> 00:31:57.999
das zu lösen ist also im Bereich von Und Web-Performance ist ja die einzige

00:31:57.999 --> 00:31:59.579
Tätigkeit auf diesem Planeten,

00:31:59.679 --> 00:32:03.439
wo Whataboutism ja tatsächlich korrekt anwendbar ist.

00:32:03.499 --> 00:32:06.459
Wenn man wirklich sagt, ich könnte irgendwie das Bild progressiv machen,

00:32:06.559 --> 00:32:08.019
indem ich da riesig viel Arbeit reinstecke.

00:32:08.119 --> 00:32:11.119
Okay, aber was ist, wenn du irgendwie dieses Megabyte JavaScript da wegmachst?

00:32:14.734 --> 00:32:20.114
Genau. Naja, und JPEG kann progressiv, das funktioniert aber natürlich auch

00:32:20.114 --> 00:32:23.914
nicht immer, weil das auch so ein bisschen davon abhängt, ob der Server die

00:32:23.914 --> 00:32:25.954
Daten progressiv irgendwie schickt.

00:32:26.394 --> 00:32:29.234
Also, wie arbeiten Server? Also,

00:32:29.654 --> 00:32:32.934
sagen wir mal, du hast eine Bildergalerie mit einem Grid von Bildern.

00:32:33.514 --> 00:32:39.874
Dann wäre ja optimal, wenn ein Server vielleicht alle Bilder in gleichen Teilen

00:32:39.874 --> 00:32:44.214
übermittelt, sodass man das progressive dann auch so ein bisschen nutzen kann

00:32:44.214 --> 00:32:45.714
und schon so ein bisschen was anzeigen kann.

00:32:45.814 --> 00:32:49.574
Aber dann gibt es Server, die machen das eben nicht. Die schicken eine Datei nach der anderen.

00:32:49.794 --> 00:32:53.214
Dann ist das progressive auch so ein bisschen dahin.

00:32:55.074 --> 00:32:59.994
Genau, also deswegen, ich würde sagen, das spielt wahrscheinlich dann doch keine

00:32:59.994 --> 00:33:03.234
so große Rolle, dieses progressive Encoding.

00:33:03.874 --> 00:33:09.774
Ja, hätte ich jetzt angenommen. Also weil, wenn man einfach was Leistungsstärkeres

00:33:09.774 --> 00:33:11.994
nehmen kann, das eh schon rumliegt,

00:33:13.222 --> 00:33:17.482
Dass man sozusagen dieses sehr clevere, progressive JPEG überflüssig macht,

00:33:17.562 --> 00:33:19.062
weil man einfach was hat, was es nicht nötig hat.

00:33:20.082 --> 00:33:21.922
Ja, genau. Ist das schon ganz cool.

00:33:23.162 --> 00:33:26.282
Ich scroll auch gerade hier auf Kenner Use rum. Also AVIV und WebP haben ja

00:33:26.282 --> 00:33:30.642
auch ungefähr gleiche Verbreitung. Das ist so innerhalb so eines Bereichs.

00:33:31.322 --> 00:33:35.842
Genau, man kann im Grunde mindestens WebP problemlos überall einsetzen.

00:33:39.542 --> 00:33:46.842
AVIV wahrscheinlich im Grunde auch. Aber die Breite des Supports ist bei RedP

00:33:46.842 --> 00:33:47.682
noch ein bisschen größer.

00:33:47.782 --> 00:33:52.302
Es war zum Beispiel so, dass obwohl Edge auch auf Chromium aufsetzt,

00:33:52.662 --> 00:34:00.342
Microsoft lange Zeit kein AVIV unterstützt hat, obwohl es der Chrome schon längst unterstützt hatte.

00:34:00.982 --> 00:34:06.662
Das hatte dann mit so Angst vor Patentrollen zu tun. Aber das ist auch schon

00:34:06.662 --> 00:34:08.842
20 Edge-Versionen her. Ja, genau.

00:34:09.522 --> 00:34:16.002
Aber also kommt halt darauf an, was für Gerätschaften man bedient.

00:34:16.142 --> 00:34:19.202
Also ich weiß jetzt nicht, ob das bei allen Fernsehern schon lange,

00:34:19.462 --> 00:34:21.442
also Smart-TVs unterstützt wird.

00:34:22.682 --> 00:34:27.542
Wenn man sicher gehen will, nutzt man halt das Picture-Element mit den entsprechenden

00:34:27.542 --> 00:34:29.182
Source-Elementen darin.

00:34:29.902 --> 00:34:32.082
Oder man nimmt WebP.

00:34:33.502 --> 00:34:39.242
Ja. Was so die Code-Seiten angeht, sind die sind ja auch alle ungefähr gleich.

00:34:39.562 --> 00:34:44.482
Also man könnte ja meinen, dass ein komplexeres Format wie AVIF vielleicht auf

00:34:44.482 --> 00:34:47.722
dem Client auch länger zu dekodieren braucht, also nennenswert länger.

00:34:49.294 --> 00:34:52.834
Das ist aber nicht der Fall. Ist das Payload normalisiert?

00:34:53.954 --> 00:34:58.994
Weil ich meine, du hast irgendwie ein JPEG und das decodet jetzt in Geschwindigkeit

00:34:58.994 --> 00:35:02.234
X, aber die Datenmenge ist halt irgendwie zehnmal so groß.

00:35:03.554 --> 00:35:07.894
Weißt du, wo meine Frage hingeht? Also JPEG decodiert schon schneller oder der

00:35:07.894 --> 00:35:13.074
Durchsatz ist schon höher, aber dadurch, dass natürlich AVIF nicht,

00:35:13.374 --> 00:35:16.734
also viel kleiner ist, ist es am Ende spielt das keine Rolle.

00:35:17.514 --> 00:35:21.894
Also es braucht irgendwie pro Megabyte irgendwie länger, aber du hast halt weniger Megabyte.

00:35:22.174 --> 00:35:25.874
Genau, und wir reden hier auch über Millisekunden- Unterschiede,

00:35:25.954 --> 00:35:29.474
die sich im Zweifelsfall sogar im einstelligen Bereich abspielen, pro Bild.

00:35:31.094 --> 00:35:37.454
Also im Grunde nichts, also fast schon Messungenauigkeit. Wo das aber eher eine

00:35:37.454 --> 00:35:41.674
Rolle spielt, ist auf der Serverseite, also wenn du AWEF encodest,

00:35:41.854 --> 00:35:45.194
dann braucht das deutlich länger als die anderen Formate.

00:35:45.934 --> 00:35:50.054
Das heißt, da würde man mit WP besser fahren, wenn man die Rechenkapazität nicht hat.

00:35:51.274 --> 00:35:55.794
Und vor allem, wenn du so On-Demand-Encoding machst, also wenn du jetzt zum

00:35:55.794 --> 00:35:57.514
Beispiel sagst, ich habe meine,

00:35:59.054 --> 00:36:03.894
Source-Bilder auf dem Server liegen und erst, wenn die in einer bestimmten,

00:36:04.114 --> 00:36:06.174
sagen wir mal, wir machen responsive Images,

00:36:06.474 --> 00:36:11.174
dann in einer bestimmten Auflösung angefragt werden von einem Browser,

00:36:11.294 --> 00:36:17.554
der jetzt irgendwie sagt, hey, ich kann WP oder ich kann AWF und du sie dann on the fly erzeugst.

00:36:18.874 --> 00:36:23.134
Was ja ein Szenario ist, was eigentlich Sinn macht, weil du willst ja nicht

00:36:23.134 --> 00:36:27.194
irgendwie bei allen Dingen so vielleicht alles vorab schon mal erzeugen.

00:36:27.314 --> 00:36:29.974
Das kannst du machen, aber vielleicht ist es unnötig.

00:36:30.914 --> 00:36:35.234
Und wenn du so on the fly Encoding machst, dann ist AVIV eher schlecht.

00:36:37.267 --> 00:36:41.467
Okay, aber auch da ist die Frage eher schlecht.

00:36:43.007 --> 00:36:47.927
Wie viel ist das? Sehr schlecht. Einen wie viel dickeren Server brauche ich denn?

00:36:48.027 --> 00:36:51.167
Also ich meine, im Vergleich zu JPEG-Encodieren, okay, kann ich verstehen.

00:36:51.407 --> 00:36:55.267
Aber muss ich dann jetzt wirklich doppelt so viel für meine Box ausgeben?

00:36:55.487 --> 00:36:58.587
Oder ist das irgendwie mehr so da? Eher dreifach oder vierfach so viel.

00:36:59.687 --> 00:37:04.027
Okay. So in die Richtung geht das. Genauso, weil der Trick bei dem AWEF-Format

00:37:04.027 --> 00:37:10.147
ist eben, dass so der Aufwand oder die bessere Kompression so gebaut ist,

00:37:10.267 --> 00:37:16.387
dass das Decoding nicht so recht intensiv ist, aber dass alle Kraft sozusagen

00:37:16.387 --> 00:37:18.907
in das Encoding reingesteckt wird.

00:37:19.447 --> 00:37:23.987
Ja, mit der Intention, das wird einmal gemacht und vielfach betrachtet,

00:37:24.167 --> 00:37:27.847
also ist es irgendwie sinnvoll, da die Energie rein zu investieren.

00:37:27.847 --> 00:37:33.007
Genau, und man muss ja da auch wieder sagen, es stammt ja einem Videocodec und

00:37:33.007 --> 00:37:38.027
da möchtest du ja, sagen wir mal, 60 Frames pro Sekunde dekodieren können und

00:37:38.027 --> 00:37:39.307
da darf das dekodieren dann,

00:37:39.627 --> 00:37:44.987
also es darf nicht so langsam sein, dass du im Grunde nur mit dedizierter Hardware

00:37:44.987 --> 00:37:47.247
das vernünftig dekodieren kannst.

00:37:48.898 --> 00:37:53.218
Das war ja in Anfangszeiten von H.264 so, dass wenn du so Software-Decoder hattest,

00:37:53.658 --> 00:37:57.018
das war ja auch die Anfangszeit, wo es die ersten Dual-Core-Prozessoren gab.

00:37:57.158 --> 00:37:59.718
Also die brauchtest du, wenn du das in Software dekodiert hattest,

00:38:00.098 --> 00:38:02.538
haben wolltest. Das war schon zu Zeiten von MPEG so.

00:38:03.698 --> 00:38:07.018
Oder du hast halt eine Grafikkarte gehabt, die ein Hardware-Bestandiger hatte

00:38:07.018 --> 00:38:08.978
dafür. Dann war auch gut.

00:38:09.498 --> 00:38:12.978
Ja, oder wenn du halt ganz weit zurückgehst, halt tatsächlich eine dezidierte

00:38:12.978 --> 00:38:17.578
Karte mit halt eben einem Hardware-MPEG-Decoder.

00:38:18.178 --> 00:38:20.998
Also, wir reden jetzt von der Jungsteinzeit, aber trotzdem, das gab es ja alles.

00:38:21.098 --> 00:38:22.558
Ja, ja. Ich glaube, so eine hatte ich auch.

00:38:24.098 --> 00:38:28.178
Mensch, du siehst gar nicht so alt aus. Ja, ich bin ja älter als du, das ist ja schlimmer.

00:38:31.398 --> 00:38:35.358
Genau, und WebP ist da aber deutlich entspannter unterwegs.

00:38:35.758 --> 00:38:41.558
Also, wenn man so On-the-Fly-Encoding machen möchte, dann ist WebP erstmal das bessere Format.

00:38:42.258 --> 00:38:47.078
Was wir bei uns im Projekt machen, ist, dass unser Bildserver auch On-the-Fly

00:38:47.078 --> 00:38:54.718
enkodiert, aber wir nutzen die erste Anfrage nach einem Bild in einer bestimmten

00:38:54.718 --> 00:38:57.058
Pixelgröße sozusagen als Queue,

00:38:57.478 --> 00:39:02.778
dass wir einen Encoding-Prozess starten und die Bilder liegen alle als JPEGs

00:39:02.778 --> 00:39:08.698
auf dem Server und diese erste Anfrage beantworten wir dann erstmal mit einem

00:39:08.698 --> 00:39:12.978
JPEG und wenn das quasi beantwortet ist,

00:39:13.078 --> 00:39:20.938
läuft der Prozess weiter und erzeugt im Hintergrund Und dann die WebPs und AWEF zu diesem Bild,

00:39:21.238 --> 00:39:27.318
sodass, wenn eben dann die nächste Person diese URL wieder anabruft,

00:39:27.658 --> 00:39:30.698
dass man dann eben auch das AWEF zum Beispiel zurückschicken kann.

00:39:31.438 --> 00:39:35.638
Ja, das heißt dann werden die Bilder so asynchron, on demand,

00:39:35.958 --> 00:39:37.118
besser. Gleichsam. Genau.

00:39:39.239 --> 00:39:43.039
Und damit hat man halt dieses Encoding-Dauer-Problem irgendwie,

00:39:43.099 --> 00:39:48.179
fällt einem nicht so auf die Füße oder den Usern, die die Seite besuchen. Ja.

00:39:49.699 --> 00:39:55.819
Genau, da gibt es jetzt noch neue Zwei-Bild-Formate, die das eine,

00:39:56.099 --> 00:40:00.539
oder nee, nicht neu, eins gibt es schon ganz lange, das ist JPEG 2000.

00:40:01.519 --> 00:40:06.259
Das ist ein Format, das Apple lange Zeit auf der Apple-Plattform unterstützt hat.

00:40:06.399 --> 00:40:10.519
Also Safari gab es auch mal eine Zeit lang für Windows. Da wurde es nicht unterstützt.

00:40:12.639 --> 00:40:18.319
Und mittlerweile ist es auch nicht mehr in WebKit drin oder in Safari oder in macOS.

00:40:19.599 --> 00:40:27.899
Das war aber ein Bildformat, das besonders gut war darin, so Tiles aus großen

00:40:27.899 --> 00:40:29.059
Bildern zu übermitteln.

00:40:29.059 --> 00:40:32.499
Das heißt also, wenn du quasi Ausschnitte aus großen Bildern betrachten wolltest,

00:40:33.099 --> 00:40:38.479
dann, also das könnte dann sozusagen ein Progressive oder ein partielles Übertragen

00:40:38.479 --> 00:40:42.579
dieser Bilddaten oder wenn du reinzoomst oder so,

00:40:42.619 --> 00:40:46.579
dass du dann einfach wiederum mehr Bilddaten bekommst und genutzt wird das auch

00:40:46.579 --> 00:40:48.619
nach wie vor noch so im medizinischen Bereich deswegen,

00:40:49.139 --> 00:40:54.479
weil die damit so Röntgenbilder mit was weiß ich wie viel Gigapixeln super sich angucken können.

00:40:56.039 --> 00:41:00.239
Also wenn man das heutzutage benutzen wollen würde, dann glaube ich,

00:41:00.579 --> 00:41:06.419
also müsste man so einen Wasm-gestützten Bilddecoder nutzen das geht ja auch,

00:41:08.073 --> 00:41:15.733
Genau, und dann ist relativ neu, das ist das neueste Format, JPEG XL,

00:41:16.433 --> 00:41:23.333
das einfach JPEG um neue Fähigkeiten nachrüstet,

00:41:24.233 --> 00:41:33.633
also JPEG ist quasi ein Subset von JPEG XL und JPEG XL ist dann auch noch optimiert

00:41:33.633 --> 00:41:34.793
ebenso für Multithreading.

00:41:37.273 --> 00:41:43.513
Was ein JPEG Decoder nicht ist. Genau.

00:41:44.693 --> 00:41:47.333
Und da ist eben die Idee, diese,

00:41:49.693 --> 00:41:54.613
Kompatibilität oder dadurch, dass es eben ein Superset von JPEG ist,

00:41:54.753 --> 00:42:01.013
dass du für Devices, die eben kein JPEG XL können, kannst du das on the fly sozusagen runter,

00:42:01.713 --> 00:42:06.773
transkodieren auf JPEG und das eben schicken, ohne dass das ein Riesenaufwand wäre.

00:42:07.093 --> 00:42:10.193
Und dann verliert man eben ein paar Features.

00:42:13.133 --> 00:42:17.333
Okay. Und man kriegt wieder progressives Rendering. Genau.

00:42:18.777 --> 00:42:22.477
Also keine Implementierung scheint das zu können. Die sind ja auch alle irgendwie

00:42:22.477 --> 00:42:23.937
halbgar oder hinter irgendwelchen Flags.

00:42:24.497 --> 00:42:27.597
Die JPEG-XL-Implementierung meinst du, ne? Genau.

00:42:28.597 --> 00:42:32.877
Genau, die sind noch relativ halbgar. Also auch das irgendwie mit dem Multistrading,

00:42:32.917 --> 00:42:38.017
das funktioniert irgendwie auch nicht so richtig überall, aber da muss man auch

00:42:38.017 --> 00:42:42.817
sagen, dass das ein Build-Format, was von Cloudinary kommt, von diesem,

00:42:44.677 --> 00:42:47.737
Build Software as a Service Cloud-Plattform.

00:42:48.477 --> 00:42:53.717
Die einem auch so Bildtranskodierungsservices anbieten und so.

00:42:54.037 --> 00:43:00.757
Und eben auch, dass man seine Bilder da, dass man quasi seinen Mediaserver bei denen betreibt.

00:43:02.417 --> 00:43:09.637
Und die Browser-Hersteller, also die Großen, sind da irgendwie noch nicht so

00:43:09.637 --> 00:43:10.837
richtig dahinter gewesen.

00:43:11.097 --> 00:43:16.157
Was vermutlich auch ein Grund ist dafür, dass es da noch nicht so weit ist.

00:43:16.897 --> 00:43:20.777
Ja, kann ich auch ein bisschen verstehen. Also ein komplexes neues Format,

00:43:20.917 --> 00:43:22.117
auch noch mit Multithreading drin.

00:43:23.297 --> 00:43:26.057
Das ist ja nicht ohne Aufwand oder ohne Risiko.

00:43:27.194 --> 00:43:30.954
Genau, also Safari hat es implementiert oder die ersten, die es implementiert

00:43:30.954 --> 00:43:37.174
hatten, waren die Firefox-Menschen, glaube ich, und Chrome auch.

00:43:37.394 --> 00:43:38.354
Also da war es hinter Flex.

00:43:40.894 --> 00:43:46.074
Dann hat Chrome das aber wieder ausgebaut. Also mittlerweile ist es auch nicht

00:43:46.074 --> 00:43:54.794
mal hinter Flex mehr drin, was sicherheitsrelevante Gründe hat. Also dazu gleich mehr.

00:43:55.634 --> 00:43:57.954
Also in der Beta ist es jetzt ja wieder drin, ne?

00:43:58.854 --> 00:44:04.654
Genau, jetzt findet eben doch wieder ein Umdenken statt, weil ich glaube,

00:44:04.874 --> 00:44:06.694
einfach viel Nutzerfeedback gekommen ist,

00:44:07.234 --> 00:44:14.634
dass man JPEG XL gerne nutzen würde und es eben an Browsern fehlt,

00:44:14.754 --> 00:44:15.934
die das nativ unterstützen.

00:44:18.114 --> 00:44:23.994
Genau, und Apple hat das in Safari jetzt, also im Stable wird das unterstützt.

00:44:24.794 --> 00:44:27.894
Bei Apple ist es aber so, die delegieren ja immer alles an das Betriebssystem

00:44:27.894 --> 00:44:30.954
weg, so wie das früher bei Internet Explorer auch war.

00:44:31.474 --> 00:44:35.594
Und was das Betriebssystem kann, das kann dann der Browser auch.

00:44:35.594 --> 00:44:40.414
Und in Chrome und Firefox, da war eben immer so ein bisschen oder die haben

00:44:40.414 --> 00:44:46.614
so ein bisschen das gleiche Problem da wie mit XSLT, also dass man eine externe

00:44:46.614 --> 00:44:50.234
Library dafür braucht, die sie nicht selber pflegen und entwickeln,

00:44:50.694 --> 00:44:54.734
die möglicherweise ein Security-Problem darstellt.

00:44:54.734 --> 00:44:57.494
Und das ist ja bei XSLT der Grund, warum das ausgebaut wird,

00:44:57.754 --> 00:45:02.374
weil das ja nicht mehr maintained wird und einfach sehr viele Sicherheitslücken hat und die eine Person,

00:45:02.814 --> 00:45:07.434
dieser The One Lonely Developer in Nebraska, eben einfach auch keinen Bock mehr

00:45:07.434 --> 00:45:12.374
hat, kostenlos oder überhaupt diese Sachen zu reparieren.

00:45:12.374 --> 00:45:15.754
Und das ist eben hier bei diesen Bildformaten auch der Fall.

00:45:15.934 --> 00:45:21.014
Und was, glaube ich, sowohl Firefox als auch die Chrome-Menschen gerade so explorieren,

00:45:21.154 --> 00:45:30.354
erforschen, ist eben solche Dinge in, also so Rust-Decoder nach Resm dann zu verwenden.

00:45:31.228 --> 00:45:36.288
Transpilieren und die sozusagen in der Sandbox zu benutzen. Mhm.

00:45:36.968 --> 00:45:40.288
Um so Sachen, also solche externen Libraries einzubinden.

00:45:40.488 --> 00:45:43.208
Und wenn die dann Sicherheitslücken haben, dann stecken die in der Sandbox und

00:45:43.208 --> 00:45:47.068
dann explodiert es da drin, aber nicht woanders.

00:45:47.728 --> 00:45:52.288
Ja, kostet natürlich wieder ein bisschen was in Sachen Performance Overhead. Mhm. Ja.

00:45:54.208 --> 00:45:56.948
Ja, ich würde mal sagen, meine Damen und Herren Browser-Entwickler,

00:45:57.388 --> 00:46:02.688
äh, geht's doch mal hin und baut ein Bildformat, das so alle glücklich macht,

00:46:02.788 --> 00:46:05.808
das gut komprimiert und euch nicht den Schlaf raubt.

00:46:06.268 --> 00:46:10.428
Man kann ja hingehen, man kann ja Dinge so ingenieren, dass man da so Sachen

00:46:10.428 --> 00:46:14.408
wie Sicherheit irgendwie abbildet. Also Rust selber ist ja ein Beispiel dafür.

00:46:15.148 --> 00:46:18.468
Wir gehen jetzt mal hinsetzen und uns dieses Ziel, stellen alle anderen Überlegungen

00:46:18.468 --> 00:46:20.608
da mal irgendwie so hinten an.

00:46:20.808 --> 00:46:24.208
Okay, das sieht dann aus wie Lein-Noise, aber finde dich halt damit ab. Dafür kriegst du was.

00:46:25.028 --> 00:46:28.888
Könnte man sich auch ein Bildformat ausdenken. Ja, aber das fällt ja eigentlich

00:46:28.888 --> 00:46:33.468
nicht in die Zuständigkeit der Browser Hersteller oder das W3C oder so,

00:46:33.528 --> 00:46:36.428
also Bildformate oder Dateiformate. Moment, warte mal, warte mal.

00:46:36.608 --> 00:46:38.868
In die Browser, in die Zuständigkeit von Browserherstellern,

00:46:39.008 --> 00:46:41.348
die machen eine ganze Menge, was nicht in deren Zuständigkeit fällt.

00:46:42.268 --> 00:46:47.408
Ja, das stimmt. Also Apple macht alles, Microsoft macht alles,

00:46:47.608 --> 00:46:50.728
Google macht alles und Mozilla möchte alles machen, nur keinen Browser bauen.

00:46:51.848 --> 00:46:56.988
Ja, das stimmt. Die möchte jetzt der KI machen. Genau, es gibt ja diese Lines

00:46:56.988 --> 00:47:01.888
for Open Media, also die sich gebildet hat, weil es gibt ja noch die,

00:47:04.356 --> 00:47:10.756
MPEG, also das MPEG-Konsortium, die bringen ja so Tools raus wie eben,

00:47:10.976 --> 00:47:17.556
oder Formate wie H.264, H.265, auch bekannt als.

00:47:19.976 --> 00:47:23.356
HEVC, also High Efficiency Video Codec.

00:47:23.796 --> 00:47:29.696
Und dann gibt es noch H.266, was jetzt in der Mache ist.

00:47:29.916 --> 00:47:35.696
Und das Problem dabei ist, dass die aber Geld sehen wollen.

00:47:36.056 --> 00:47:42.296
Also es war ja auch schon bei H.264 vor zehn Jahren ein Problem,

00:47:42.436 --> 00:47:48.436
dass Firefox das nicht geschippt hat in seinem Browser, weil sie dafür also

00:47:48.436 --> 00:47:50.836
für den Browser, den sie kostenlos verteilen,

00:47:51.756 --> 00:47:55.136
sie Lizenzgebühren hätten zahlen müssen.

00:47:55.836 --> 00:48:00.016
Und dann ist ja glaube ich irgendwann Oracle oder so eingesprungen und hat das

00:48:00.016 --> 00:48:04.316
finanziert, also hat hat irgendwie von seinen Lizenzen, die es gekauft hat,

00:48:04.436 --> 00:48:06.096
die kann man irgendwie nur so als bulk kaufen,

00:48:06.396 --> 00:48:09.236
hat gesagt, so, hier ein paar Millionen geben wir an euch, die könnt ihr jetzt

00:48:09.236 --> 00:48:12.116
mit euren Firefox-Downloads mitschippen. Ja.

00:48:13.036 --> 00:48:17.576
Und bei Microsoft ist es auch so, zumindest in Windows, dass du bestimmte Formate

00:48:17.576 --> 00:48:22.316
nur abspielen kannst, wenn du dir nochmal sozusagen per Windows-Update diese

00:48:22.316 --> 00:48:26.576
Codex holst, damit sie eben nur dann zahlen müssen, wenn sie auch wirklich benutzt werden.

00:48:27.676 --> 00:48:30.636
Genau, und daraufhin hat sich diese Alliance for Open Media gebildet,

00:48:30.676 --> 00:48:36.616
wo auch Apple und Google und so mit drin sind und die haben dann so die ganzen

00:48:36.616 --> 00:48:39.116
Formate, die es schon gab, die offenen, also.

00:48:40.756 --> 00:48:43.736
VP8, VP9, so die Reihe und dann gibt es ja noch hier,

00:48:44.996 --> 00:48:47.256
ist das Opus oder wie hießen die nochmal?

00:48:48.136 --> 00:48:52.176
Das ist Audio. Das ist Audio, genau, aber das entsprechende Video,

00:48:52.616 --> 00:48:56.736
die Video-Version davon, also das wird alles zusammengeworfen und daraus ist

00:48:56.736 --> 00:48:58.936
dann eben AV1 entstanden. Ja.

00:49:00.197 --> 00:49:04.597
Und die arbeiten auch weiter und arbeiten jetzt an AV2.

00:49:04.817 --> 00:49:11.417
Und es gab jetzt auf der CS oder so gab es erste Demos, wo die in einem Videolarn

00:49:11.417 --> 00:49:15.757
Bild AV2-Video abgespielt haben, gezeigt haben.

00:49:17.857 --> 00:49:22.937
Und das bedeutet zum einen natürlich, dass wir ein noch effizienter komprimierendes

00:49:22.937 --> 00:49:26.037
Videoformat haben werden, bald.

00:49:27.237 --> 00:49:31.237
Was auch eine Weile dauert, bis sich das durchsetzt. Aber man Also es wäre jetzt

00:49:31.237 --> 00:49:37.797
nicht irgendwie vermessen zu vermuten, dass da auch ein AWIF2 bei rauskommt,

00:49:37.977 --> 00:49:42.617
das besser komprimiert und vielleicht auch ein paar andere Dinge besser macht.

00:49:45.237 --> 00:49:48.877
Aber ich glaube auch, dass es einfach echt kompliziert ist, so ein Bildformat

00:49:48.877 --> 00:49:55.057
zu implementieren mit all den Features, die solche Bildformate hergeben.

00:49:55.177 --> 00:49:59.837
Also es ist ja HDR, möglicherweise noch Transparenzen,

00:50:01.837 --> 00:50:06.217
Also alles Mögliche, nicht so einfach.

00:50:07.057 --> 00:50:10.337
Ja, und ich meine, du musst ja sozusagen für dein Bildformat überhaupt vorhersehen,

00:50:10.517 --> 00:50:14.017
dass es in einem langsamen Internet in großer Menge eingesetzt wird,

00:50:14.037 --> 00:50:18.457
damit du überhaupt den Gedanken an progressives Eindringen überhaupt verschwenden möchtest.

00:50:19.737 --> 00:50:22.037
Wenn du einfach sagen kannst, ich eliminiere dieses Problem,

00:50:22.137 --> 00:50:23.177
macht das ja alles viel einfacher.

00:50:25.502 --> 00:50:30.342
Ja, also ich will nur sagen, AV2 noch nicht released so richtig,

00:50:30.622 --> 00:50:37.302
aber die ersten Patent-Pools sind bereits dran, das auch noch zu verhageln.

00:50:37.302 --> 00:50:38.722
Naja, das machen die ja immer.

00:50:39.302 --> 00:50:44.822
Sie wollten eigentlich Ende letzten Jahres fertig werden damit und das haben

00:50:44.822 --> 00:50:46.222
sie jetzt irgendwie nicht geschafft.

00:50:46.602 --> 00:50:50.282
Also es ist noch nicht offiziell angekündigt oder fertig.

00:50:51.662 --> 00:50:58.782
Aber es gibt irgendwo, dass es jetzt schon gezeigt wurde, also in Aktion.

00:50:58.942 --> 00:51:02.942
Also es ist jetzt kein Vaporware und glaube ich auch nicht weit weg davon,

00:51:02.942 --> 00:51:04.342
irgendwann fertig zu sein.

00:51:05.342 --> 00:51:09.982
Ja, da muss man nur noch die Patentrolle zurück in die Höhle jagen und dann,

00:51:11.162 --> 00:51:16.322
Die hat man immer Die hat man grundsätzlich immer bei solchen Dingen,

00:51:17.002 --> 00:51:21.642
Ja, hat ja MPEG halt gezeigt, dass es da durchaus etwa einen Schatz zu heben

00:51:21.642 --> 00:51:26.282
gibt und dann kommen natürlich dann auch diese niederen Schleimviecher da angekrochen

00:51:26.282 --> 00:51:28.122
und wollen auch noch was abhaben Ja,

00:51:29.422 --> 00:51:36.262
So, aber Shep, du sagst also je nach Use Case ist Maviv und WebM-Unterschied eher nicht so groß.

00:51:36.622 --> 00:51:41.242
Kommt halt drauf an, was du serverseitig treibst und Augen auf JPEG Excel.

00:51:42.002 --> 00:51:47.722
Genau, also ich sag mal so, die most bang for the buck gibt es über WebP aktuell.

00:51:48.582 --> 00:51:50.962
Wenn man jetzt irgendwie, wenn man es nicht kompliziert haben will,

00:51:51.582 --> 00:51:53.182
mach alles in WebP, passt.

00:51:53.622 --> 00:52:00.502
WebP kann animiert, WebP kann Transparenz, nicht unbedingt mit jedem Grafiktool,

00:52:00.762 --> 00:52:01.842
aber grundsätzlich schon.

00:52:03.942 --> 00:52:06.842
Deswegen kann man das ruhig mal nehmen. Und die Wahrscheinlichkeit ist hoch,

00:52:06.922 --> 00:52:09.182
wenn du so ein Betriebssystem anklickst, dass da nicht der Browser aufgeht,

00:52:09.182 --> 00:52:10.422
sondern dein normaler Imagebetrachter.

00:52:12.683 --> 00:52:16.443
Ja, wahrscheinlich. Genau, da weiß ich ehrlich gesagt nicht,

00:52:16.503 --> 00:52:17.603
was Stand der Dinger ist.

00:52:18.483 --> 00:52:21.503
Also ich kann nur von meinem Linux hier sprechen. Bei Elvif geht halt der Firefox

00:52:21.503 --> 00:52:25.483
Nightly aus irgendwelchen Gründen. Ich meine, kann ich natürlich ändern. Aber, ne?

00:52:26.183 --> 00:52:28.483
Und die Frage halt dann eben auch, ist dein Betriebssystem schlau genug,

00:52:28.583 --> 00:52:31.423
da ein Thumbnail zu rendern, wenn du das im Dateimanager aufhast, Black Keks?

00:52:31.663 --> 00:52:35.363
Ja, das war ja früher, das war ja so das, was Facebook davon abgehalten hat,

00:52:37.323 --> 00:52:38.863
oder auf der P umzustellen.

00:52:39.063 --> 00:52:43.643
Damals ist das, als es dann verfügbar war und die haben ja dann lieber,

00:52:44.163 --> 00:52:49.263
also weil User, Usende, diese Bilder eben weiterleiten wollten, abgespeichert haben.

00:52:49.943 --> 00:52:53.903
Und dann, also das ist natürlich dann immer ein bisschen blöd, wenn dann so diese,

00:52:56.183 --> 00:53:01.543
weitere Nutzung irgendwie kaputt gemacht wird, weil eben Format nicht unterstützt wird.

00:53:01.643 --> 00:53:08.043
Und dann haben die ja hier diesen Mozilla Impact Decoder angefangen zu supporten,

00:53:08.083 --> 00:53:12.143
dass der weiterentwickelt wird und aus JPEG so möglichst alles rausholt, was geht.

00:53:13.903 --> 00:53:18.183
Wie heißt der nochmal? Ich habe es vergessen. Ich weiß es auch gerade nicht mehr.

00:53:19.543 --> 00:53:24.043
Es ist auch lange her, muss man ja mal sagen. Mods JPEG, glaube ich,

00:53:24.203 --> 00:53:25.803
heißt der. Heißt der Mods JPEG? Kann das sein?

00:53:26.403 --> 00:53:29.463
Es klingt auf jeden Fall sehr plausibel. Ich glaube, der heißt einfach nur Mods

00:53:29.463 --> 00:53:31.223
JPEG. Genau. Und das übrigens.

00:53:33.763 --> 00:53:38.463
Allercoolste Bildkompressionswerkzeug ist Scooosh, falls man es noch nicht kennt. Das ist eine PWA.

00:53:40.343 --> 00:53:42.003
Und richtig geil.

00:53:44.345 --> 00:53:47.465
Von Cerma und Jake Archibald gebaut.

00:53:48.645 --> 00:53:52.165
Okay, weil? Also macht das besonders gut? Also ist halt eine Webseite,

00:53:52.225 --> 00:53:53.025
wo ich mein Bild reindrage?

00:53:53.645 --> 00:53:58.805
Genau. Du kannst halt jedes Format reinwerfen und jedes Format rauskomprimieren

00:53:58.805 --> 00:54:05.785
und kannst eben auf verschiedene Decoder benutzen, die alle in WESM im separaten Thread laufen.

00:54:07.145 --> 00:54:10.625
Encoder oder Decoder? Was meinst du? Sowohl als auch.

00:54:10.785 --> 00:54:14.905
Du kannst ja alles reinwerfen und alles wieder raus enkodieren und du kriegst

00:54:14.905 --> 00:54:21.065
quasi Live-Vorschau der Qualität der Größe, hast diesen Compare-Schieber,

00:54:21.265 --> 00:54:24.465
wo du links-rechts machen kannst. Ja, verstehe.

00:54:26.935 --> 00:54:30.915
Ich dachte, ich schmeiße da jetzt Bilder rein. So, bin hier gerade zu meinem

00:54:30.915 --> 00:54:34.195
Projekt hin, wo halt echt ein paar große Fotos drin sind. Das ist AVIF.

00:54:35.155 --> 00:54:40.435
Und jetzt habe ich die alle markiert. Und das sind jetzt irgendwie 110 Kilobyte.

00:54:41.655 --> 00:54:44.295
Ich glaube, das ist nicht die Mühe wert, das da jetzt rüber zu draggen.

00:54:44.715 --> 00:54:45.795
Weil das ist schon so wenig.

00:54:46.935 --> 00:54:51.415
Ja, ist auf jeden Fall nicht so viel. Und ich glaube, so Batchen,

00:54:52.295 --> 00:54:53.495
das kann jetzt die App nicht.

00:54:53.795 --> 00:54:58.535
Da hatten die mal so ein CLI-Tool rausgebracht. Okay.

00:54:59.675 --> 00:55:03.215
Da kannst du nochmal nachgucken. Warte mal, was ist denn hier das größte Ding?

00:55:03.295 --> 00:55:05.335
Das ist hier dieses Riesenfoto mit 25.

00:55:05.895 --> 00:55:09.495
Das drag ich da jetzt rein. In welchem Format hast du es jetzt? Aviv.

00:55:10.895 --> 00:55:14.855
Das ist wahrscheinlich eh schon gut komprimiert. Naja, aber ich habe es halt

00:55:14.855 --> 00:55:19.595
hier einfach so, also buchstäblich, mach JPEG auf, mach es in GIMP auf,

00:55:19.895 --> 00:55:22.995
also dem Photoshop-Äquivalent auf Linux, speichern als Aviv,

00:55:23.795 --> 00:55:26.555
gar nicht erst darauf gucken, was der da an Qualitätsslidern hat,

00:55:26.735 --> 00:55:27.615
einfach auf OK gedrückt.

00:55:28.335 --> 00:55:31.415
Das ist sozusagen meine Baseline. Okay, dann müsstest du aber eigentlich das

00:55:31.415 --> 00:55:35.295
JPEG reinziehen, weil du natürlich jetzt das Problem hast, dass du ja Kompressionsartefakte

00:55:35.295 --> 00:55:42.935
von JPEG, die jetzt in Kompressionsartefakten von AVIV quasi mit vermischt werden.

00:55:44.415 --> 00:55:48.115
Nochmal, da wird dir die Ausbeute immer schlechter dann. Okay.

00:55:49.055 --> 00:55:51.395
Ich habe es aber auch resized, deswegen ist das jetzt kein fairer Vergleich.

00:55:51.755 --> 00:55:54.395
Egal, machen wir halt einen unfairen Vergleich. Du kannst ja ein Tool auch resizen.

00:55:55.015 --> 00:55:57.795
Ja, aber ich weiß jetzt, ich muss jetzt ja nachgucken, was das andere Ding für

00:55:57.795 --> 00:56:01.855
eine Bildgröße hat. Okay. Okay, nehmen wir das hier, hier Eigenschaften.

00:56:02.555 --> 00:56:04.015
Die Bildgröße ist...

00:56:06.149 --> 00:56:08.009
Und da haben wir es schon. Ich habe jetzt einfach Rechtsklick drauf gemacht,

00:56:08.109 --> 00:56:13.229
Datei-Informationen hier in meinem ganz normalen Ubuntu-Datei-Manager und der sagt mir das nicht.

00:56:13.869 --> 00:56:16.449
Bei einem JPEG hätte er das tatsächlich in seinem Datei-Manager drin.

00:56:16.769 --> 00:56:17.989
Jetzt muss ich das Ding aufmachen.

00:56:18.589 --> 00:56:20.509
Ah, jetzt habe ich doppelt draufgeklickt, das heißt, jetzt geht der Firefox

00:56:20.509 --> 00:56:23.329
Nightly auf. Natürlich, na klar. Ah ne, jetzt ist es Gimp, warum auch immer.

00:56:23.429 --> 00:56:25.389
Wahrscheinlich ist es auf dem Laptop der Firefox Nightly,

00:56:27.409 --> 00:56:30.549
weil Farbprofil des Bildes beibehalten. Geh mir doch einfach weg mit dem ganzen

00:56:30.549 --> 00:56:32.149
Scheiß. Kannst du nicht einfach irgendwie ein Bild draußen machen?

00:56:32.789 --> 00:56:36.969
So, pass auf. Bildgröße 2000 mal 1333.

00:56:38.789 --> 00:56:46.549
Resize auf 2000 mal 1333. Blablabla. Pre-Multiply Alpha Channel.

00:56:47.409 --> 00:56:51.209
Linear RGB. Maintain Aspect Ratio. Das hätte ich schon ganz gerne.

00:56:51.949 --> 00:56:56.589
So. Und da will ich jetzt dann ein AVIF draus machen. Wo kann man das einstellen?

00:56:58.749 --> 00:57:02.849
Kannst du das nicht da unten irgendwo auswählen? Genau. AVIF.

00:57:05.509 --> 00:57:09.349
Qualität. Wie gesagt, ich will das einfach auf den Defaults lassen.

00:57:09.869 --> 00:57:11.229
Das lade ich jetzt runter.

00:57:12.349 --> 00:57:16.649
Aber das sagt er dir doch in der Prognose schon, wie klein das wird in der App selber.

00:57:17.769 --> 00:57:20.969
Da hätte ich jetzt auf das Interface achten müssen, aber da hatte ich jetzt keine Lust zu.

00:57:21.749 --> 00:57:26.069
Es ist auf jeden Fall größer, als das, was GIMP gemacht hat. Okay.

00:57:27.629 --> 00:57:33.629
Zwar nur 0,2 Kilobyte, aber da sehen wir mal wieder, so freie,

00:57:33.709 --> 00:57:38.409
schlecht bedienbare Software, schlägt aus dem Großkonzern entsprungenes Web-Plancy-Kram

00:57:38.409 --> 00:57:40.609
mal wieder locker und easy, wie immer.

00:57:43.429 --> 00:57:48.449
Ja, bitte Vortrag bei der Forstim einreichen. Ja, ja. Klar,

00:57:50.709 --> 00:57:54.049
sicher. Ich hätte halt einfach nur irgendwie darauf achten müssen,

00:57:54.129 --> 00:57:55.629
welchen Qualitätsregler ich wie einstelle.

00:57:57.191 --> 00:58:02.111
Genau, aber ich glaube, generell liegst du, egal wo der jetzt ist,

00:58:02.231 --> 00:58:05.411
mit A-Wolf ja schon ganz gut.

00:58:05.731 --> 00:58:08.331
Man muss ja nicht das schnellste Zebra der Welt sein, man muss ja nur schnellste

00:58:08.331 --> 00:58:10.911
in der Herde sein, damit die Löwen sich über die anderen lustig machen.

00:58:11.031 --> 00:58:16.011
Und das heißt, dieser Tage ja, wenn man einfach bei der Trump-Card auf das PNG-Video

00:58:16.011 --> 00:58:18.211
verzichtet, ist man schon weit vorne dran.

00:58:18.471 --> 00:58:21.751
Das Niveau sinkt ja zunehmend. In der Tat.

00:58:25.591 --> 00:58:29.111
Okay, ich fühle mich jetzt über Bildformate extrem gut informiert Super,

00:58:29.391 --> 00:58:33.431
genau und hoffe ich, dass das auch für die Hörenden gilt und vor allem für den

00:58:33.431 --> 00:58:40.551
Einhörer, der diese Idee oder diese, sozusagen die Anregung vor einigen Wochen mal gegeben hatte,

00:58:42.140 --> 00:58:46.380
Wir können aber noch mal irgendwann einen noch expertigeren Experten einladen.

00:58:47.600 --> 00:58:51.340
Muss man nur gucken, dass wir da deutschsprachige finden. Ja,

00:58:51.440 --> 00:58:53.980
oder halt nicht. Oder halt nicht. Genau, wir gucken mal.

00:58:55.720 --> 00:58:59.500
Genau, sollen wir noch ein Ding machen? Ja, einen haben wir noch, komm.

00:59:00.260 --> 00:59:03.860
Jetzt wäre natürlich die Frage, wollen wir über Disposable sprechen?

00:59:04.000 --> 00:59:05.200
Das wäre eigentlich das Nächste.

00:59:05.380 --> 00:59:11.100
Oder gehen wir auf PWAs, weil wir gerade eine PWA auch thematisiert hatten?

00:59:11.840 --> 00:59:15.160
Ja, ich würde sagen, disposable, die Frage kam halt zuerst. Okay,

00:59:15.580 --> 00:59:19.240
von einem Shep kam die, glaube ich. Ein gewisser Shep, okay.

00:59:20.860 --> 00:59:25.440
Genau, ich hatte nämlich, oder das ist jetzt ein neues Ding,

00:59:25.820 --> 00:59:31.760
glaube ich, oder relativ neu, dass du eine, was ist das, auf Symbols,

00:59:31.760 --> 00:59:35.000
eine disposable Methode hast oder so. Ist das richtig?

00:59:35.500 --> 00:59:39.560
Wir reden erst mal von JavaScript für die Irritierten. Sorry.

00:59:41.660 --> 00:59:45.460
Genau, also die Symbols, über die wir zwei ja schon ein paar Mal gesprochen

00:59:45.460 --> 00:59:50.100
haben, weil ich ja relativ wenig mit denen am Hut habe und dementsprechend auch

00:59:50.100 --> 00:59:53.840
immer Bauklötze staune, was du darüber erzählst,

00:59:54.380 --> 01:00:02.560
da ist mir eben aufgefallen, dass es eine Property war oder eine Methode gibt,

01:00:02.840 --> 01:00:08.840
die dazu da ist, dass man ein Objekt auffräumt.

01:00:09.420 --> 01:00:14.400
Und da dachte ich, genau, und das Ganze dann auch noch irgendwie gescoped ist.

01:00:15.060 --> 01:00:19.840
Und da dachte ich, ist das nicht bei JavaScript sowieso so,

01:00:20.020 --> 01:00:23.940
dass wenn du eine Variable in einem Scope definierst und der Scope ist eben

01:00:23.940 --> 01:00:29.300
abgearbeitet, dass sie dann vom Garbage-Kollektor vielleicht nicht auf der Stelle

01:00:29.300 --> 01:00:33.340
weggetreten wird, aber zumindest bei seinem nächsten Durchlauf.

01:00:34.668 --> 01:00:37.608
Genau, das ist definitiv richtig. Dann ist es zumindest mal so,

01:00:37.668 --> 01:00:41.548
dass du dir keine Gedanken drum machen musst, weil die Garbage Collection das Objekt einsammelt.

01:00:41.988 --> 01:00:45.528
Und die Idee hinter Explicit Resource Management ist, was ist,

01:00:45.588 --> 01:00:48.848
wenn an der Variable was dranhängt, was die JavaScript Engine nicht weiß?

01:00:49.810 --> 01:00:53.830
Also zum Beispiel sowas wie, du baust ein Objekt, du machst irgendwie so Node.js

01:00:53.830 --> 01:00:58.010
Backend-Programmierung und du hast ein Objekt, das repräsentiert eine temporäre

01:00:58.010 --> 01:01:01.550
Datei, die du vielleicht brauchst für deinen Videorendering-Mechanismus oder irgendwie sowas.

01:01:02.010 --> 01:01:05.650
Und du willst, dass wenn tatsächlich sozusagen das File-Handle,

01:01:05.710 --> 01:01:08.850
wenn das out of scope geht, dass nicht nur die garbage collection hingeht und

01:01:08.850 --> 01:01:12.550
das möglicherweise irgendwann einsammelt, was ja auch ein nicht deterministischer Prozess ist,

01:01:13.050 --> 01:01:16.770
sondern du möchtest darüber hinaus auch noch haben, wenn dieses Objekt,

01:01:16.930 --> 01:01:20.070
das mit dieser temporären Datei, die tatsächlich real auf deinem File-Lead-System

01:01:20.070 --> 01:01:25.230
existiert, wenn dieses Objekt out of scope geht, dass dann deterministisch auch

01:01:25.230 --> 01:01:27.570
diese temporäre Datei aufgeräumt wird.

01:01:27.570 --> 01:01:33.670
Dass du also tatsächlich Cleanup-Logik deterministisch mit einem Objekt verbinden kannst.

01:01:34.430 --> 01:01:40.010
Und das geht halt, indem du, ja, ein Symbol benutzt namens, na hier,

01:01:41.370 --> 01:01:45.170
Dispose, genau, klebst du auf dein Objekt drauf.

01:01:45.490 --> 01:01:49.310
Und wenn du das kombinierst mit der Using-Deklaration, bedeutet,

01:01:49.510 --> 01:01:52.230
du machst nicht eine Let-Variable, nicht eine Kunst-Variable,

01:01:52.330 --> 01:01:56.030
nicht eine War-Variable, sondern die neue vierte, die Using-Variable.

01:01:58.190 --> 01:02:01.330
Dann geht halt eben hin, sagt sich so, okay, ich habe jetzt diese Variable,

01:02:01.430 --> 01:02:04.090
die tracke ich jetzt besonders und wenn die out of scope geht,

01:02:04.190 --> 01:02:08.690
gehe ich zum Objekt hin und gucke, ob auf dem Teil Symbol-Dispose oder natürlich,

01:02:09.190 --> 01:02:12.790
alles in JavaScript gibt es in zwei Varianten, ob Async-Dispose vorliegt.

01:02:13.510 --> 01:02:17.050
Und die, die ich dann da halt eben vorfinde, die führe ich dann aus,

01:02:17.150 --> 01:02:20.110
um halt eben sowas zu machen wie dein Objekt geht out of scope,

01:02:20.610 --> 01:02:24.630
daran hängen irgendwelche Ressourcen, offene Sockets, temporäre Dateien, was auch immer.

01:02:25.470 --> 01:02:30.070
Und dann feuere ich die Logik ab, um dahinter aufzuräumen. Das ist eigentlich alles.

01:02:30.330 --> 01:02:35.050
Und wenn sich jetzt die Java-Entwicklerin oder die C-Sharp-Menschen im Publikum

01:02:35.050 --> 01:02:37.330
daran erinnert fühlen, das haben wir doch bei uns zu Hause.

01:02:37.510 --> 01:02:39.970
Genauso ist die Antwort, jup, das wurde eins zu eins geklaut.

01:02:41.528 --> 01:02:50.448
Okay. Und ist das was, also ist das tendenziell eher so eine Art syntaktischer

01:02:50.448 --> 01:02:53.248
Zucker, also Upgrade der Sprache?

01:02:53.428 --> 01:02:57.328
Oder ist das was, was man vorher überhaupt gar nicht selber lösen konnte?

01:02:58.328 --> 01:03:01.868
Konnte man... Also selber lösen war halt schwierig, weil du hängst dich ja in

01:03:01.868 --> 01:03:03.528
Sprachmechaniken rein, die schon da sind.

01:03:03.688 --> 01:03:06.508
Und die Sprachmechanik hier ist, Variable geht out of scope.

01:03:07.088 --> 01:03:11.768
Du hast ja quasi ein so... Konzeptionell ist es ja so ein on-out-of-scope-Event-Listener.

01:03:12.168 --> 01:03:14.888
Ja. Und den gab's halt nicht. Okay.

01:03:15.608 --> 01:03:18.428
Alles, was du irgendwie machen konntest, ist eine Funktion return und du rappst

01:03:18.428 --> 01:03:19.868
sie in was, dass das dann auch mitkriegt.

01:03:21.168 --> 01:03:24.488
Aber jetzt ist es halt wirklich so, du kannst einfach im Top-Level scope deines

01:03:24.488 --> 01:03:28.588
Moduls oder einfach in einem Blog sagen, hier Using und sobald das Ding halt

01:03:28.588 --> 01:03:31.188
am Ende ist, ist halt eben kommt es halt weg.

01:03:31.728 --> 01:03:34.388
Was halt gerade, wenn du einfach irgendwie so ein langes, dreckiges Script machst,

01:03:34.448 --> 01:03:37.968
was halt sehr viel mit irgendwelchen Sockets und temporären Dateien und ähnlichem

01:03:37.968 --> 01:03:41.408
rumhantiert, es ist halt super praktisch, wenn du halt tatsächlich einfach sagen

01:03:41.408 --> 01:03:43.648
kannst, okay, ich mache einfach ein riesiges Script, das sind ja 200 Zeilen

01:03:43.648 --> 01:03:45.148
Spaghetti-Code untereinander runtergeschrieben,

01:03:45.848 --> 01:03:49.188
aber für jede Ressource definiere ich einfach durch einen Blog und eine darin

01:03:49.188 --> 01:03:53.368
verwendete Using-Deklaration einen Lifetime-Gleichsam oder einen Gültigkeits-Blog

01:03:53.368 --> 01:03:56.788
und ich weiß halt, dass am Ende deterministisch das Ding auch wegkommt.

01:03:58.416 --> 01:04:01.076
Das Einzige, was dem halt so irgendwie früher nahe gekommen wäre,

01:04:01.196 --> 01:04:03.796
wäre, wenn du was mit der Finalization Registry gemacht hättest.

01:04:04.536 --> 01:04:08.736
Das war auch mal was erzählt, drüber hier bei uns. Genau, das ist ja quasi ein

01:04:08.736 --> 01:04:10.096
On-Garbage-Collected-Callback.

01:04:11.596 --> 01:04:14.116
Kannst halt eben sagen, wenn dieses Objekt dann out of scope ist,

01:04:14.596 --> 01:04:18.976
kommt möglicherweise irgendwann die Garbage-Collection vielleicht dazu, das Ding aufzuräumen.

01:04:19.056 --> 01:04:21.336
Und wenn du dann noch irgendwelche Logikträger willst, die damit zusammenhängt,

01:04:22.196 --> 01:04:23.076
kannst du das auch haben.

01:04:23.196 --> 01:04:25.936
Aber weil das halt eben nicht deterministisch ist, ist das halt ein bisschen

01:04:25.936 --> 01:04:28.036
doof. und weil es halt mit der Garbage Collection zusammenhängt,

01:04:28.096 --> 01:04:29.096
ist es halt auch ein bisschen schwierig.

01:04:29.656 --> 01:04:33.636
Weil so eine Finalization Registry ist ein Objekt und als Objekt ist es auch

01:04:33.636 --> 01:04:34.776
Gegenstand der Garbage Collection.

01:04:34.916 --> 01:04:39.336
Das heißt, wenn du nicht auffasst, wird das Ding, das den On-Garbage-Collected-Händler

01:04:39.336 --> 01:04:42.056
managt, von der Garbage Collection eingesammelt und da passiert nichts.

01:04:43.076 --> 01:04:48.836
Okay. Und das ist halt ein bisschen blöd. Und ja, mit der Explicit Resource

01:04:48.836 --> 01:04:52.056
Management API kann man halt eben das dann explizit machen.

01:04:53.316 --> 01:04:58.656
Und dieses Using-Keyword ist aber tatsächlich nur für diesen einen Fall gedacht

01:04:58.656 --> 01:05:03.096
und das wird aber nicht an anderer Stelle auch, spielt keine Rolle sonst.

01:05:04.016 --> 01:05:07.696
Genau, es gibt halt Using für deine Ressource hat ein Symbol-Dispose und es

01:05:07.696 --> 01:05:12.676
gibt Await-Using für hat ein Async-Dispose und die Runtime meckert auch,

01:05:12.736 --> 01:05:16.416
wenn du das verwendest auf Objekten, die dieses Symbol, also das jeweils passende

01:05:16.416 --> 01:05:17.976
Synchrones, Asynchrone nicht implementieren.

01:05:18.556 --> 01:05:21.496
Das ist der einzige Use Case und das einzig Lustige daran ist halt,

01:05:21.536 --> 01:05:23.776
dass man jetzt noch mehr Möglichkeiten hat, Variablen zu deklarieren,

01:05:24.596 --> 01:05:26.716
war let const und using jetzt noch on top.

01:05:27.116 --> 01:05:30.176
Und technisch gesehen ist await using ja schon was ganz Eigenes.

01:05:31.516 --> 01:05:33.516
Ja, das kennt man so nicht bisher.

01:05:35.155 --> 01:05:42.995
Nö. Es gibt ja kein await-const. Es gibt eher ein const wie Abloop gleich await. Ja.

01:05:43.855 --> 01:05:47.755
Aber es wäre ja nicht JavaScript, wenn ich der gleiche Text Token an unterschiedlichen

01:05:47.755 --> 01:05:50.635
Stellen unterschiedliche Bedeutungen hätte, ne? Ja.

01:05:51.975 --> 01:05:55.735
Ja, das ist eigentlich alles verstanden. Gut. Einziges Problem an der Kiste

01:05:55.735 --> 01:05:58.255
ist, verhindert kein Use after Free.

01:06:01.055 --> 01:06:07.855
Also von dem Objekt. Okay, das bedeutet... Du baust ein Objekt und du nennst das hier myTempFile.

01:06:08.535 --> 01:06:11.015
Und machst das als Klasse. Das heißt, du hast einen Klassenconstructor,

01:06:11.115 --> 01:06:14.295
der legt eine temporäre Datei an, so im Dateisystem.

01:06:14.635 --> 01:06:17.175
Und der hat ein Symbol-Dispose und du machst das in einem Block.

01:06:17.875 --> 01:06:21.855
Block läuft zu Ende, Symbol-Dispose läuft, das Objekt geht out of scope.

01:06:22.755 --> 01:06:27.095
Wenn du es aber jetzt hinkriegst, eine Variable außerhalb von dem Block zu machen,

01:06:27.175 --> 01:06:31.995
namens alias, und in dem Block sagst du alias gleich myTempFileInstance,

01:06:32.635 --> 01:06:36.415
Dann kriegst du ja dieses Objekt außerhalb von diesem Block befördert. Ja.

01:06:37.415 --> 01:06:41.535
Und dann kannst du auf dieses Objekt zugreifen außerhalb von dem Block und kannst

01:06:41.535 --> 01:06:46.435
darauf Operationen durchführen, obwohl die zugrunde liegende Ressource tatsächlich gar nicht mehr da ist.

01:06:47.755 --> 01:06:51.275
Weil die temporäre Datei ja weg ist, weil ja die Using-Deklaration in dem Block

01:06:51.275 --> 01:06:53.735
zum Ende des Blocks gekommen ist, die Logik getriggert hat.

01:06:54.035 --> 01:06:58.835
Das heißt, deine Objektreferenz existiert weiterhin, weil du halt ja eine zweite

01:06:58.835 --> 01:07:02.915
Referenz auf das Ding gemacht hast. Aber die Referenz mit Using hat die Aufräumlogik

01:07:02.915 --> 01:07:04.855
getriggert und du kannst weiter auf diesem Objekt rum hantieren,

01:07:05.295 --> 01:07:07.895
obwohl das, was es repräsentiert, schon tot ist.

01:07:08.695 --> 01:07:14.395
Okay, also das verhindert dann dieses Aufräumen nicht, sondern es ist tatsächlich so...

01:07:15.809 --> 01:07:18.909
In diesem Scope wurde ich definiert. Wenn der Scope zu Ende ist,

01:07:19.129 --> 01:07:26.729
dann mache ich, tue ich mein Werk und genau, wenn wer anderes dann eben auf

01:07:26.729 --> 01:07:30.149
diese Datei in deinem Beispiel zugreifen will, dann ist die weg.

01:07:31.269 --> 01:07:34.709
Genau, es ist halt buchstäblich nichts anderes als Use After Free.

01:07:35.509 --> 01:07:38.349
Da ist was nicht mehr da und man sollte dann nicht mehr so tun,

01:07:38.429 --> 01:07:43.289
als wäre es da und darauf rum hantieren. Aber macht man halt eben jetzt trotzdem. Ja, okay.

01:07:44.449 --> 01:07:46.349
Ja, wird man ja schnell merken.

01:07:47.729 --> 01:07:51.609
Wird man es? Ich weiß es nicht. Ja, schwierig.

01:07:51.829 --> 01:07:56.489
Also ich meine, du musst dir ja erstmal auffallen, es müssen die richtigen Umstände da passieren.

01:07:56.729 --> 01:08:00.589
Und ich meine, das, was dieses Problem auslöst, ist ja per Definition etwas

01:08:00.589 --> 01:08:04.369
sehr Unübersichtliches. Weil du ja irgendwie eine Ressource leakst.

01:08:05.109 --> 01:08:07.329
Selten auf so eine explizite Weise, wie ich es jetzt beschrieben habe.

01:08:07.469 --> 01:08:11.069
Aber meine Güte, du hast halt eine Error-Function geschrieben und die returnt was.

01:08:12.169 --> 01:08:15.489
Möglicherweise ja implizit und dann hast du plötzlich ein Objekt in der Hand

01:08:15.489 --> 01:08:19.849
auf dem du noch diese ganzen Operationen ausführen kannst, wenn du willst aber

01:08:19.849 --> 01:08:22.249
es wird halt nicht das tun, was du möchtest, sondern halt im günstigsten Fall

01:08:22.249 --> 01:08:25.789
irgendwie failen ähm, lauter so Kisten,

01:08:26.869 --> 01:08:30.829
ist halt ein bisschen doof ja, so, dachte ich mir hold my beer,

01:08:30.989 --> 01:08:31.729
dann kann ich reparieren.

01:08:33.517 --> 01:08:39.077
Ich habe da was gebaut. No use after free.js heißt es buchstäblich.

01:08:40.577 --> 01:08:48.437
Es ist auch eine super Kiste, wo ich so dachte, okay, das lässt sich ja offensichtlich reparieren.

01:08:49.797 --> 01:08:55.717
Oder? Du musst ja nur hingehen und musst sagen, ich muss sozusagen diese Aufräumlogik,

01:08:55.837 --> 01:09:01.977
die ja stattfindet am Ende, dahingehend erweitern, dass sie das Objekt unbrauchbar macht.

01:09:03.597 --> 01:09:07.737
Die Logik ist ja da. Du musst ja nur sozusagen sagen, das, was definiert wurde

01:09:07.737 --> 01:09:10.077
als Aufräumlogik und halt das andere auch noch.

01:09:11.977 --> 01:09:15.477
Habe ich mir also gedacht, das ist total trivial, das baue ich mal eben schnell.

01:09:16.137 --> 01:09:20.377
War es auch, hat halt nur lustige Edge-Cases und danach halte ich auch die Klappe. Keine Sorge.

01:09:21.017 --> 01:09:24.817
Aber pass auf, JavaScript Proxy, kennst du ja, ne?

01:09:25.577 --> 01:09:28.897
Du rappst einfach ein Objekt in einem anderen Objekt und dieses andere Objekt

01:09:28.897 --> 01:09:32.617
ist in der Lage, interne Operationen, diese 13 internen Dinge,

01:09:32.637 --> 01:09:34.917
die man damit einem Objekt machen kann, als Funktion aufrufen,

01:09:35.057 --> 01:09:37.257
Prototyp setzen usw. Die kannst du alle abfangen.

01:09:38.324 --> 01:09:42.984
Ist ein alter Hut. So, davon gibt es ja eine Untervariante, den Revocable Proxy,

01:09:43.164 --> 01:09:47.324
den keiner benutzt und dessen Idee folgende ist, man rappt einen Proxy um ein

01:09:47.324 --> 01:09:51.484
Objekt, aber kriegt neben dem Proxy auch noch eine Funktion zur Verfügung,

01:09:51.824 --> 01:09:54.664
womit dann der Proxy von diesem gerappten Objekt getrennt wird.

01:09:55.004 --> 01:09:56.144
Das hat dann zwei Effekte.

01:09:56.584 --> 01:09:58.924
A, der Proxy hält dann keine Referenz mehr auf dieses Objekt,

01:09:59.004 --> 01:10:01.104
das kann also von der Garbage Collection eingesammelt werden.

01:10:01.344 --> 01:10:06.444
Und B, weil ja das, was der Proxy dann rappt, nicht mehr da ist als Objekt,

01:10:06.444 --> 01:10:08.424
kann man natürlich mit dem Proxy nichts mehr machen.

01:10:08.564 --> 01:10:10.664
Alle Operationen, die man mit einem Objekt durchführen kann,

01:10:11.164 --> 01:10:12.064
münden in einer Exception.

01:10:12.964 --> 01:10:18.304
Sprich, du kannst einfach eine Funktion bauen, die wrapped ein anderes Objekt,

01:10:18.524 --> 01:10:22.364
der Proxy implementet selber sein Symbol Dispose oder Async Dispose.

01:10:24.424 --> 01:10:28.144
Und naja, macht halt eben, wenn das tatsächlich stattfindet,

01:10:28.504 --> 01:10:32.324
ein Revoke, nimmt sich selbst aus dem Spiel und dann kann dieses Objekt nicht

01:10:32.324 --> 01:10:37.884
mehr benutzt werden, weil die originale Clean-Up-Logik gelaufen ist und natürlich die,

01:10:39.684 --> 01:10:44.644
assoziierte Clean-Up-Logik, die sozusagen das Objekt aus der Welt rausnimmt, auch noch läuft.

01:10:44.904 --> 01:10:49.164
Okay, das heißt, du schaltest das quasi zwischen der,

01:10:50.744 --> 01:11:04.364
per Using zugewiesenen Variable und dem Objekt, das diese Dispose Methode hat, richtig? Ja, genau.

01:11:04.424 --> 01:11:07.124
Ich mache buchstäblich das, was du auch tun würdest, wenn du jetzt sagen würdest,

01:11:07.204 --> 01:11:07.924
ich will das verhindern.

01:11:08.324 --> 01:11:11.324
Du würdest in deine Klasse halt eben einfach in die Dispose-Logik einen Flag

01:11:11.324 --> 01:11:15.244
setzen, ist Disposed, und das würdest du halt einfach in jeder Methode und in

01:11:15.244 --> 01:11:19.404
jeder Operation, jedem Getter auslesen und sagen, wenn ist Disposed true ist,

01:11:19.684 --> 01:11:20.664
dann schmeißt du Exception.

01:11:21.904 --> 01:11:25.804
Das ist nichts weiter als die automatisierte Version davon. Okay.

01:11:28.170 --> 01:11:31.630
Aber jetzt gibt es den Edge-Case. Okay.

01:11:32.990 --> 01:11:36.510
Okay, wenn ich dich jetzt richtig einschätze, dann benutzt du ja JavaScript-Klassen

01:11:36.510 --> 01:11:38.270
nicht so viel. Das ist korrekt.

01:11:38.870 --> 01:11:44.530
Ja, aber du weißt ja, da drin gibt es ja die richtigen privaten Felder mit der Raute davor.

01:11:46.730 --> 01:11:50.410
So, das heißt, du machst irgendwie Class A und dann machst du da drin Foo gleich

01:11:50.410 --> 01:11:52.210
42, nicht privates Feld.

01:11:52.650 --> 01:11:56.750
Raute Foo 23 ist ein privates Feld. Ja, okay.

01:11:57.270 --> 01:12:01.450
Und ein Proxy kann das normalerweise nicht irgendwie nehmen.

01:12:01.670 --> 01:12:04.590
Ja, das glauben irgendwelche Idioten, natürlich geht das, muss man nur richtig rummachen. Okay.

01:12:05.790 --> 01:12:08.750
Das ist nicht das Problem.

01:12:08.830 --> 01:12:10.630
Das Problem, was halt eben die Leute damit meistens haben, ist,

01:12:10.910 --> 01:12:14.250
sie haben ein privates Feld, sie haben einen Getter, der auf dieses private

01:12:14.250 --> 01:12:16.670
Feld zugreift und sie rappen das gesamte Objekt in einem Proxy.

01:12:16.910 --> 01:12:21.690
Wenn sie dann hingehen und sagen, meinproxy.foo und das invokt diesen Getter,

01:12:21.750 --> 01:12:25.810
der das private Feld ausliest, wenn ich also schreibe, myproxy.foo .foo und

01:12:25.810 --> 01:12:29.650
der Getter ist eine Function, dann ist das this in dieser Function, welches Objekt?

01:12:32.150 --> 01:12:37.030
Der Proxy. Ja, okay. Und nicht das Ding, was der Proxy rappt.

01:12:37.090 --> 01:12:40.030
Und das Ding, was der Proxy rappt, ist der Eigentreamer von diesem Teil.

01:12:40.610 --> 01:12:43.690
Und irgendwer anders darf da natürlich nicht ran. Ob das jetzt ein Proxy ist

01:12:43.690 --> 01:12:46.750
oder eine Subklasse oder was auch immer, da geht halt die Runtime Protection

01:12:46.750 --> 01:12:50.510
hin und sagt so, du bist nicht der Eigentreamer, du bist ein Rapper um den Eigentreamer, geh weg.

01:12:51.810 --> 01:12:54.870
Aber indem man das entsprechend redirectet in der Implementierung des Proxys,

01:12:54.870 --> 01:12:56.030
kann man das problemlos umgehen.

01:12:56.230 --> 01:12:58.410
Das will halt bloß keiner wissen. Alle wollen halt nur sagen,

01:12:58.530 --> 01:13:00.750
mi, mi, mi, alles ist doof und riecht nach Lulu. JavaScript ist keine richtige

01:13:00.750 --> 01:13:02.450
Programmiersprache. Die haben bloß keine Ahnung.

01:13:03.190 --> 01:13:06.770
Okay, das hast du aber eingebaut. Ja, das ist total trivial.

01:13:07.070 --> 01:13:09.830
Das macht das Ding, das kann private Felder, alles kein Problem.

01:13:10.150 --> 01:13:15.170
Aber Shep, wusstest du, dass wenn du so ein privates Feld in einem Objekt hast,

01:13:15.950 --> 01:13:17.890
dass das keine Property auf diesem Objekt ist?

01:13:22.840 --> 01:13:27.060
Also, von außen betrachtet, meinst du? Das ist dann wahrscheinlich...

01:13:28.680 --> 01:13:32.600
Nein, ganz tatsächlich. Also, du kannst ja eine folgende Konstruktion machen.

01:13:32.720 --> 01:13:35.180
Du kannst ja ein JavaScript-Objekt haben, dann eine PropertyFoo,

01:13:35.340 --> 01:13:39.580
das ist eine Function, und die returnt eine Variable x, die irgendwo in dem Scope ist.

01:13:40.760 --> 01:13:43.820
Das heißt, du hast auf dem Objekt die Fähigkeit, an den Wert von x zu kommen,

01:13:44.000 --> 01:13:48.160
ohne dass x tatsächlich manifest als Property auf diesem Objekt stecken würde.

01:13:48.160 --> 01:13:51.100
Man teilt sich halt nur zufälligerweise ein Scope. Ja.

01:13:51.680 --> 01:13:54.440
Das gibt's. Wusstest du, dass private Felder genauso funktionieren?

01:13:56.040 --> 01:13:59.160
Nee, wusste ich nicht. Die existieren nicht als Klassenproperties.

01:13:59.860 --> 01:14:06.000
Die werden dir so verkauft. Du kannst schreiben, Foo mit einer Raute oder ohne

01:14:06.000 --> 01:14:07.680
einer Raute. Es ist die exakt gleiche Syntax.

01:14:07.960 --> 01:14:10.320
Wenn du es im Browser in die Konsole schreibst, behauptet der,

01:14:10.660 --> 01:14:13.520
da würde eine Property namens Raute Foo auf dem Objekt draufstecken.

01:14:13.660 --> 01:14:15.400
Aber das ist tatsächlich nicht der Fall.

01:14:15.800 --> 01:14:19.120
Der Mechanismus, wie diese Teile gespeichert werden, ist wirklich viel mehr,

01:14:19.220 --> 01:14:22.020
wie ich es gerade beschrieben habe, mit dieser Function, wo halt zufälligerweise

01:14:22.020 --> 01:14:23.080
ein Scope etabliert ist.

01:14:24.340 --> 01:14:28.200
So, jetzt sagst du, wen interessiert es? Der Browser zeigt mir das so an,

01:14:28.280 --> 01:14:31.920
die Syntax ist so. Gibt es überhaupt ein Szenario, wo das wahrnehmbar ist?

01:14:32.940 --> 01:14:36.520
Ja, das frage ich mich. Ich habe die längste Zeit gedacht, es gäbe keins,

01:14:36.900 --> 01:14:40.000
bis ich im Rahmen der Entwicklung von dieser verdammten Library darauf gekommen

01:14:40.000 --> 01:14:43.940
bin, dass es ein Szenario gibt, wo man das merkt, dass das nicht der Fall ist.

01:14:44.780 --> 01:14:48.440
Und das geht so. Du baust deine Klasse, du hast da drin das private Feld,

01:14:48.600 --> 01:14:52.640
und du baust auf der Klasse eine statische Methode,

01:14:53.400 --> 01:15:00.840
die entgegennehmen kann eine Instanz ihrer selbst und die dann sagt Instanz.RouteFu.

01:15:02.740 --> 01:15:06.820
Es ist also privat, aber du benutzt keine Methode auf dem Objekt,

01:15:07.120 --> 01:15:10.140
sondern du benutzt eine statische Methode, die in der Klasse wohnt und deswegen

01:15:10.140 --> 01:15:16.020
die gleichen Zugriffsberechtigungen hat, um auf die Weise an dieses private Feld ranzukommen. Ja.

01:15:17.313 --> 01:15:22.573
Das machst du mit einmal Foo und mit RauteFoo. Machst du auch zwei statische Methoden für.

01:15:22.993 --> 01:15:26.393
Die eine liest das Geheimnis aus für Foo und das andere für RauteFoo.

01:15:26.953 --> 01:15:32.993
Und dann gehst du hin, nimmst also diese Klasseninstanz, wraps die in ein Proxy

01:15:32.993 --> 01:15:35.213
und revokest dieses Ding.

01:15:35.613 --> 01:15:39.313
Dass du also sagst, jede Operation, die auf diesem Objekt stattfindet,

01:15:39.433 --> 01:15:41.933
ist verboten. Kann nicht mehr funktionieren.

01:15:42.373 --> 01:15:46.873
Alles wird mit einem Läuftier nicht beantwortet. und dann gehst du hin,

01:15:47.133 --> 01:15:48.333
machst einmal deine Klasse,

01:15:48.773 --> 01:15:53.953
rufst die schadische Methode auf für das Auslesen von der nicht privaten Foo

01:15:53.953 --> 01:15:55.413
Property und dann sagt er,

01:15:55.733 --> 01:15:58.913
naja, du versuchst gerade ein Read der Foo Property auf der Instanz zu machen,

01:15:59.233 --> 01:16:03.013
der Proxy wurde revoked, alle Operationen auf diesem Objekt lesen,

01:16:03.273 --> 01:16:05.913
Proxy, Quatsch, lesen, Prototyp setzen, Prototyp auslesen,

01:16:06.413 --> 01:16:09.793
all das resultiert in einer Exception. Du probierst das und es funktioniert nicht.

01:16:10.193 --> 01:16:15.773
Du machst aber das gleiche Manöver mit dem privaten Ding, du rufst also die

01:16:15.773 --> 01:16:20.013
statische Methode für das Auslesen von RauteFu auf, steckst die Instanz da rein,

01:16:20.833 --> 01:16:23.633
die Instanz, in dem Fall halt eben der Proxy, wo man halt eben nicht mehr rankommen

01:16:23.633 --> 01:16:27.413
darf, weil ist ja alles revoked, und stellt sich raus, das funktioniert.

01:16:28.533 --> 01:16:31.313
Warum funktioniert das? Weil das nicht im Objekt gespeichert wird.

01:16:31.513 --> 01:16:34.573
Weil es nicht im Objekt gespeichert ist. Das Auslesen von einem privaten Feld

01:16:34.573 --> 01:16:38.093
ist nicht das Auslesen von einer Property aus dem Objekt.

01:16:38.253 --> 01:16:43.253
Denn das ist ja gesperrt, sondern was es vielmehr ist, ist, Es nimmt diese Instanz

01:16:43.253 --> 01:16:48.333
und verwendet die Instanz als Key zum Lookup von einer damit assoziierten Map

01:16:48.333 --> 01:16:52.453
gleichsam, wo die ganzen privaten Werte drin sind. Hier aber quasi Browser intern ist.

01:16:53.253 --> 01:16:54.793
Ja, genau. Mhm.

01:16:55.942 --> 01:16:59.842
Also es ist quasi einfach nur ein Pointer letztlich. Ja genau,

01:16:59.962 --> 01:17:03.642
also du verwendest nicht eine Operation auf dem Objekt, um das Feld auf dem

01:17:03.642 --> 01:17:06.582
Objekt in Airquotes auszulesen, sondern alles, was du brauchst,

01:17:06.602 --> 01:17:09.402
damit das funktioniert, ist die Identität von dem Objekt.

01:17:09.782 --> 01:17:15.222
Das Objekt ist ein Key zum Lookup und nicht wirklich ein Objekt,

01:17:15.302 --> 01:17:18.942
auf dem die Property steht, obwohl dir alle Tools das so verkaufen,

01:17:19.122 --> 01:17:21.402
obwohl alle Dokumentation sagt, das wäre so.

01:17:21.682 --> 01:17:24.342
Und ich habe das schon vor langer Zeit in den ECMAS-Kund-Spezifikationen gelesen.

01:17:24.342 --> 01:17:26.502
Das ist ja ein lustiges Implementierungsdetail.

01:17:26.662 --> 01:17:29.922
Das wird garantiert keine Effekte haben. Und als ich dann probiert habe,

01:17:30.162 --> 01:17:33.802
diese Use-After-Free-Library so zu schreiben, dass die wirklich alles ausschließt,

01:17:34.082 --> 01:17:38.502
weil das verkauft ja der Name, habe ich gemerkt, wenn man dieses Manöver abzieht,

01:17:38.582 --> 01:17:40.642
was natürlich niemand, der bei Verstand ist, jemals tun wird.

01:17:41.062 --> 01:17:44.462
Aber wenn man das abzieht, dann kann man doch noch Use-After-Free machen.

01:17:46.571 --> 01:17:47.151
Bekloppt.

01:17:49.611 --> 01:17:54.251
Also ich finde, das ist definitiv ein Blogpost wert. Ja, gib mir mal wieder einen Blog.

01:17:55.271 --> 01:18:00.591
Achso, ist das kaputt oder was? Nee, aber das ist noch dieses,

01:18:00.611 --> 01:18:04.411
das alte hier PHP getriebene Dings und willst das loswerden?

01:18:04.431 --> 01:18:07.691
Ja, das wird ersetzt durch irgendwas statisch Seitengeneriertes.

01:18:08.351 --> 01:18:11.051
Ich lasse noch den alten Content da so liegen, wie er jetzt ist und übertrag

01:18:11.051 --> 01:18:12.711
den nicht in was Neues. Das ist zu viel Arbeit.

01:18:13.591 --> 01:18:16.111
Das wird so archiviert und dann fangen wir mit was Neuem schön frisch an.

01:18:17.091 --> 01:18:19.511
Archiviert im Sinne von bleibt natürlich online, keine Sorge,

01:18:19.651 --> 01:18:26.211
aber... Das kannst du doch bestimmt super hier wegscrapen und nach Markdown überführen.

01:18:28.931 --> 01:18:32.831
Das kann ich wegscrapen und nach Markdown überführen. Also, nee.

01:18:33.591 --> 01:18:36.511
Ich meine, das sind ja Gesammelte Texte seit 2006.

01:18:37.891 --> 01:18:41.851
Und das ist ja auch über mehrere Generationen von Blogsoftware hinweg.

01:18:42.791 --> 01:18:44.631
Das Markup ist überhaupt nicht einheitlich.

01:18:45.991 --> 01:18:51.431
Und das Problem ist auch, da werden halt Demos verlinkt, die halt teilweise

01:18:51.431 --> 01:18:56.971
sehr abenteuerliche Libraries, Webstandards, aus denen nichts geworden ist, alles so verlinken.

01:18:59.571 --> 01:19:01.551
Ich habe halt kein Mittel gefunden.

01:19:04.356 --> 01:19:10.176
Das halt zu reproduzieren. Weißt du, das ist wie diese Kobold-Software,

01:19:10.236 --> 01:19:11.576
von der wir vorhin ganz zu Beginn sprachen.

01:19:12.096 --> 01:19:15.576
Das ist da und das funktioniert und es gibt halt einfach keine deterministische

01:19:15.576 --> 01:19:18.536
Möglichkeit, das alles in was Neues zu übertragen, es sei denn,

01:19:18.636 --> 01:19:21.556
ich mache das alles händisch und selbst dann wird es nicht funktionieren.

01:19:22.356 --> 01:19:24.576
Das ist dem, was bei Polymer reden, weißt du?

01:19:25.436 --> 01:19:29.836
Polymer mit seinen komischen CSS-Vorminanzwohnen. Ja, 2013 war das.

01:19:29.976 --> 01:19:32.356
Da hast du in Düsseldorf auch einen Vortrag drüber gehalten.

01:19:32.876 --> 01:19:37.076
Ja, genau. Und die haben halt so Sachen wie so Shadow DOM Piercing Kombinatoren in ihrem CSS drin.

01:19:37.496 --> 01:19:41.696
Wenn du da also jetzt irgendwie eine Art von statischem Seitengeneratorsystem

01:19:41.696 --> 01:19:46.716
hingehst und du schmeißt denen dieses CSS vor, legen die sich die Karten.

01:19:46.836 --> 01:19:49.416
Die können das nicht parsen. Weil natürlich nicht. Ist ja kaputtes CSS.

01:19:51.156 --> 01:19:54.876
Das Einzige, was halt geht, ist, du lässt es, wie es ist, sodass halt der Einzige,

01:19:54.876 --> 01:19:58.756
der da rangeht, halt der CSS-Parser vom Browser ist, der mit Versteh-Ich-Nicht

01:19:58.756 --> 01:20:03.356
umgehen kann und sich nicht wie so eine Primal, so ein Build-Tool da sofort die Karten legt.

01:20:03.596 --> 01:20:07.296
Wobei das Build-Tool meistens ja gar nicht, also da wird ja dann meistens irgendwie

01:20:07.296 --> 01:20:15.056
Prism eingebunden oder sowas, um einen Code oder einen Code-Abschnitt sozusagen abzugraden.

01:20:15.596 --> 01:20:16.976
Nee, nee, nee, das sind verlinkte Demos.

01:20:17.736 --> 01:20:21.656
Ach so. Es muss ja alles irgendwie in ein neues System überführt werden.

01:20:21.856 --> 01:20:25.196
Ich will ja nicht, dass das Ganze weiterhin irgendwie in WP-Content-slash-Demos,

01:20:26.656 --> 01:20:30.256
liegt, weil ich muss ja auch die Links möglicherweise umschreiben,

01:20:30.376 --> 01:20:33.436
weil die Seitenstruktur sich ändert. oder halt auch nicht, man weiß es nicht.

01:20:33.696 --> 01:20:36.816
Das Ding ist halt einfach nur, ich habe 20 Jahre dieses dämliche Ding vorgeschrieben,

01:20:36.876 --> 01:20:39.016
das ist einfach, das geht nicht, das skaliert nicht.

01:20:39.496 --> 01:20:43.616
Okay, und so machen, wie wir das hier mit unserer Podcast-Seite gemacht haben,

01:20:43.696 --> 01:20:48.796
wir laufen ja quasi untenrum noch mit WordPress, aber nutzen das noch als Headless-CMS

01:20:48.796 --> 01:20:50.876
für einen Charging-Seitengenerator?

01:20:51.616 --> 01:20:54.436
Ja, aber das CMS ist nicht mehr maintained. Okay.

01:20:56.096 --> 01:20:59.016
Und wenn es das wäre, würde ich es nicht mehr haben wollen. Mhm.

01:21:01.074 --> 01:21:02.934
Ich lasse das einfach so. Das wird jetzt eingefroren.

01:21:05.594 --> 01:21:09.074
Das wird archiviert. Das bleibt weiterhin da. Das bleibt weiterhin dieses PHP-CMS.

01:21:09.214 --> 01:21:11.474
Ich schmeiße halt nur irgendwann die Schlüssel fürs Login weg.

01:21:15.814 --> 01:21:20.354
Und dann sage ich halt irgendwann mal hier, also scrape ich da manuell das runter

01:21:20.354 --> 01:21:23.754
im Sinne von lad den ganzen HTML-Content, der generiert wurde, runter.

01:21:25.874 --> 01:21:29.294
Und Internet Archive oder sowas. Aber das einfach, ich habe es probiert.

01:21:29.294 --> 01:21:31.774
Ich bin relativ weit gekommen. Ich habe auch Tools gefunden,

01:21:31.894 --> 01:21:32.974
denen ich beibiegen konnte.

01:21:33.634 --> 01:21:37.394
Irgendwie ignoriere diese CSS-Datei, nimm die so as is und so.

01:21:37.574 --> 01:21:39.914
Ich bin relativ weit gekommen und dann ist dieses Tool, dass das konnte,

01:21:40.054 --> 01:21:47.314
halt irgendwie in den Moloch des Unmaintained reingefallen und ist jetzt nicht in der Lage,

01:21:47.534 --> 01:21:52.714
irgendwie HTML richtig zu komprimieren, was halt schon so ein bisschen schwach ist.

01:21:52.834 --> 01:21:56.014
Also schön, wenn es das andere kann, was ich haben möchte, aber an den basalen

01:21:56.014 --> 01:21:57.514
Sachen scheitert. Das geht halt eben nicht.

01:21:58.514 --> 01:22:01.934
Deswegen archivieren wir das so, lassen das wie es ist. Ja.

01:22:02.754 --> 01:22:06.454
Und machen was schönes Neues. Statischer Seitengenerator, handgeschrieben.

01:22:06.814 --> 01:22:08.074
Wird bis in aller Ewigkeit funktionieren.

01:22:08.474 --> 01:22:12.794
Ja, zumindest Markdown-Dateien. Die kannst du in sehr viele Dinge reinwerfen.

01:22:12.974 --> 01:22:16.234
Das habt ihr alle mit Markdown. Können wir gleich HTML schreiben. Das ist das Problem.

01:22:18.874 --> 01:22:25.374
Ist verboser. Und auch unflexibler vielleicht. Unflexibler bezüglich was?

01:22:27.354 --> 01:22:33.434
Bezüglich irgendwie anderer Use Cases vielleicht. Es gibt ein wunderbares Tool.

01:22:33.854 --> 01:22:36.474
Stumpf ist Trumpf. Kennst du PostHTML?

01:22:38.454 --> 01:22:40.674
Also sowas wie PostCSS, aber für HTML.

01:22:43.376 --> 01:22:47.176
Das ist so, das ist mega stumpf.

01:22:47.476 --> 01:22:50.356
Naja, das ist halt einfach so, man stelle sich halt einfach mal vor,

01:22:50.876 --> 01:22:55.536
also bePostCSS, der Past HTML, und gibt dir halt einen Syntax-Tree und dann

01:22:55.536 --> 01:22:56.296
machst du damit deinen Spaß.

01:22:59.076 --> 01:23:01.776
So, das heißt, wenn du das irgendwie in was anderes reintransformieren willst,

01:23:02.016 --> 01:23:04.836
schreibst du ein Zehnzeiler-Plugin und dann macht das das.

01:23:06.336 --> 01:23:11.416
Du willst irgendwie Komponenten erfinden, die aber nicht Web-Components kleinseitig

01:23:11.416 --> 01:23:14.376
sind, sondern die ihre Transformation serverseitig vollführen.

01:23:15.636 --> 01:23:19.376
Erfindest halt einfach jeden HTML-Tag, schreibst ein zehnzeiliges Plugin dafür

01:23:19.376 --> 01:23:20.776
und fertig ist die Kiste.

01:23:21.176 --> 01:23:24.016
Ich habe also keine Template-Engine in meinem neuen Ding am Start,

01:23:24.116 --> 01:23:27.776
sondern ich schreibe normales HTML, aber habe mir halt einfach so HTML-Tags

01:23:27.776 --> 01:23:32.816
erfunden, die so Sachen machen wie das kommt in dieses Layout rein, der Block geht dahin.

01:23:33.736 --> 01:23:36.556
Also quasi ein modernes XSLT.

01:23:38.176 --> 01:23:44.516
Ich glaube, das ist extrem unmodern. Aber es ist halt so ein lokales Maximum,

01:23:44.556 --> 01:23:46.476
weißt du? Das kann halt gerade eben genug.

01:23:47.196 --> 01:23:50.936
Es ist super stumpf. Die Dokumentation besteht aus ja, hier hast du ein AST-Format.

01:23:51.136 --> 01:23:53.556
Es besteht aus einem Objekt mit Verschachtelung drin.

01:23:55.456 --> 01:24:00.296
Mach halt. Am Ende ist ja HTML so kompliziert nicht. Es ist halt eine Baumstruktur mit halt Strings drin.

01:24:03.244 --> 01:24:07.044
Ich finde dieses Tool so super. Es ist so stumpf und billig.

01:24:07.784 --> 01:24:11.564
Und wenn man einfach mal so alles fahren lässt, was man so in Sophistication

01:24:11.564 --> 01:24:16.004
erwartet und sich mal wirklich überlegt, das ist das einfachste Ding,

01:24:16.104 --> 01:24:18.284
mit dem man das hinkriegen kann, dann nimmst du das.

01:24:19.964 --> 01:24:24.104
Mein HTML-Kompressor ist dann wieder irgendwie so ein WebAssembly in Rust geschriebenes

01:24:24.104 --> 01:24:26.864
Fancy-Teil, weil das sich halt eben an der Stelle lohnt.

01:24:27.644 --> 01:24:31.044
Aber ich brauche keine Template-Engine, die Syntax neu erfindet. Wir haben schon was.

01:24:31.884 --> 01:24:35.304
Mache halt eben ein bisschen Ergänzung dazu. Und vor allen Dingen besteht es

01:24:35.304 --> 01:24:38.104
halt ab Werk aus nichts, was ich ja besonders schön finde, dass man einfach

01:24:38.104 --> 01:24:41.444
sagen kann, so, dieses Plugin dazu, das Plugin dazu und ich schreibe mir zwei

01:24:41.444 --> 01:24:44.164
weitere im Rahmen von 30-Zeilen-Code.

01:24:46.463 --> 01:24:50.683
So hältst du deine Side-Projects maintainable.

01:24:51.643 --> 01:24:53.883
Also eine Frage, die wir jetzt ja nicht besprochen haben, ist,

01:24:53.943 --> 01:24:56.923
was hat React-Peter getan? Von Tim.

01:24:58.563 --> 01:25:01.763
Mich ein bisschen auf dieses Ding gebracht. Ich habe einmal gedacht,

01:25:01.903 --> 01:25:04.403
ich mache jetzt hier was Schönes mit Next.js für mein Side-Project.

01:25:05.183 --> 01:25:08.083
Dann lasse ich das Ding einmal drei Monate liegen und dann mache ich NPM-Update.

01:25:08.223 --> 01:25:12.123
Und danach habe ich gesagt, okay, Lektion gelernt. Ich möchte nicht mehr.

01:25:13.183 --> 01:25:16.363
Klar, wenn du jetzt irgendwie deine fette Firma bist und du kannst deine Zeit

01:25:16.363 --> 01:25:19.763
damit verbringen, das Ding täglich irgendwie zu bepütschern. Super.

01:25:21.203 --> 01:25:25.543
Aber das sind Werkzeuge, die ich hier baue und die sollen für mich arbeiten und nicht umgekehrt.

01:25:26.363 --> 01:25:30.003
Wenn ich das Ding drei Monate nicht anfassen möchte und nicht drüber nachdenken

01:25:30.003 --> 01:25:33.223
möchte und danach genau da weitermachen möchte, wo ich aufgehört habe,

01:25:33.703 --> 01:25:36.923
was halt für so Side-Projects, wie so eine persönliche Webseite das ja ist,

01:25:38.643 --> 01:25:40.183
meines Erachtens notwendig ist.

01:25:42.203 --> 01:25:45.203
Dann gehen wir weg mit moderner Webentwicklung. Das ist ja nett für die,

01:25:45.363 --> 01:25:47.763
die sich das leisten können, weil das die einzige Beschäftigung ist.

01:25:48.043 --> 01:25:50.863
Aber für die Leute, die was Wichtigeres zu tun haben, als jeden Tag das irgendwie

01:25:50.863 --> 01:25:53.783
zu pflegen und zu updaten. Und jetzt gibt es Hux und jetzt gibt es dieses.

01:25:55.023 --> 01:25:58.483
Ja, lassen Sie mich. Ich möchte das nicht.

01:25:59.443 --> 01:26:05.303
Ja, wer schrieb letztens auf Social Media, die beeindruckende Software ist die,

01:26:05.363 --> 01:26:06.783
die irgendwie aus quasi nichts besteht.

01:26:07.583 --> 01:26:09.523
So, Lisp sind so und so viele Bytes.

01:26:10.603 --> 01:26:12.843
Ja, halt so Boring-Tech einfach.

01:26:16.663 --> 01:26:20.763
Ich weiß nicht, ob es boring ist, so tatsächlich, weil es ja schon eher ungewöhnlich ist. Ja.

01:26:21.503 --> 01:26:26.283
Boring wäre ja nicht ungewöhnliches. Boring wäre, ich mache mein PHP-Backend.

01:26:26.643 --> 01:26:30.863
Ich habe hier Java am Start, ich mache ein React-Frontend. Das ist ja eigentlich

01:26:30.863 --> 01:26:33.243
das, was heutzutage boring wäre. Mhm.

01:26:35.913 --> 01:26:41.953
Ja, aber vielleicht einfach Dinge, mit denen man eben momentan irgendwie nirgendwo

01:26:41.953 --> 01:26:45.793
Applaus bekommt. Ja, das bestimmt nicht.

01:26:46.573 --> 01:26:50.233
Also kein Applaus und halt eben so Sachen wie, okay, was kann ich weglassen?

01:26:54.602 --> 01:26:59.762
Ja, hört sich auf jeden Fall gut an. Dann, ja, in die Hände gespuckt,

01:26:59.882 --> 01:27:01.042
damit du wieder bloggen kannst.

01:27:02.022 --> 01:27:05.782
Ja, also das Blog werde ich wahrscheinlich erst noch irgendwie nachgelagert da mal dran klatschen.

01:27:05.822 --> 01:27:07.902
Jetzt kommt erst mal eine statische Variante raus, damit ich was habe.

01:27:08.422 --> 01:27:10.022
Und dann bauen wir das da dran, aber,

01:27:12.902 --> 01:27:16.042
Genau, ist deine Seite nicht auch sogar so alt, dass sie auf Mobile gar nicht

01:27:16.042 --> 01:27:18.682
mehr richtig funktionierte oder so? Wann ist das nicht so?

01:27:19.942 --> 01:27:23.342
Oder ist das falsch? Ich bin mir ehrlich gesagt nicht sicher.

01:27:23.342 --> 01:27:27.822
Ich glaube, ich habe ein Mobile-Layout. Erst mal gucken. Ja, doch.

01:27:29.022 --> 01:27:30.142
Geht so einigermaßen.

01:27:31.602 --> 01:27:32.542
Funktioniert ganz gut.

01:27:34.042 --> 01:27:38.922
Ja, aber auch das Design extrem stark vereinfachen. So auf das Wesentliche konzentrieren,

01:27:39.002 --> 01:27:41.022
weil dann ist es halt eben mit endlich viel Aufwand nötig.

01:27:42.242 --> 01:27:45.922
Möglich. Ja. Ja, cool.

01:27:46.742 --> 01:27:55.302
Und auch cool war unsere hörende Fragen, wir antworten oder geben unsere Gedanken zum besten Folge.

01:27:55.802 --> 01:27:58.742
Wir haben noch diverse Fragen, aber schickt gerne noch weitere.

01:27:58.922 --> 01:28:01.322
Wir würden die dann einfach sozusagen auf.

01:28:03.422 --> 01:28:07.922
Irgendwo zwischen aufbewahren und dann können wir mal wieder so eine Folge machen

01:28:07.922 --> 01:28:09.622
und ein paar davon wegarbeiten.

01:28:10.382 --> 01:28:13.762
Ja, ist so ein bisschen wie Glücksreite. Wir haben gerade nichts Besseres auf

01:28:13.762 --> 01:28:16.962
dem Plan. Lass mal gucken. Nicht nur, was die Spezifikationen sagen,

01:28:17.022 --> 01:28:18.202
sondern was die Hörerinnen und Hörer sagen.

01:28:19.022 --> 01:28:25.802
Ich fand das ja auch sehr gut. und habe auch vor allem hier wieder in dem in

01:28:25.802 --> 01:28:27.742
JavaScript wieder einiges dazu gelernt.

01:28:28.342 --> 01:28:32.462
Genau, ich benutze es halt, ich brauche es wahrscheinlich nicht, aber trotzdem cool.

01:28:33.982 --> 01:28:39.042
Ja. Diese Sprachquarks, die du dann auch immer herauskitzelst,

01:28:39.122 --> 01:28:39.782
finde ich auch immer gut.

01:28:41.738 --> 01:28:45.598
Die kriegst du halt aus Chat-GPT nicht raus. Deswegen, Hörerinnen und Hörer,

01:28:45.778 --> 01:28:48.438
heuert mich an, ich kann euch Sachen erzählen, da hat die KI ja keine Ahnung von.

01:28:49.798 --> 01:28:52.898
Genau. Und wer weiß, ob du es nicht irgendwann brauchst.

01:28:53.218 --> 01:28:55.598
Jetzt hast du es halt im Kopf und wenn du irgendwann mal wieder irgendwie so

01:28:55.598 --> 01:28:58.938
ich hacke mir eben ein Node.js-Skript zusammen und wo ich mich halt eben tatsächlich

01:28:58.938 --> 01:29:03.658
drum kümmern muss, dass immer 100 Zeilen Spaghetti-Code hinterher nicht was liegen bleibt.

01:29:04.058 --> 01:29:06.558
Temporäre Dateien, gerade bei irgendwie so Encoding-Decoding-Kisten.

01:29:06.958 --> 01:29:08.138
Das ist nicht die absurdeste Idee.

01:29:08.538 --> 01:29:13.118
Ja, genau. Also es ist ja auch oft so, dass man einfach nicht direkt Anwendungsfälle

01:29:13.118 --> 01:29:17.398
für bestimmte Dinge hat oder für, hey, ich bin jemand, der kann das und das.

01:29:17.538 --> 01:29:21.178
Und dann denkt man so, ja, cool, aber weiß ich gerade nicht.

01:29:21.698 --> 01:29:25.918
Aber genau, wenn man das dann im Hinterkopf hat, dann ergibt es ja dann doch

01:29:25.918 --> 01:29:30.978
irgendwann die Situation, wo man dieses Know-how oder das Wissen um eine Person

01:29:30.978 --> 01:29:32.958
dann wieder aus dem Hut zaubern kann.

01:29:33.498 --> 01:29:37.118
Ja, und jetzt hast du das irgendwie so im Kopf. Das mariniert jetzt da vor sich hin.

01:29:37.938 --> 01:29:40.278
Und hey, auch im Frontend kann man das benutzen, ne?

01:29:41.518 --> 01:29:43.978
Verbindung schließen, wenn die Operation zu Ende ist. Automatisch.

01:29:44.098 --> 01:29:47.638
Musst du nicht dran denken, irgendwie dein Websocket zu closen oder sowas. Genau.

01:29:48.578 --> 01:29:51.218
Mach die Kamera aus, nachdem du das Foto gemacht hast.

01:29:54.658 --> 01:30:00.018
Das stimmt. Nee, cool. Dann Dankeschön. Ich habe zu danken.

01:30:00.698 --> 01:30:03.818
Danke an die Hörenden für die guten Fragen. Genau.

01:30:04.138 --> 01:30:08.738
Wenn euch die Fragenbeantwortung gefallen hat, dann dürft ihr das gerne kundtun

01:30:08.738 --> 01:30:10.358
auf verschiedenen Wegen.

01:30:10.698 --> 01:30:16.098
Durch Social Media Rückmeldungen, aber natürlich auch durch Bewertungen der

01:30:16.098 --> 01:30:18.618
Folgen. Dann freuen sich die Algorithmen wieder und so weiter und so fort.

01:30:19.978 --> 01:30:23.938
Und genau, dann geht's nächste Woche weiter. Ich gucke mal gerade,

01:30:24.038 --> 01:30:27.538
ob ich weiß, worum es gehen wird. Nee, weiß ich nicht, aber es wird um was gehen.

01:30:28.838 --> 01:30:34.598
Davon ist auszugehen, weil wir hören hier erst auf, wenn wir alle berentet und oder im Grab sind.

01:30:35.018 --> 01:30:39.578
Genau. Ach, wir nehmen bestimmt auch noch hier irgendwie alle auf einer Bank

01:30:39.578 --> 01:30:41.358
sitzen mit so Krückstocken vor uns.

01:30:41.938 --> 01:30:44.878
So wie bei Asterix und Obelix, wenn die Alten im Dorf sitzen.

01:30:45.218 --> 01:30:46.558
Das nehmen wir dann auch noch auf.

01:30:47.338 --> 01:30:51.118
Okay, ich war jetzt mehr so mental bei Futurama, wo unsere Köpfe schon alle

01:30:51.118 --> 01:30:54.898
in diesen Goldfisch-Gäßern sind. Ja, stimmt, das geht auch.

01:30:55.218 --> 01:30:58.598
Und dann können wir mal hier Richard Nixon fragen, was der denn bitteschön von

01:30:58.598 --> 01:31:01.758
Revocable Proxies hält. Ja, das machen wir.

01:31:03.738 --> 01:31:08.978
Guter Plan. Also, dann macht's gut. Du auch, Peter. Hab einen schönen Tag.

01:31:09.558 --> 01:31:13.558
Danke ebenso. Und bis bald. Tschüss. Tschüssi.

