programmier.bar icon
News 20/23 –

Google I/O 2023 // Vue 3.3 // KI-Gerüchte über Apple auf der WWDC

17.05.2023

Shownotes

Die Google I/O hat letzte Woche stattgefunden. Jojo geht für uns im Detail durch die News, die dort zu Dart 3 und Flutter 3.10 gedroppt wurden. Fabi erzählt uns, was es mit der neuen Baseline für Web APIs auf sich hat und warum das im Development-Alltag interessant sein kann, um zu entscheiden, welche Web APIs man nutzen will, um möglichst viele User:innen & Devices zu unterstützen.

Vue hat mit ihrer Version 3.3 viel für die Developer:innen-Erfahrung getan und Sebi erzählt uns dazu noch, was es mit dem neuen Browser Opera One auf sich hat.

Zum Ende hin wird nochmal gemunkelt, was Apple wohl für AI Features auf der WWDC vorstellen wird. Einen kleinen Sneak Peek liefern sie mit neuen Accessibility Features wie der Möglichkeit, mit 15 Minuten Sprachinput die eigene Stimme auf dem iPhone zu synthetisieren und sie in Facetime Calls zu nutzen.

/transkript/programmierbar/news-20-23-google-i-o-2023-vue-3-3-ki-geruechte-ueber-apple-auf-der-wwdc
Hallo und herzlich willkommen zu einer weiteren Folge der Programmierbar News, und zwar der Programmierbar News 20 im Jahre '23. Neben mir sitzt der liebe Sini. Hallo. Jojo. Und ich bin der Fabi. Hi. Der Dennis ist wie immer bei seinem Neugeborenen. Nicht wie immer. Wie immer kann man nicht sagen. Mal wieder. Hoffentlich nächste Woche beerdigt er uns wieder mit seinem Stimmchen. Aber heute noch mal ohne ihn. Letzte Woche war viel los. Google I/O war gewesen. Jojo erzählt uns etwas über da 3 und Flutter 3.10, was da vorgestellt wurde. Sehen wir jetzt etwas über View 3 und noch ein paar kleine Themen wie Bann und Opera One. Mal wieder neuer Browser. Wir unterhalten uns über, was denn da Baseline ist. Und Apple hat ein paar neue Accessibility Features enabled, die auch ganz interessant sind. Genau, wollen wir mit Google I/O Themen starten? Ich glaube, wir werden jetzt nicht heute im Detail komplett die Google I/O durchgehen. Es gab einige AI Themen auch irgendwie, PAM2, das ist ein Data Language Model, wo du liest, ich weiß nicht, nach der Hälfte bist du eingeschlafen, aber die erste Hälfte hast du gesehen. Genau, aber eher nur so ein bisschen Titel-Dropping. Da werden wir bestimmt in den nächsten Wochen noch mal darauf eingehen. Aber wie gesagt, heute Dart Flutter und Baseline von der Google I/O. Legen wir doch los mit Dart und/oder Flutter. Was willst du anfangen? Ich glaube wir fangen erst mal mit Dart an. Also letztendlich ist Dart die Grundlage und das ist jetzt ein sehr großer Release, also ist ein Major Release und jetzt Dart in der Version von Sprung von zwei auf drei. Was sich vor allem letztendlich jetzt eben aktivieren, ist, dass sie auf diese Sound Null-Safety gehen, also Sound Null-Safty. Diese Sound kommt einfach daher, dass natürlich die Sprache mal nicht Null-Safety war und sie natürlich oder sagen sie sind wahrscheinlich auch die einzige Sprache, die das jemals gemacht haben, auf eine Sprache ohne Null-Safety irgendwie komplett diese Null-Safety einzuführen. Das ist auch eine Reise, die fast drei Jahre jetzt gedauert hat. Und jetzt sind sie eigentlich so weit, dass sie sagen, 99 Prozent der tausend populärsten Packages auf Pub-Dev sind irgendwie alle migriert zu diesem Null-Safety-Feature. Vorher hatte man die Möglichkeit zu sagen, ich nutze auch eben halt diese Un-Sound-Null-Safty, wo ich dann auch Pakete, die halt noch nicht diese Null-Safty unterstützt haben, trotzdem verwendet habe. Und inzwischen ist es so, wenn man eben auf D3 migriert, ist es so, dort wird nur noch die Sound-Null-Safty unterstützt. Das heißt, alle Packages, die ich auch einbinde, müssen halt eben dann das unterstützen. Was aber in den meisten Fällen eben kein Problem sein sollte. Aber trotzdem sollte man natürlich beim Update irgendwie aufpassen oder würde letztendlich dann Informationen darüber bekommen, dass es noch nicht unterstützt wird. Was ist denn die aktuelle Version und was ist da so für die Leute? Die aktuelle Version ist, glaube ich, die 2018 oder 2019 gewesen. Also wir haben uns lange letztendlich auf der zwei Version und da ist die Programmier, eine Programmiersprache, die ja von Google initial entwickelt wurde, irgendwann JavaScript im Browser zu ersetzen. Das hat es nie ganz geschafft, aber wurde letztendlich mit Flutter eben als Sprache eben gepickt und hat seitdem natürlich in diesem Ökosystem, aber auch jetzt für andere Anwendungsbereiche natürlich schon deutlich einen Aufwind bekommen. Ist eine Sprache, die sehr ähnlich ist zu Java auch irgendwie TypeScript könnte man sagen, weil es natürlich eine Typ Sicherheit hat, aber an sehr viele Sprach-Features, also eher wie Kodning geht. Wir haben da auch mal eine DeepDive-Folge aufgenommen mit mir. Also falls euch das interessiert und ein bisschen weiter reinhören wollt, hört euch das gerne noch mal an. Habt ihr schon mal probiert vor Pics auf DATE3 zu heben? Kann man es jetzt schon? Also ist. Es releast. Es ist releast, genau. Und wir warten natürlich auch für DATE 3 wäre es halt sinnvoll, dann eben Flutter dann auch 2013 zu verwenden. Und da warten wir lieber immer noch so die ersten Patch-Releases ab, weil eigentlich ist es doch immer so groß, dass bei so einem kleinen Mineral Release, dass da irgendwelche Sachen nachkommen und wir diese Erfahrung gemacht haben, ist es gut, immer so drei, vier Versionen zu warten. Aber wisst ihr, ob alle eure Packages das. Supporten würden? Wir sollten es eigentlich. Also das war damals eigentlich schon so, dass wir es irgendwie untersucht haben und wir sollten eigentlich kein Problem damit haben. Genau, es sind ein paar Sachen auch irgendwie die ge-recated worden. Also es gibt auch einen sehr ausführlichen Migration Guide, der so ein bisschen darauf hinweist, weil so ein paar alte auch schon als die als die als die als die als die als die annotierte APIs jetzt eben rausgeworfen wurden. Zum einen geht es eben da nur mal so als Beispiel, dass man dort diese Colon Syntax eben für die Fault Values nicht mehr unterstützt. Früher konnte man mit die Fault Values halt gleich, aber es halt irgendwie rückwärtskompatibel zu haben, hat man auch unterstützt, dass man einfach mit einem Doppelpunkt in die Fault-Wert in der Parameterliste übergeben konnte. Das wird nicht mehr unterstützt. Es ist auch so, dass eben Mixins eben nicht mehr, also Klassen explizit als Mix definiert werden müssen, damit man sie mixen kann. Vorher konnte man jede Klasse eigentlich irgendwie reinmixen und das funktioniert eben auch nicht mehr. Also man muss letztendlich wirklich eine definierte Mixing Class nutzen, das reinmixen zu können. Und genau es gibt halt hier noch ein paar Änderungen bei den Library. Zum einen wurden halt ein paar Konstruktoren irgendwie entfernt, dass es zum Beispiel beim List Konstruktor eben dort eben nicht mehr den normalen List Konstruktor gibt, weil der einfach nicht Null Safe war. Und dafür soll man jetzt einfach dann entsprechende List Visuals verwenden. Und es war auch zum Beispiel bei der int, bei den ganzen POST-Methoden so, es gab vorher ein optionales On Error Argument, was dann eben, falls ein Wert nicht interpretiert werden konnte, dann einfach eine Closure aufgerufen hat. Und jetzt gibt es eben nur noch die Option, dass man sich eben auf die Exception registriert und dann entsprechend verändert. Was wir gleich bei Daten noch ein bisschen darauf eingehen werden. Es hat sich auch das gesamte Klassensystem so ein bisschen erweitert. Wir haben neue Typen bekommen und deswegen sind halt bestimmte Klassen, die jetzt aus den Corput Bibliotheken kommen, eben nicht mehr zu implementieren oder können nur noch implementiert werden oder können nur noch Extended werden. Also es haben sie einfach ein bisschen mit den neuen Funktionen dann glatt gezogen. Deswegen lass uns mal auf die Spracherweiterung eingehen. Es gibt eben zwei neue Features, die eigentlich oder drei große neue Features, die reingekommen sind. Zum einen gibt es jetzt Rackords, es gibt Patterns und auch die Class Modifieds, die ich eben angesprochen hat. Rackards ist etwas, was ihr wahrscheinlich aus TypeScript kennt. Das sind einfach die Types, also dass man einfach sagen kann, man kann Typen definieren, die halt nicht eine Klasse sein müssen, die einfach nur Werte enthalten. Und Patterns sind vor allem interessant oder Record sind vor allem dann interessant, wenn man auch aus Funktionen jetzt mehr Rückgabetypen übergeben möchte. Jetzt mal als Beispiel. Und das war eben in Darts so, dass es entweder so war, dass man halt irgendwie Listen oder Maps verwendet hat, was natürlich dann wieder untypisierte Daten sind, wo ich dann wieder auf der anderen Seite gucken muss, packe ich die Daten wieder richtig aus? Oder man hat sich immer eine kleine Klasse, so eine Helferklasse dafür geschrieben, was natürlich auch mal ein gewisser Overhead war. Und mit Record kann ich einfach sagen als Syntax einfach so, dass ich einfach eine runde Klammer aufmache, dann kann ich dort letztendlich eine Definition von einem Feld eben reinschreiben, zum Beispiel int a, int b. Oder ich kann auch einfach sagen okay, ich mache einfach letztendlich eine runde Klammer auf und schreib einfach zum Beispiel ein Integer und einen Stringwert rein. Und das ist dann letztendlich ein Record, was ich dann so übergeben kann und so zum Beispiel auch eine Funktion in der Funktion zurückgeben kann. Also ich hätte sozusagen als Typ-Deklaration gesagt okay, ich habe einfach einen Record, also mit runder Klammer aufgemacht, gesagt der ersteDas erste Feld ist ein Int, das zweite ist ein String. Und dann kann ich natürlich dann Instanzen von diesem Record dann instanzieren, was genau dieser Signatur eigentlich entspricht. Hört sich wie ein Tupel an. Weil der Record in JavaScript wäre ja eigentlich eher ein Objekt, wo du sagst, wie ist der, von welchem Typ ist der Key und welche Typ können die Values sein? Also Record hat nicht das, wenn du dann drauf zugreifst, musst du wissen, was vorne steht und was hinten steht. Also es hat keine Labels wie. Ein SWIFT. Das geht auch. Also es gibt letztendlich zwei Optionen. Es gibt einfach sozusagen diese rein positionalen Parameter letztendlich von einem Tupel, von einem Trippel. Also man kann es natürlich genau mit dem vergleichen, dass man sagt okay, es sind einfach Datenstrukturen, die einfach eine gewisse Menge an Elementen aufnehmen können. Es gibt aber auch die Möglichkeit halt eben Named Parameter zu verwenden. Dann ist die Syntax ein bisschen anders. Da muss ich halt zusätzlich noch eine geschweifte Klammer hin, eine Definition hinzumachen. Das ist immer das, wie letztendlich in Daten benagte Parameter dann irgendwie definiert werden. Und dann könnte ich auch zum Beispiel mit a, b, c oder wie auch immer letztendlich der Parameter dann heiß zugreifen, sodass es eher vielleicht diesem Typ, diesem Fakt entspricht, was man aus TypeScript kennt. Genau dafür ist es auf jeden Fall gut, dass man sagt okay, jetzt einfach Use Cases, wo ich mir vorher halt letztendlich immer solche Behälsklassen geschrieben habe, kann ich jetzt einfach damit lösen. Was aber auch eben mit passiert, ist halt, dass mit den Rekords außerdem Patterns unterstützt werden. Und bei Patterns gibt es halt eben zwei Arten. Also es gibt zum einen natürlich das Structuring Patterns, also dass ich mir aus jetzt einem Objekt oder auch aus einer Liste, aus einer Map oder einem Record eben halt einfach Inhalte rausziehen kann, wie man es letztendlich in TypeScript JavaScript auch kennt, dass ich sage, ich habe so eine Destructuring-Zuweisung, ich habe vorher einen Record oder je nachdem was für ein Objekt das ist, brauche ich natürlich auch die entsprechende Destructuring-Zuweisung dann. Aber ich kann mir dann einzelne Variablen daraus direkt holen und irgendwie binden in den lokalen Kontext und damit arbeiten, ohne letztendlich immer dann über das Objekt zu gehen. Und der andere große Bereich von Patterns, wo es jetzt verwendet ist eben das Pattern Matching. Und da ist es so, dass halt verschiedene Ausdrücke eben sehr stark erweitert wurden. Zum einen natürlich erst mal die Switch-Anweisung, wo man vorher so einen Switch Case hatte, aber die Case ist eigentlich alles nur Konstanten sein könnte. Und jetzt habe ich eben die Möglichkeiten, halt verschiedene Datentypen da eben reinzuziehen. Das heißt, ich kann halt wirklich sagen, entspricht es wirklich noch diesem konstanten Wert? Ich kann dort auch sagen, ein Case Label ist, habe ich letztendlich eine Instanz von irgendeiner Klasse, also mit so einem Ist-Operator einfach fragen, was ist so eine Typprüfung machen, was ich vorher auch nur ein If-Ausdrücken eigentlich machen konnte. Ich habe auch da die Möglichkeit wirklich Patterns zu verwenden, also zu sagen, okay, ist zum Beispiel mein Objekt ist eine Liste und hat es letztendlich, ist es eine Liste von zwei Elementen A und B und dann kann ich sozusagen in diese beiden Listen Elemente dann auch noch Sub Patterns einklären, zum Beispiel zu sagen, okay, das erste Element muss ein Integer sein, das zweite Element muss ein String sein oder auch letztendlich genauso mit Record ausdrücken. Also ich kann dann genau prüfen, wie ist zum Beispiel der Shape meines Rekords und alles andere, also was nur diesem Shape entspricht, wird dann auch gematcht. Alles andere fällt eben durch. Ich habe da auch die Möglichkeit, jetzt logische Ausdrücke ins Case mit rein zu geben, dass man halt einfach sagt, ist mein Zahlenwert eins, zwei oder drei, kann ich machen mit logischen oder und Logischen unverknüpfen. Ich kann auch genauso natürlich dann Vergleichsoperatoren machen. Ist es größer als ein Wert. Also da habe ich sehr, sehr viel mehr Funktionalitäten bekommen, wo eigentlich Case Statements halt sehr beschränkt waren, halt jegliche Dinge, die ich vielleicht auch aus Codning kenne, eigentlich damit zu machen. Man merkt natürlich schon, dass da halt bestimmte Sachen sich Inspiration geholt wurde. Auch so was, dass man zum Beispiel direkt einen Switch Statement nutzen kann, einfach eine Wertezuweisung zu machen, was vorher auch nicht so war. Man konnte immer Code Blöcke ausführen und jetzt kann ich wirklich sagen okay, wenn eine Variable jetzt den Wert X ausprägt, dann möchte ich einen anderen Wert Y das und das und das zuweisen. Also je nachdem was für eine Fallunterscheidung ich drin habe. Ein Switch dann direkt als Zuweisung, genauso wie wenn ich ein Ternary Operator nutzen würde, weißt du, zu sagen. Ah, so wie ein REST? Ja, genau. Das ist auch das, wie ein REST oder auch ein Kottlin? Gibt's da mal auch eine Korrespondenz dazu? Also das ist jetzt alles möglich. Ich nehme nur kurz einen Realitätscheck. Wie häufig benutzt du in der Realität Switch Case Statements? Ketzerische Frage, aber es ging mir auch durch den Kopf. Schön, dass es jetzt davor bei if ging. Ja, würde ich wahrscheinlich auch nutzen. Nutzt ihr da irgendwie häufig Switch Case? Ich weiß nicht. Also Switch Case sagt man natürlich auch, dass es gerade bei konstantem Ausdruck natürlich auch einen Performance Vorteil hat, weil du natürlich schneller an die entsprechende Stelle springen kannst und nicht in einen eigenen Block. Und natürlich mit diesen Optimierungen werde ich wahrscheinlich häufiger nutzen. Also eigentlich haben wir es wirklich nur so okay, du hast einen sehr großen Ausdruck oder möchtest irgendwie beim Derenisieren von Json Objekten danach konkrete Instanzen von irgendeinem Paket, von irgendeinem Notification Payload dann vielleicht aufbauen. Da ist es sehr häufig so, dass es einfach ein großer Switch Case Block ist. Man reagiert auf einen Wert, möchte irgendwas erzeugen an der Stelle oder zurückgeben. Aber ja, ich glaube jetzt durch die Option werde ich wahrscheinlich schon es an deutlich mehr Stellen auch einsetzen, weil es gibt auch in dem Fall auch zu Patterns auch ein If Case jetzt. Also das, was ich vorher so zuvor war natürlich if eher so ein Vergleich zwischen Konstanten und da kann ich jetzt auch alle Patterns, die es eigentlich so gibt, die unterstützt werden, Object Patterns, List Patterns dann einwenden, halt das zu überprüfen. Das ja. Also du hast ja gesagt, Kottlin sehr ähnlich, aber so kennt man auch aus SWIFT, soweit ich weiß. Und in SWIFT kann man dann aus dem Pattern auch Variablen zuweisen direkt? Das geht auch. Super. Also es ist auf jeden Fall ein mächtiges Feature, was man dann an eins oder zwei Stellen braucht. Ja, also gerade weißt du auch mit. Patterns … Um zu sagen, ich will aus dem Pattern eine Variable ziehen und die noch weiter überprüfen, dass ich nicht immer irgendwie dann runtergehen muss in irgendwie einen … Oder wann würde ich das nutzen? Also kannst du mit diesen Sub Patterns natürlich auch sagen, was soll ein einzelnes Element an entsprechenden Patterns dann entsprechen, auch wirklich in so einem Adblock das zu machen, also auch zum Beispiel der entsprechende Cast oder sicherzustellen, das darf nicht Null sein. Da gibt es sehr viel, das zu interpretieren. Cool. Ja, auf jeden Fall hat sich da echt einiges getan. Und genau was ich vorhin auch angesprochen hatte mit diesen zusätzlichen Klassentypen. Also es gibt jetzt eben drei weitere Elemente an der Stelle und das eine ist letztendlich, dass man eine Interface-Klasse, also das ist nämlich so ein bisschen eigen in Daten, dass man halt die Möglichkeit hatte, okay, wenn man eine abstrakte Klasse definiert, kann ich das einfach nur so als Interface nehmen, also sozusagen als Contract, wie alle anderen Klassen interpretiert werden können. Ich konnte sie aber auch implementieren und es gab da eigentlich nicht so eine Unterscheidung, was es in vielen anderen Programmiersprachen gab, dass es so eine reine Interface-Definition gab, sondern ich konnte mich als an der Stelle, wo ich es gebrauchte, dann entscheiden, will ich das jetzt Extenden, also sozusagen davon ableiten oder will ich es einfach nur den Contract implementieren und muss jede der Funktionen dann bereitstellen? Und jetzt gibt es halt eben explizit diese Interface Classes, die einfach sicherstellen können, dass letztendlich vor allem Bibliotheks-Metainer halt genau sagen können, was soll denn damit passieren? Das soll ein reines Interface sein, was eben nicht Extended werden kann. Und es gibt dann genauso letztendlich eine Entsprechung, dass es eine Base Class gibt. Eine Base Class kann dann eben nicht mehr als Interface definiert werden, sondern muss immer implementiert werden. Und es gibt jetzt auch so eine final Class, einfach zu sagen okay, für Library-Maintener. Ich möchte nicht erlauben, dass diese Klasse weiter abgeleitet werden soll, sondern es soll einfach sichergestellt sein, dass es die finale Instanz ist. Um was es dann denen zum Beispiel einfacher macht sicherzustellen, dass wenn sie irgendwelche Breaking Changes irgendwie reinbringen in diese Klassenbibliothek, dass es keine abgeleiteten Klassen gibt von anderen, die dann dadurch vielleicht kaputtgehen würden. Habe ich es richtig verstanden? Also Sie sind jetzt dahin rübergegangen, dass Sie sagen, wenn ich eine Klasse schreibe, dann muss ichDu kannst explizit opt in, dass ich diese Klasse als Mix-in verwenden kann. Aber implizit kann jeder von meiner Klasse erben. Ich hatte jetzt gesagt, wenn ich explizit Mix-in definiere, dass ich auch explizit definiere, dass man davon erben kann. Aber es ist andersrum. Also ich muss opt outen von der Vererbung und opt in zum Mix-in. Genau. Du musst es sozusagen opt in und es ist so, dass weiterhin sozusagen der Standard, die Standardklasse halt Extended implementiert werden kann, wie man es möchte. Also dass man da halt eben die Option hat, sich zu entscheiden. Man möchte es konkreter machen, aber es ist momentan noch möglich, das so offen zu gestalten, wenn man das möchte. Ja, das ist so ein bisschen vielleicht auch der verwirrende Aspekt, dass es da. Nicht so eine Gleichung gibt. Steht das dann, warum sie das mit dem Mix gemacht haben? Warum das nicht auch so ein …? Gute. Frage. Habe ich. Noch nie verwendet, glaube ich, aber das ist irgendwo mal rausgefallen. Gab es doch bei View irgendwie, dass man da noch irgendwelche Sachen Mix reinmixen? Ja, das Konzept ist ja schon ewig alt, gell? In JavaScript zumindest. Das Obsorbable Mixins und sowas. Aber ich habe es. Doch tatsächlich noch nicht verwendet. Ja, keine Ahnung. Sie haben es nicht geschrieben. Ich glaube, das war einfach so, das halt irgendwie klarer abzutrennen. Also vorher. War es so... Hast du mal ein Beispiel, wo du eswo du ein Mixin verwendet hast? Wir nutzen sehr oft Mix-ins, wenn man zum Beispiel jetzt gerade wie ein Beispiel von gestern. Wir haben halt so ein eigenes CLI Tool und da gibt es letztendlich verschiedene Facetten, die letztendlich so ein Befehl von diesem CLE-Tool ausprägen kann. Zum Beispiel ist es manchmal relevant, dass man halt irgendwie die Sprachen übergeben kann, dass halt bestimmte Operationen nur auf eine Sprache ausgeführt werden kann oder nur auf eine Plattform. Und dann gibt es letztendlich für jede dieser Ausprägungen Mix-in, sodass ich sagen kann: „Hey, mein Befehl nutzt einfach das und das und das Mix-in, weil es diese Parameter braucht. Und in dem Fall habe ich immer diese Funktionalität. Zum einen wird natürlich das Argument mit an den Parse übergeben, sodass es auch bei der Hilfe mit angezeigt wird und zum anderen wird dieser Typ interpretiert, als Mix im Bereich stellt. Und dann kann ich mir in der finalen Command-Klasse einfach sagen, ich brauche die und die Facetten letztendlich von meinem Befehl und kann mir das so zusammenbauen. Das ist ein Beispiel. Nur noch vielleicht zu Daten, was sie sich in Zukunft ein bisschen anschauen werden. Das haben Sie auch so ein bisschen als Ausblick gegeben. Was jetzt als nächstes kommen wird, sind wahrscheinlich Inline Classes, also dass man da einfach dort einfache Rapper für Typen halt definieren kann, die ja dann einfach komplett aufgelöst wird, eigentlich von dem Compiler. Und auch Primary Konstruktoren ist auch das, was man aus Kottland, ich weiß nicht, welche Programmiersprachen noch kennt, also gerade für Datenklassen relevant, dass man nicht irgendwie die Properties und sagen wir dann den Konstrukte separat schreiben muss, sondern wie es in TypeScript so ist, du kannst direkt in deiner Konstruktordefinition dann dein Propäst definieren, sich ein bisschen was zu sparen. Was auch wahrscheinlich jetzt sehr genau angegangen wird, ist halt das Meta Programming, also dass man eben die Möglichkeit hat, Makros zu verwenden, halt bestimmte Sachen in der Meta-Ebene wie zum Beispiel Serialisierung dann zur Kompilierzeit schon irgendwie zu hinzufügen. Da brauchen wir momentan eben das separate Tool des Build Runners. Sie sagen aber, man kann halt sehr viel damit kaputt machen, deswegen werden sie da sehr vorsichtig vorgehen. Aber da wird auf jeden Fall noch einige spannend jetzt auch in der Dreierversion passieren. Also man merkt auch schon, dass sie da sehr viel Feedback natürlich bekommen und sehr viele coole Language Features noch in der Pipeline haben. Aber auch die drei Sachen, die wir jetzt genannt haben, also gerade in the Record, wird sehr hilfreich sein, das verwenden zu können. Cool. Das macht es Sinn, Flutter direkt zu machen oder wollen wir mal ein paar kleine Themen zwischenschieben und Flutter ans. Ende packen? Lass uns das mal so machen. Okay, dann würde ich thematisch ansetzen, weil du aufgehört hast, gerade mit Makros. Und Makros ist eigentlich auch so das Thema, was bei View 33 jetzt als Quality of Life Verbesserung für die Developer Experience. Hinzubekommen ist. Da muss ich also das hat sich Feature-mäßig für den Endbenutzer oder so eigentlich nichts getan, sondern wirklich nur für uns als Entwickler. Das wird zum Beispiel bei den Typ Definitionen können wir jetzt beim Emitten von Events das genauso schreiben wie als würde ich Properties definieren. Und das war vorher irgendwie so ein anderer, eerder Syntax. Das ist cool geworden. Dann kann ich Slots, Components Slots jetzt typisieren. Einfach, einfach. Und jetzt muss ich mal in meine Liste gucken. Generische Komponenten sind jetzt auch möglich. Stell dir mal einen Input Typ Text vor und dann habe ich das vielleicht auch noch mal als Number und dann bekomme ich eben eine Number einmal zurück und einmal einen String zurück. Oder ich habe eine Tabellenkomponente und dann sind eben alle Elemente davon vom Typ T generisch und dann kann ich das eben für alles und dann ist die selektierte Komponente eben richtig typisiert. Das ist, glaube ich, das, was wir auch im Blogpost als Beispiel gebracht haben. Komplexe Typen kann ich jetzt importieren und ja, aber das habe ich, weiß ich nicht, kann man sich mal durchlesen. Das ist, glaube ich, etwas, was ich immer dachte, das muss auf jeden Fall sowieso gehen und jetzt geht es auch. Dann haben Sie zwei experimentelle Features hinzu, die man opt in muss. Das ist einmal Define Model. Also View hat im Gegensatz zu den anderen Frameworks, zumindest habe ich das da noch nicht gesehen, so eine Möglichkeit, dass ich, also erst mal verbietet er das, wenn ich eine Property in meine Komponente rein bekomme, dass ich die selber mutate, weil das würde ja potentiell irgendwie meine Parent Komponente, damit würde sie vielleicht nicht rechnen. Sie gibt der Komponente irgendeine Property rein und dann macht die Komponente damit was. Und wenn ich das aber haben möchte, wenn ich zum Beispiel sage, ich habe hier eine Referent, also eine Reactive Property, einen String, die gebe ich an die Komponente und die Komponente ist halt ein Eingabefeld und dann kann der User das ändern, dann rechne ich ja damit. Und die Komponente, die jetzt diese Property verändert, die emittet dann einen Event, was nur sagt, ich bin jetzt verändert worden. Und das kann ich jetzt ein bisschen schöner schreiben. Also bisher musste ich das eben so auf zwei Wegen definieren. Einmal die Property kommt rein und dann muss ich das Event definieren, das heißt dann irgendwie Update Doppelpunkt. Und dafür gibt es jetzt ein Makro-Define Model. War das nicht so, dass ich in der Parent auch auf das Event Listen musste? Weil ich glaube, ich dachte, war es nicht irgendwie so, das war das einzige Ausnahme, war wie Model so ein Default Ding, wenn du irgendwie wie Model genutzt hast, konntest du in der Chilt Komponente irgendwie auch, musstest du auch diese Update Syntax schreiben, nimmst du das rein, dann musst du bestimmte Syntax genau irgendwie updaten, wie genau es war. Und dann könnte man aber in der Parent einfach nur schreiben, wie Model die Ref reingeben und dann war das Magicly irgendwie. Genau. Also wenn du es per wie Model reingibst, dann updatet er diese Referenz automatisch, weil er dann ja weiß, ich bekomme vielleicht dieses Update Event. Aber in der Chilt muss sich trotzdem das Update vorher einbinden. Ja, genau so. Ja, also ein bisschen schöner kann man es jetzt schreiben. Ist interessanterweise noch experimental. Weiß nicht genau. Und wo ist erWoran erkenne ich als Parent Komponente, dass das eine Property ist, die geupdatet wird? Weil du es per Vemodel reingibst. Okay, ich gebe es trotzdem per Vemodel, das ist jetzt der Weg, wie es reingibt. Okay, verstanden. Da kann man opt in das Experimental Feature geht über die Weed Config. Und ansonsten, so Mega Kleinigkeiten. Also es gibt irgendwie den Define Options. Ich kann jetzt im Script Setup Blog sagen, dass ich keine Attributes inhalte. Okay, aber das ist jetzt super langweilig. Also ja, man kann glaube ich mit dem View 33 Developer Experience, ein bisschen verbessert oder gut verbessert. Ja, keine Breaking Sachen. Kann man sich einfach mal, kann man einfach mitnehmen. Coole Experience. Okay. Ich sehe, ich habe eine Frage an dich. Mein Thema beginnt mit einer Frage an dich. Wenn ich ein neuer Entwickler in deinem Team bin, die Frage: Welche Browser Features supporten wir denn? Welche darf ich denn nutzen? Welche Browser supporten wir? Was ist deine Antwort darauf? Das ist eine schwierige Frage. Unser Minimum an Anforderungen, Chrome, ist glaube ich irgendwas. Das ist irgendwo hinterlegt worden. Ich glaube, 62. Das hast du doch irgendwo in der Konfig stehen, oder? Bei irgendeinem BabelSchritt war das irgendwie notwendig. Aber wenn ich jetzt sage, ich will irgendeine neue Web API nutzen, wann darf ich denn, wann kann ich mir sicher sein, dass ich sie nutzen darf? Was sagen wir dann ist für uns okay? Dann gehe ich auf „Kann I Use und sag einfach so circa 93 Prozent? Nein, ich habe / Also ich hätte dir als Antwort gegeben, wenn es ein vitales Feature ist, dann sollte es auf jeden Fall irgendwie ab Chrome 57 oder 60 oder so verfügbar sein. Und wenn es irgendwie so nice to have ist, also irgendwas Animation, dann kann man / Dann ist es ja nicht so schlimm, wenn es kaputt ist, bei alten Sachen. Und ja. Und wenn es dann irgendwann Chrome 58 ist, weil dann ja rum ist, dann unterhalten wir uns noch mal drüber. Chrome 58? Sorry, ich weiß nicht, welche Chrome Version hast du gerade gesagt? Würdest du sagen? Ja, irgendwie 60, irgendwas die 60. Ja, auf jeden Fall. Da fand ich es interessant. Kann eine neue Antwort darauf geben. Du würdest etwas sagen, wir supporten Baseline. Baseline ist im Endeffekt … Also sie schreiben: „Webplattform Baseline bringt Clarity to Informationen über Browser Support for Webplattform Features. Wenn du auf die MDN Docs gehst oder auf web. Def gehst und irgendein Feature dir anschaust, dann gibt es ganz oben jetzt immer eine eine Information, gehört es zum Baseline Paket und Baseline Paket sagt einfach: Die zwei letzten Major Browser Version wird es in den letzten zwei Major Browser Versionen unterstützt und es gibt eine … Dann sozusagen … Wenn du sagst Baseline, dann kommen da immer Features dazu. Sie schauen sich immer an: Was ist jetzt in den letzten zwei Major Versionen der großen Browser supportet? Und sie machen ein Jährly Release davon. Sie sagen zum Beispiel also entweder sagst du, du gehst mit dem Living Target mit, dann kommt halt immer, geht es immer so ein bisschen: Was ist denn weiter so? Oder du sagst zum Beispiel, wir supporten Baseline 2023. Sie machen jedes Jahr einen Baseline Release und sagen: Im Baseline 2023 sind diese Features drin, das sind alle letzten zwei Major Browser Versionen zum Stand Ende 2023. Und sie machen auch immer dann auf web. Def einen Beitrag darüber, was ist jetzt neu im Baseline mit drin? Aber so kannst du auch gerade, gerade auch so was wie, ich glaube jetzt in größeren Firmen, wenn du irgendwie mit Stakeholdern sprichst oder so was, keine Ahnung, was wollen wir denn supporten? Und da ist das so ein Standard, auf den man sich einfach einigen kann. So, Baseline. Wenn du Baseline sagst, ist halt so, dass es dann ein Begriff, mit dem hoffentlich in Zukunft dann jeder was anfangen kann. Einfach zwei Major Browser Versionen und es ist ganz klar definiert. In der Dokumentation steht oben drin, ist es Baseline, wenn ja, welche Baseline Version? Und fand ich irgendwie ganz cool als Begriff. Man könnte sagen. Wir supporten einfach. Cool, dann kann man auch sagen, so Baseline 2023 hatten 93% aller User. Genau so was zum Beispiel. Und das ist auch was, also sie wollen, dass es zum Beispiel auch wie für wenn du eine, wenn Leuteeine Library publischen, dass sie dann sagen können: „Okay, bei uns, wir nutzen hier Baseline, also wir sind Baseline 2023 kompatibel. Oder wenn du Tutorials schreibst, dass einfach Leute sagen: „Okay, alles, was ihr hier in dem Tutorial seht, ist ein Baseline, ich erzähle euch von Baseline Features, sodass man einfach das so ein bisschen in seine Nomenklatur mit aufnehmen kann, irgendwie in allen eine gemeinsame Vorstellung davon haben, was das bedeutet und man nicht dann wieder überlegen muss: „Okay, aber was bedeutet das für uns? Das ist ja cool. Fand ich auch ganz cool. Das ist irgendwie ein kleiner, kurzer Blogbeitrag auf web. Def, aber fand ich irgendwie einen coolen Move. Wenn der sagt, die letzten beiden Major Browser Versionen, von welchem Browser reden wir dann auch? Und reden wir auch vom Opener? Das wäre auch meine Frage auch zum ersten Mal, ob auch irgendwie Mobile Browsers damit enthalten sind oder ob das letztendlich nur Desktop Browser, weil das Gefühl ist ja immer so, dass die Mobile Browser immer ein bisschen hinterher sind und einfach deutlich weniger Funktionen bieten. Ja, ich will mal auf MDN Docs gehen und auf Grid. Also wenn man anhand der, also das ist das Beispiel gerade, was man da sieht. Hier Baseline, Wildly Support, wenn man auf Grid zum Beispiel geht. Baseline. Sie sagen hier, also der Haken ist dran an Chrome, Firefox. Was ist denn der hier? Ist das Opera? Das ist so ein O, so ein rotes O. Für Chrome und Edge und Safari und Firefox. Ich glaube, Baseline ist Firefox, Safari, Edge, Chrome. Gut. Aber das ist noch mal ein guter Punkt, müssen wir vielleicht noch mal … Es. War auch eigentlich eher so eine Behilfsüberleitung zu dem anderen Thema, aber. Ist egal. Ja, aber da können sie aber auch gerne nutzen, weil ich kann dir die Antwort nicht genau geben, also was der Standard jetzt genau umfasst. Sie haben jetzt in dem Blogbeitrag geschrieben, die zwei letzten zwei großen Browserversionen. Im Detail müssen wir vielleicht noch mal anschauen. Ich habe auch nicht viel zu Opera One zu sagen, außer dass Opera vorhat, einen neuen Browser zu releasen, der One heißt, der offenbar auf eine Chromium Engine drin hat und irgendwie Multi-Threaded Compositing, was auch immer das bedeutet, aber ich glaube, das User Interface ist irgendwie sehr fluide oder kann angepasst werden. Und es hat mich sofort, als ich dann die Previews so ein bisschen gesehen habe, direkt an ARK erinnert, weil du auch diese mit den Profilen, die du irgendwie wechseln kannst und so, dass du irgendwie dein Workprofil haben kannst und so, dass das relativ im Core mit drin war. Und was ich irgendwie, was ein bisschen nach Marketing klang, es ist vorbereitet für AIA. I. Plugins. Und das war gefühlt nur in der Headline. Dann in Details hast du nichts irgendwie, was das bedeutet. Ihr seid vorbereitet auf AI Plugins. Das wirkte so wie: „Ey, lass mal irgendwas mit AI reinschreiben, damit irgendwie Leute darauf aufmerksam werden, weil man hat überhaupt nicht verstanden, was sie damit meinen. Ich glaube, das war wirklich echt nur so ein Marketing-Dings. Aber der installierte sich ja auch keine ernsthaft, oder? Opera habe ich meine ganze Zeit lang verwendet, aber das ist. Schon lange her. Es gab mal eine Zeit lang, da war Opera cool, da habe ich es auch benutzt, aber das ist auch schon zehn Jahre plus her. Ja, ich glaube auch. Ja, cool. Dann, ich glaube, wir können einfach nur so droppen als Info, BANN 0.6.. Ja, Bann 0.6, genau. Was haben Sie da gemacht? Tatsächlich mal, was ist der Name? Verspricht Bann? Das wäre mir jetzt ein Bandler. Ein. Bandler. Heißt das. Ein Bandler releast. Und man kann jetzt aus BAN auch Single Executables machen. Seit Node 20 kann man ja auch aus JavaScript und Node irgendwie Single Executables machen. Habt ihr es mal versucht? Das ist so kompliziert. Ich. Kann das so kompliziert sein. Und dann wird da eine Node. Js, also da wird dann eine V8 mit reingebunden in die Executables? Genau. Also dann hast du halt eine Executable, die irgendwie 60, 90 Megabyte groß ist. Aber ich kannte das vorher nur von Deno. Das haben die schon seit 100 Jahren irgendwie, dass man da ein Executable draus machen kann. Und da ist es halt super smaustig. Dann sagst du halt: „Deno, mach mir eine Executable, Ende. Executable ist da. Und den Node. … Wahrscheinlich kann man auch einfache Graphoren dann dafür nutzen. Da ist es auch nicht so kompliziert, aber da habe ich es auch schon mal gemacht. Habt ihr einen Use Case für mich, was ihr machen würdet? Also gab es, wolltest du einfach nur ausführen oder hattest du einen Use Case? Ich wollte eine Single Executable draus machen, damit ich nur die in das, in ein Plane Linux Docker Image laufen lassen kann. Und ich muss dann nicht noch Node im Docker Image und alles, was Schmotterkram dann noch Huckepack kommt, also irgendwelche C++ Sachen und so was braucht man ja sonst. Ja. Okay. Hat dann nicht geklappt. Genau. Hat einfach nicht geklappt. Ja, cool. Dann wandler und Single Executables. Dann enden wir mit Flutter 3.10. Was gibt es da? Genau da gibt es nicht so viel Neues wie bei DATEV, aber auch ein paar neue Sachen. Also Material 3 haben sie jetzt endlich aktualisiert, also sie sich an das neueste SPAC gehalten und ein paar schöne Sachen, die kommen, man kann jetzt einen Colour-Screen aus einem Bild erzeugen. Also das ist ja so ein bisschen die Idee von Material 3, dass man seine UI ja sehr adaptiv letztendlich anpassen kann und dass dem Nutzer überlässt, wie es dann aussieht. Und da kann man letztendlich auch jetzt ein Bild zuweisen und er zieht sich dann letztendlich aus der Palette wahrscheinlich des Bildes einfach so die dominanten Farben raus und passt seine ganze UI zum Beispiel deinem Hintergrund oder dein Hintergrundbild. Es gibt eine neue Navigation Bar, die ja ein bisschen aufgeräumt ist. Es gibt jetzt auch ein paar Änderungen am Navigation-Drower, was hinzugekommen sind zwei neue Komponenten, die eigentlich ganz praktisch sind, wenn man irgendwie eine Suche haben will, einmal einen Search Bar oder einen Search Anker. Das heißt, der macht automatisch solche Sachen, wie dass die Sachen wie, dass die Sachen dann lese geloaded werden, also hat einfach dann entsprechende Callbacks, dann einfach die Daten beim Schreiben schon anzeigen zu können, gibt es zwei Varianten. Einfach ist es ein bisschen unterschiedlich, wie die Sachen irgendwie eingebettet und angeklickt werden und sich dann öffnen. Ich kann jetzt Secondary Tab Bars, also Tab Bars unter Tab Bars irgendwie haben und das auch entsprechend mit verknüpfen. Und genau was jetzt auch unterstützen, dass halt eben native Guestures für alle Text-Feed Komponenten unterstützt werden. Man kann sozusagen so einen Doppelklick machen, ein ganzes Wort auszuwählen und zu ziehen oder auch einen Trippelklick, den ganzen Paragraph Elementen auszuwählen, wenn man dann sieht, eben auch die Auswahl zu erweitern. Das wird jetzt für alle Text-Feed Komponenten unterstützt. Und was jetzt für Flutter Web und das ist vor allem natürlich für uns interessant, dass sie da sehr viel schon gemacht haben, halt so ein bisschen auch die Performance zu optimieren. Zum einen haben sie die Bundlesize reduziert, indem sie einfach bestimmte Icon-Fonds, die normalerweise mit drin sind, also die man auch nicht rauswerfen kann, entweder rausgeworfen oder eben verringert haben. Einfach alle Glyphen, die jetzt nicht verwendet wurden, haben sie da rausgeworfen. Sie haben auch für alle Chromium-Browser einen Custom Flavor von der Canvas-Kit Runtime. Das ist ja Canvas-Kit, das, was eigentlich unterhalb von Flutter die ganzen Zeichen-Operationen macht und was dann dazu genutzt wird, im Web die Zeichenobjekte, die es von Flutter bekommt, eben dann auf ein Canvas Objekt im HTML Dom zu schreiben. Und das war ja mit 3,1 Megabyte irgendwie geminified recht groß. Sie haben jetzt nicht gesagt, wie viel kleiner es ist, aber es gibt wohl einen Flavor, der eben aber nur im Chrome-Mium läuft, der dann ein bisschen kleiner sein soll. Auf jeden Fall ganz spannend natürlich, weil wir auch sehen natürlich bei unseren Apps, dass das natürlich schon einer der dominanten Browser sind. Ich weiß es nicht genau die Zahlen, aber es sind die 65, 70%, die halt eben dann in unserem Instant Game eben einen Chrome Browser nutzen. Also ja, wenn wir dann wirklich auf Flutter 13 gehen, dann ist das eines der ersten Sachen, dass ich mir mal noch anschauen wird, was das wirklich für einen Effekt hat und was jetzt auch möglich ist und das war etwas, was ich auch bisher immer beim Web vermisst habe. Also vorher konnte man letztendlich nur sagen, okay, du installierst letztendlich dieses Flutter JavaScript Library in deinem Dokument und er hat einfach immer sozusagen das gesamte Dokument genommen und sich da reingehängt und die Sachen gezeichnet. Also du konntest jetzt nicht irgendwie eine Flutter-Applikation nur in einem kleinen Bereich von deiner Seite irgendwie initiieren. Das haben wir zum Beispiel dann genutzt, indem wir einfach gesagt haben, okay, wir machen halt irgendwie zwei HTML-Seiten. Das eine ist eigentlich nur ein iFrame, was die andere Sachen dann darstellt. Und das erlauben sie jetzt aber, dass man halt eine Flutter Web App wirklich an ein spezifisches Element in einer Seite jetzt binden kann, das auch sich die Größen Informationen holt und dann dort auch mehrere Flutter Apps oder Flutter Bereiche oder eben nur in einem bestimmten Bereich eben dann gezeichnet werden kann. Im Peller, da haben sie jetzt sehr viel dran gedreht. Das ist ja letztendlich die neue Grafik Engine, die da Skiir ablösen soll oder zum Teil natürlich noch Skiir verwendet, aber deutlich näher an Flutter ist, sodass sie bestimmte Optimierungsschritte eben deutlich früher machen können. Und was jetzt erst mal natürlich primär für IOS entwickelt wurde, diesen Animation-Jank in den Griff zu bekommen. Da haben sie noch sehr viel, ich glaube 250 Commits eben integriert und erachten das jetzt so als stabil, dass es jetzt wirklich die Default Engine für iOS ist. Vorher war es sozusagen ein Opt-in, man konnte es auswählen, aber jetzt ist es eben der Default. Es ist aber so, dass sie dort immer noch nicht so weit sind, dass es auch für Android, also das ist momentan noch in der Entwicklung und wahrscheinlich bald ready für Preview, aber es wird noch ein bisschen dauern, bis wir sozusagen die gleichen Optimierungen, die wir jetzt für iOS bekommen, wo aber natürlich dieses Animation-Jank Problem auch deutlich größer war, auch dann für Android bekommen werden. Ja, sie haben noch viel an der Performance von bestimmten Operationen irgendwie rumgeschraubt, auch da noch irgendwie von bestimmten Sachen reduzieren können. Es ist auch so, dasssich jetzt der iOS Startup auch noch mal so die 30% irgendwie schneller geworden ist und bestimmte Lookup Strategien für Identify und App Bundles verbessern konnten. Also das ist auch etwas, was für uns natürlich spannend ist. Und auch, dass sie SCP, jetzt alleine zum Zeichnen von Textkomponenten nutzen und da hatten sie vorhin noch so eine Fallback Lösung und inzwischen ist wohl SCP einfach so stabil, dass sie sagen, diese Fallback Lösung haben sie jetzt rausgeworfen, sodass auch dadurch die Bundle size eben nochmal reduziert werden konnte. Und sie unterstützen jetzt APNGs nativ. Das war's von Flutter und dazu iOS. Aber zwei Sachen habe ich noch vergessen für iOS. Es gibt jetzt Wir haben das Debugging, also das, was ich bei Android schon vorher machen konnte, dass ich einfach gesagt habe, ich habe mich WOLS mit meinem Gerät verknüpft und einfach Debuggen konnte, ist jetzt für iOS auch möglich. Und ich habe auch Spad-Check Support. Es gibt einfach eine neue Komponente, die kann ich jegliches Textfeld irgendwie drumherum legen. Und damit habe ich dann auf iOS diese native Apple Funktionalität, dass mein Text, den ich schreibe, korrigiert wird und entsprechende Korrekturen vorgeschlagen werden. Cool. Denn ich hatte noch vergessen, eigentlich mit dem Apple Announcment für die Accessibility Features. Zwei Kleinigkeiten, was ich ganz interessant fand. Also morgen ist Global Accessibility Awareness Day. Deswegen haben die es überhaupt …. Wie jeder weiß. Wie jeder weiß, genau. Aber deswegen gab es diesen Newsbeitrag von Apple, dass sie Ende des Jahres neue Accessibility Features rausbringen. Und eins fand ich ganz cool für Leute mit kognitiven Einschränkungen, gibt es einen „Assistive Access Support für bestimmte Apps, dass sie heruntergebrochen werden auf ihre Core Features, sodass man nicht abgelenkt wird von allem möglichen, was irgendwie ist. Beispielsweise, dass dann die Fotos App wirklich einfach nur einen riesigen „take Foto Button hat. Oder irgendwie auch, wenn ich schreibe, dass ich zum Beispiel nur einen Emoji Keyboard machen kann, sodass ich mich nur darauf konzentrieren kann oder so. Und alles viel größer wird, einfach nur auf die Core Experience heruntergebrochen ist und man auch den Home Screen dann sich einfach nur so in der Kachen oder Listenansicht einfach nur die Main Apps anzeigen lassen kann. Was ich irgendwie ganz interessant fand. Und in dem Zuge ging es dann auch darum, was das Sprechen angeht und sie gerade Leute, die dabei sind, aufgrund von Krankheit irgendwie auch ihre Stimme zu verlieren oder so, haben sie ein Feature vorgestellt, dass man grundsätzlich erst mal in Facetime Calls oder ich glaube auch normalen Telefonaten die Tastatur nehmen kann, synthetisch Sprache zu erzeugen und sie in dem Zuge auch die Möglichkeit geben, für Leute, die ihre Stimme dabei sind zu verlieren, dass sie ihre eigene Stimme synthetisieren können, also dass sie ein AI-Model, was on Device dann sozusagen die eigene Stimme synthetisiert und man dann sozusagen per Tippen einfach in einem Facetime Call sprechen kann. Und ich fand es insofern ganz interessant, weil ich jetzt immer gespannt bin, so BWC steht ja vor der Tür, so was wird Apples Take so in dieser ganzen AI Welt dazu, was da irgendwie kommen wird? Ich meine, da sieht man schon mal den ersten Glimms davon, so eigene Stimme synthetisieren mit on device, Maschine Learning. Finde ich auf jeden Fall ganz interessant. Bin mal gespannt, was ihr Tag dazu wird. Und das war das erste Mal, dass man irgendwas davon sieht, deswegen fand ich es nochmal interessant. Sehen, aber gehört hast du es auch noch nicht? Nee, habe ich noch nicht gehört. Aber mich würde mich nicht mehr interessieren, ob sich das so gruselig wie Siri anhört oder ob das so ein Facetime Call dann … Wieso ritzelst du so langsam? Weil ich tippe so langsam. Aber man kann ja auch Phrases abspielen. Genau. Aber es ist auf jeden Fall was interessant, was Sie in dem Beispiel geschrieben haben, ist jetzt nicht dieses über die ganzen AI Modelle, die irgendwie sagen, du brauchst nur drei Sekunden. So, und hier steht irgendwie Users can create a personal voice by Reading around with the randomized set of text, Prompsto record 15 min of audio. Also brauchen wir hier in dem Preview, wo man dann diese synthetische Stimme erstellt, sind irgendwie, man muss hier one out of 150 Phrases, die man vorlesen muss. So schön. Aber untendrunter dann das Testimonial war dann süß, wo in nur 15 Minuten kann ich mit meiner eigenen Stimme meinen Liebsten sagen Ich liebe sie. Aber auf jeden Fall interessant. Bin ich mal, ich bin sehr gespannt, was da so bei der WDC kommt. Dann irgendwann im Juni. Und ja, ich. Bin auch gespannt. Es war nur eine richtig kurze, knappe Newsfolge. Perfekt. Ja, cool. Genau. Dann lassen wir das mit der Google I/O jetzt. Ja, aber war ja nicht sointeressant. Das ist auch völlig. Und wir müssen noch ein bisschen nachholen. Dann euch wie immer vielen Dank fürs Zuhören. Sebi, vielen Dank. Und wie immer Feedback an podcast@programmier. Bar oder über unsere Homepage. Und dann hören wir uns nächste Woche vielleicht wieder zu viert. Bis dann. Ciao. Bis dann. Tschüss. Ciao.

Verwandte Podcasts

  • 146 Ig Fb Manuela Sakura Rommel

    Deep Dive 146 – Accessibility in Flutter mit Manuela Sakura Rommel

  • 18 Ai News

    News AI #18: Apple MM1 // Mistral // Grok // Inflection & Microsoft // Open Interpreter

  • News Asset 10

    News 10/24: PWAs & iOS 17.4 // JSR // Pingora & freenginx // WSA & Windows 11

  • News Asset 8

    News 08/24: Apple Pkl // iOS vs. PWAs // React 19 // Flutter 3.19 & Dart 3.3 mit AI

  • News Asset 6

    News 06/24: iOS App Marketplaces // Browser Interop // jQuery // JetBrains

  • News Asset 2

    News 02/24: Apple Vision Pro // Rabbit r1 // JS Rising Stars // Vue 3.4 // Figma Adobe Deal

  • 138 Fb Ig Xmas

    Rückblick auf 2023

  • News Asset44

    News 44/23: Apple Scary Fast Event // Next.js 14 // Global Day of Coderetreat

  • 07 Ai News

    News AI #7: Cloudflare AI - Serverless Workers, AI Gateway, Vector DB // Meta AI // LeoLM // Mistral AI 7B // LocalPilo

  • News 38 23

    News 38/23: Bun 1.0 // Flutter 3.13 // PowerSync // Jetpack Compose Multiplatform // Astro 3.0 // Unity Fee // Node 20.6

Feedback
[object Object]