00:00:00Hallo zusammen! Willkommen zu einer weiteren Basel-Community-Session.
00:00:29Ich bin Maya Avendano und DX-Ingenieurin hier bei Basel.
00:00:32Falls ihr zum ersten Mal dabei seid und den Chat nicht sehen könnt,
00:00:35schaut doch mal auf unserer Community-Plattform unter [community.basel.com/live](https://www.google.com/search?q=https://community.basel.com/live) vorbei.
00:00:41Dort könnt ihr den Chat nutzen und Fragen stellen, was übrigens sehr erwünscht ist.
00:00:45Oder falls ihr auf X oder einer anderen Plattform zuseht, nutzt gerne diese.
00:00:49Auf die heutige Session freue ich mich besonders, denn – kleiner Fun Fact:
00:00:53Ich war selbst einige Jahre Svelte-Entwicklerin und habe viele Nebenprojekte damit gebaut.
00:00:58Ich bin also ein großer Fan und habe sogar das passende T-Shirt dazu.
00:01:01Für alle Svelte-Fans und diejenigen, die neugierig auf Svelte sind:
00:01:06Wir haben heute einige Leute aus dem Svelte-Team hier. Herzlich willkommen!
00:01:12Hallo! Hey zusammen! Wollt ihr uns kurz erzählen, wer ihr seid?
00:01:21Sicher, ich fange an. Mein Name ist Rich.
00:01:24Ich arbeite seit 10 Jahren an Svelte, da ich das Projekt damals 2016 gestartet habe.
00:01:32Ursprünglich wollte ich es in meinem Hauptberuf als Journalist für visuellen Journalismus nutzen,
00:01:38um Nachrichten mithilfe von JavaScript besser zu vermitteln. Vor gut vier Jahren
00:01:44bin ich dann zu Basel gewechselt, womit es mein Vollzeitjob wurde, und das mache ich seitdem.
00:01:53Ja, ich glaube, niemand sonst kann so viele Jahre vorweisen wie du.
00:01:57Ich bin, glaube ich, seit etwa fünf Jahren Svelte-Maintainer.
00:02:02Ich bin Simon. Ich arbeite ebenfalls bei Basel an Svelte,
00:02:08und zu Svelte kam ich über einen Hackathon in meiner früheren Firma.
00:02:13Ich wollte mal etwas anderes ausprobieren; damals habe ich hauptsächlich Angular gemacht.
00:02:18Beim Hackathon habe ich Svelte genutzt und mich sofort verliebt, wusste aber auch:
00:02:22“Okay, im Arbeitsalltag kann ich das nicht nutzen, wie bleibe ich also sonst mit Svelte in Kontakt?”
00:02:29Sehr nerdig, ich weiß. So wurde ich dann Teilzeit-Maintainer.
00:02:34Einige Jahre später ergab sich die Chance, bei Basel einzusteigen und Vollzeit daran zu arbeiten.
00:02:39Und ja, seitdem bin ich wunschlos glücklich.
00:02:43Ich bin Elliot. Wie ich Rich ab und zu gerne erinnere,
00:02:46habe ich genau in dem Jahr meinen Highschool-Abschluss gemacht, als er Svelte startete.
00:02:49Ich bin also noch nicht ganz so lange als Maintainer dabei.
00:02:54Aber ich fing an – ich weiß nicht mehr genau, ob Ende 2021 oder Anfang 2022.
00:02:59Irgendwann während der SvelteKit-Beta bin ich auf die Svelte-Community gestoßen.
00:03:04Und tatsächlich habe ich kurz nach Rich bei Vercel angefangen, glaube ich.
00:03:09Es war im Herbst desselben Jahres, wenn ich mich recht erinnere.
00:03:12Dort habe ich an verschiedenen Dingen gearbeitet, etwa an der Vercel-Website.
00:03:16Und dann, was sich jetzt wie eine viel kürzere Zeit anfühlt, wechselte ich vor gut einem Jahr
00:03:23ins Svelte-Team. Seitdem arbeite ich Vollzeit daran.
00:03:27In letzter Zeit durfte ich zum Beispiel die Async-SSR-Implementierung für Svelte schreiben.
00:03:36Das ist genau diese Art von nerdiger, cooler Softwareentwicklung, die ich liebe
00:03:43und die ich an Svelte schon immer geliebt habe.
00:03:48Großartig. Schön, dass ihr alle hier seid.
00:03:51Könnt ihr für die Zuschauer, die es noch nicht kennen, kurz erklären, was Svelte und SvelteKit sind?
00:04:00Wir können es ja mal versuchen. Svelte ist vieles.
00:04:04Es ist eine Community, eine Lebenseinstellung, aber eben auch ein deklaratives Komponenten-Framework.
00:04:11Wer React, Vue oder Ähnliches nutzt, kennt das Grundkonzept:
00:04:15Anstatt manuell Befehle wie “document.createElement” oder “setAttribute” zu schreiben,
00:04:21beschreibt man seine App mithilfe von deklarativen Komponenten.
00:04:25Das Framework übernimmt dann die Aufgabe, diese Absicht in das zu übersetzen, was auf dem Bildschirm erscheint.
00:04:33Svelte unterscheidet sich von anderen Frameworks durch sein “Compiler-First”-Design.
00:04:40Im Grunde ist es eine Sprache, die in hochperformantes Vanilla-JavaScript umgewandelt wird.
00:04:48In der Anwendung ähnelt es vielen anderen Frameworks, aber durch das Design
00:04:53können wir Dinge oft etwas eleganter und kompakter lösen als andere.
00:04:58Zusätzlich zu Svelte, das sozusagen die Basisschicht bildet,
00:05:02haben wir das darauf aufbauende Framework namens SvelteKit.
00:05:08Wer aus der React-Welt kommt: Das ist quasi unser Gegenstück zu Next.js.
00:05:13Es liefert alles Weitere: Routing, Server-Side Rendering, Datenladen, Build-Tools –
00:05:18eben all das, was man braucht, wenn man eine App baut, sich aber nicht
00:05:24selbst um das ganze Drumherum kümmern möchte.
00:05:28Hervorragend, vielen Dank.
00:05:29Ihr wart hinter den Kulissen ja auch ziemlich fleißig am Werk.
00:05:32Ich würde gerne mehr darüber erfahren, was ihr in den letzten Monaten so getrieben habt.
00:05:37Ich habe gehört, ihr habt auch ein paar Demos vorbereitet?
00:05:41Wir haben in der Tat ein paar Demos dabei.
00:05:43Soll ich vielleicht den Anfang machen?
00:05:44Vom Ablauf her ist es am sinnvollsten, erst über die “Async Svelte”-Entwicklung zu sprechen,
00:05:51bevor wir zu den Dingen kommen, die wir darauf aufbauen.
00:05:55Klingt gut.
00:05:55Alles klar. Seit gut einem Jahr – vielleicht auch länger, ich bin mir nicht ganz sicher –
00:06:02arbeiten wir an dem, was wir lose als “Asynchrones Svelte” bezeichnen. Wenn ich meinen Bildschirm teile,
00:06:12kann ich kurz zeigen, was das ist, und danach schauen wir uns die Anwendungsfälle an.
00:06:20Ich muss nur kurz schauen, wo der Button zum Bildschirmteilen ist.
00:06:26Und mich durch die ganzen Berechtigungsdialoge klicken.
00:06:28Einen Moment Geduld bitte.
00:06:30Gesamten Bildschirm teilen.
00:06:33Bumms.
00:06:34Okay, ich glaube, mein Bildschirm wird übertragen.
00:06:35Ist er zu sehen oder bin ich noch im Backstage-Bereich?
00:06:38Ja, wir sehen ihn.
00:06:40Okay. Für alle Neulinge: Das hier ist Svelte.dev.
00:06:43Das ist unsere Website.
00:06:44Das ist der Playground, wo man Svelte ausprobieren kann, ohne etwas zu installieren
00:06:49oder sich mit der Kommandozeile herumschlagen zu müssen.
00:06:51Man kann den Code direkt hier schreiben.
00:06:53Das ist der Standard-Playground, den man bekommt.
00:06:55Ich mache das mal etwas größer, damit es jeder gut lesen kann.
00:06:58Hier haben wir einen State (Zustand).
00:07:03Diese speziellen Elemente hier nennen wir Runes.
00:07:05Damit signalisiert man, dass sich etwas in der Svelte-Komponente ändern wird
00:07:10und dass bei einer Änderung ein Re-Rendering nötig ist.
00:07:12Wir haben hier einen Namen und einen Zähler (count).
00:07:15Den Namen lassen wir uns hier oben anzeigen.
00:07:17Und hier binden wir den Wert an den Inhalt dieses Elements.
00:07:21Das können wir so machen.
00:07:24Wenn wir auf diesen Button klicken, erhöht sich der Wert.
00:07:27Alles sehr einfache Dinge, die so ziemlich jedes
00:07:29Framework in irgendeiner Form beherrscht.
00:07:35Was Async Svelte nun ermöglicht, ist die direkte Nutzung des “await”-Keywords
00:07:41innerhalb eurer Komponenten.
00:07:45Sagen wir mal – wir schmeißen den Namen und den ganzen Rest hier raus.
00:07:49Machen wir daraus eine ID, die bei eins beginnt.
00:07:56Ich werde jetzt ein paar JSON-Daten
00:08:01von einer externen Quelle abrufen.
00:08:04Zuerst erstelle ich etwas, das von der ID abgeleitet ist.
00:08:10Diese URL wird also jedes Mal neu berechnet, wenn sich die ID ändert.
00:08:16Wie man hier sieht: Wenn ich die URL ausgebe, ändert sie sich,
00:08:22sobald sich die ID ändert.
00:08:24Jetzt hole ich mir Daten über diese URL:
00:08:28“myData = derived”.
00:08:30Und hier drin kann ich jetzt einfach schreiben: “await fetch(URL)”.
00:08:36Dann nehmen wir die Response und wandeln sie in JSON um.
00:08:41Wer in der Entwicklung tätig ist, hat so etwas
00:08:43sicherlich schon millionenfach gesehen.
00:08:47Und hier unten erstellen wir ein Blockquote-Element,
00:09:00um die geladenen Daten anzuzeigen.
00:09:03Wenn wir uns das jetzt ansehen –
00:09:06da ist gerade etwas kaputt.
00:09:13Das ist das Ergebnis, das wir wollen und anzeigen möchten.
00:09:16Also schreibe ich hier: “data.quote”.
00:09:21Oh, irgendwas stimmt nicht.
00:09:23Simon, Elliott – falls ihr seht, was ich falsch gemacht habe, sagt Bescheid.
00:09:28Ach nein, es ist nur die Verzögerung.
00:09:30Okay.
00:09:31Darunter fügen wir noch den Autor des Zitats ein.
00:09:40Vielleicht entfernen wir die Verzögerung, während wir daran arbeiten.
00:09:44Ich weiß nicht.
00:09:46Es hilft natürlich, wenn ich das in geschweifte Klammern setze.
00:09:50Wenn ich jetzt hier draufklicke, verschwindet es kurz,
00:09:55lädt neue Daten und rendert diese dann.
00:09:58Das klingt jetzt vielleicht nach einer totalen Kleinigkeit,
00:10:01aber wenn man sich ansieht, wie man das in fast jedem anderen Framework lösen muss,
00:10:08wird es schnell erschreckend kompliziert.
00:10:10Man braucht einen lokalen State und dann
00:10:13einen Effekt – wie etwa “useEffect”
00:10:16oder das Äquivalent in anderen Frameworks –, um den Fetch-Befehl auszuführen.
00:10:20Sobald der Fetch fertig ist, weist man das dem lokalen State zu,
00:10:25muss Fehlermeldungen abfangen und so weiter.
00:10:27Das wird alles ziemlich komplex.
00:10:32Aber hiermit funktioniert es einfach.
00:10:36Und selbst wenn es eine Verzögerung gibt –
00:10:43funktioniert es weiterhin.
00:10:45Wobei man sich vielleicht denkt: Moment mal,
00:10:46wenn ich den Button mehrmals schnell hintereinander klicke,
00:10:49will ich eigentlich sofort zum Endergebnis springen.
00:10:51Ich will nicht die ganzen Zwischenschritte abwarten.
00:10:53Auch das ist möglich.
00:10:54Wir können hier eine Hilfsfunktion importieren namens
00:10:58“getAbortSignal” und dieses Signal an den Fetch-Befehl übergeben.
00:11:11Wenn ich den Button jetzt klicke,
00:11:15werden alle Anfragen dazwischen verworfen,
00:11:19und es wird direkt zum letzten Klick gesprungen,
00:11:21da die früheren Anfragen zu spät aufgelöst werden.
00:11:26Zu diesem Zeitpunkt haben wir die ID ja schon wieder geändert.
00:11:28Die bestehenden Signale werden also abgebrochen.
00:11:33Gut, was geht noch?
00:11:34Vielleicht möchte ich, dass der Button sofort aktualisiert wird.
00:11:38Dafür können wir “state.eager” nutzen, um aus der
00:11:43asynchronen Warteschleife auszubrechen.
00:11:47Das ist auch ziemlich praktisch.
00:11:49Und wir können Styles hinzufügen.
00:11:51Wir definieren: “dataLoading = effect.pending > 0”.
00:11:58Das heißt, wir prüfen, ob noch Anfragen laufen.
00:11:59Und wenn wir uns in einem Ladezustand befinden,
00:12:04können wir den Inhalt ausblenden, während nachgeladen wird.
00:12:11Auch das ist etwas, das manuell zu koordinieren
00:12:13wahnsinnig schwierig wäre.
00:12:15Aber es geht noch weiter.
00:12:17Sagen wir, ich möchte passend zum Zitat ein Foto anzeigen.
00:12:19Das könnte dann so aussehen.
00:12:28Wenn ich es ändere, bekomme ich
00:12:37viele verschiedene Fotos zu sehen.
00:12:41Anscheinend alles Laptops, ich weiß gar nicht, warum.
00:12:42Ah, okay, hier ist ein schöneres Bild.
00:12:46Allerdings merkt man,
00:12:48dass es eine kleine Verzögerung gibt.
00:12:50Zuerst kommen die Daten des Zitats und dann ploppt das Bild auf.
00:12:52Das liegt daran, dass wir erst das Bild rendern
00:12:57und dann erst die Anfrage übers Netzwerk schicken,
00:12:58um das Bild zu holen. Das ist nicht ideal.
00:12:59Wenn wir das jetzt durch eine kleine “preload”-Hilfsfunktion ersetzen,
00:13:02die ich aus meinem Utility-Modul importiere,
00:13:07dann werden wir sehen, dass das Bild und das Zitat
00:13:17diesmal exakt gleichzeitig erscheinen.
00:13:24Wobei ich gerade einen kleinen Bug entdeckt habe.
00:13:27Den müssen wir noch fixen.
00:13:28Aber ihr versteht das Prinzip.
00:13:30Wir können “await” direkt in unseren Berechnungen nutzen
00:13:31und auch direkt in unseren Templates.
00:13:34Und all diese Dinge sind perfekt aufeinander abgestimmt,
00:13:36sogar über mehrere Komponenten hinweg,
00:13:40die unabhängig voneinander auf dieselben Events reagieren.
00:13:44Es funktioniert mit Server-Side Rendering.
00:13:47Es deckt all das ab, was ohne “Asynchrones Svelte”
00:13:49extrem mühsam wäre.
00:13:52Und auf dieser Basis können wir nun
00:13:55einige ziemlich coole Sachen bauen, wofür ich jetzt
00:13:58an die anderen beiden übergebe.
00:14:02Gerne.
00:14:05Ich werde kurz die “Remote Functions” demonstrieren,
00:14:09die darauf aufbauen.
00:14:10Da wir jetzt Async in Svelte haben, ist das extrem mächtig.
00:14:17die darauf aufbauen werden.
00:14:19Da wir jetzt Async in Svelte haben, ist das extrem mächtig.
00:14:24Aber SvelteKit, das Meta-Framework darüber,
00:14:27steckt sozusagen noch in der alten Welt fest.
00:14:30Wir haben diese Load-Funktionen, die in einer eigenen Datei liegen.
00:14:34Damit können wir all die neuen, coolen Sachen,
00:14:38die wir gerade gesehen haben, nicht wirklich nutzen.
00:14:41Deshalb arbeiten wir momentan an den "Remote Functions".
00:14:45Sie sind in SvelteKit bereits verfügbar.
00:14:48Zwar noch experimentell, aber man kann sie schon benutzen.
00:14:50Ich werde jetzt einfach den simpelsten Weg zeigen,
00:14:55Remote Functions zu nutzen, um Zeit zu sparen.
00:14:59Ich werde also
00:15:01einen ganz einfachen Zähler erstellen, bei dem
00:15:04der Klick auf den Button den Wert erhöht,
00:15:08der Zählerstand selbst aber auf dem Server liegt.
00:15:10Ich implementiere das in dieser counter.remote.ts-Datei.
00:15:16Ich beginne einfach mit einem "count".
00:15:18Und dann so etwas wie "get count".
00:15:20Dafür nutzen wir eine Query aus $app/server.
00:15:26Das ist eine Remote-Query.
00:15:29Hier geben wir einfach den Zählerstand zurück.
00:15:31Auf der anderen Seite können wir das dann nutzen
00:15:37und mit "await get count" aus der importierten Datei aufrufen.
00:15:44Dieser Import sieht für TypeScript wie ein normaler Import aus.
00:15:48Wir importieren lediglich eine Funktion,
00:15:52rufen sie auf und sie gibt ein Promise zurück.
00:15:54Also verwenden wir "await".
00:15:56Tatsächlich überschreitet dies aber die Grenze zwischen Client und Server.
00:16:01Dieses "get count" wird eigentlich auf dem Server ausgeführt.
00:16:05Was also passiert, ist, dass der Client
00:16:08eine Anfrage an einen versteckten Endpunkt sendet
00:16:14und von dort die Daten zurückerhält.
00:16:17Und natürlich unterstützt es auch Server-Side Rendering.
00:16:19Beim ersten Laden wird also nicht beim Backend angefragt,
00:16:23sondern es geschieht direkt.
00:16:25Jetzt haben wir zwar den Zählerstand, können aber noch nichts
00:16:29damit anfangen.
00:16:29Wir wollen ihn erhöhen.
00:16:31Das wird die zweite Remote-Funktion.
00:16:34Wir implementieren das schnell – ohne Copilot.
00:16:38Das ist der falsche Befehl.
00:16:40Wir brauchen "command" aus $app/server.
00:16:45Hier aktualisieren wir einfach unseren Server-Status.
00:16:49Das allein hilft aber noch nicht,
00:16:52da wir dem System sagen müssen, weil es ein Command ist,
00:16:55dass auch ein Update mitgesendet werden soll.
00:16:58Wir rufen hier also unsere Remote-Funktion "get count" auf
00:17:03und führen darauf "refresh" aus.
00:17:05Damit sagen wir dem System im Grunde:
00:17:08Mache eine "Single-Flight"-Mutation.
00:17:10Wenn du aufgerufen wirst, erhöhe den Zähler um eins
00:17:14und sende dann die Information an den Client zurück,
00:17:19dass überall dort, wo "get count" auf der Seite genutzt wird,
00:17:22der Wert nun um eins erhöht werden muss,
00:17:24da ein neuer Status verfügbar ist.
00:17:27Wenn ich das nun hier einfüge,
00:17:29nutze ich "on:click" und erhöhe einfach den Zähler.
00:17:37Das ist alles, was ich tue.
00:17:38Es sieht wie ein ganz normaler Funktionsaufruf aus.
00:17:40Aber wie gesagt, das ruft tatsächlich den Server auf.
00:17:43Und wenn ich jetzt klicke, erhöhe ich den Wert.
00:17:49Das war ein extrem kurzer, grober Einblick
00:17:53in die Remote Functions.
00:17:55Man kann damit noch viel mehr bauen.
00:17:58Es harmoniert auch wunderbar mit KI.
00:18:01Zum Beispiel habe ich etwa fünf Minuten vor Sitzungsbeginn
00:18:06den Code-Copiloten gefragt: "Hey, bau mir
00:18:12einen einfachen Blog im Portal-Stil, in dem ich
00:18:18ein paar Remote Functions präsentieren kann.
00:18:20Nutze Svelte 5 mit dem Svelte-MCP."
00:18:25Elliot wird gleich noch etwas mehr dazu sagen.
00:18:29"Nutze das, Remote Functions und Async."
00:18:32Und es hat auf Anhieb geklappt.
00:18:34Das hier ist vorgerendert.
00:18:35Der Block ist vorgerendert.
00:18:37Und ich kann jetzt hier tippen –
00:18:42und es hier speichern.
00:18:43Dann wird es aktualisiert.
00:18:49Unter der Haube passiert im Grunde dasselbe.
00:18:53Wenn wir das kurz überfliegen:
00:18:56Wir nutzen "await get posts".
00:18:59"get posts" ist eine Pre-render-Funktion,
00:19:01was bedeutet, dass sie zur Build-Zeit ausgeführt wird
00:19:05statt zur Laufzeit.
00:19:06Wir haben hier unten einen Kommentarbereich,
00:19:12in dem wir Kommentare laden und ein Formular nutzen,
00:19:15um einen neuen Kommentar zu posten und so weiter.
00:19:19Das alles nutzt Remote Functions, keine Load-Funktionen.
00:19:23Nirgendwo.
00:19:24Und die KI hat das im ersten Versuch geschafft.
00:19:27Elliot wird dazu jetzt sicher noch
00:19:32ein paar Details verraten.
00:19:34Ja, das klingt super.
00:19:37Ich muss jetzt denselben Kram machen wie Rich Harris
00:19:41am Anfang mit der Bildschirmfreigabe.
00:19:46Okay, los geht's.
00:19:52Ich nehme mir kurz Zeit, um über die KI-Entwicklungen
00:19:57zu sprechen, an denen wir gearbeitet haben.
00:19:59Und mit "wir" meine ich explizit nicht mich selbst.
00:20:02Sondern hauptsächlich einen Typen namens Paolo und einige andere
00:20:06unserer Svelte-Mitwirkenden.
00:20:09Tatsächlich stammt der Großteil der aktuellen KI-Sachen
00:20:13von ihnen.
00:20:14Also ein riesiges Dankeschön an sie.
00:20:15Sie haben einen fantastischen Job gemacht.
00:20:18Und ja, ich zoome hier mal kurz rein.
00:20:24So, bitteschön.
00:20:27Ich könnte jetzt lange erklären,
00:20:28was wir alles dafür aufgebaut haben,
00:20:31denn wir haben einen MCP-Server.
00:20:32Der hat einige wirklich coole Funktionen.
00:20:36Wir haben auch einige "Skills" veröffentlicht.
00:20:38Aber zum Glück müsst ihr
00:20:41gar nicht im Detail wissen, wie das alles funktioniert,
00:20:43denn wir haben auch Plugins für Open Code und Cloud Code
00:20:47veröffentlicht.
00:20:48Ich werde hier das Open-Code-Plugin installieren,
00:20:52was im Grunde nur bedeutet, diese Konfiguration zu kopieren
00:20:55und sie in eine Open-Code.json-Datei
00:20:58in eurer Bibliothek einzufügen.
00:21:00Und dann lasse ich mir von Open Code einfach eine Seite bauen.
00:21:06Mal sehen, wie das läuft.
00:21:10Ich werde es jetzt fragen.
00:21:11Ich habe ein paar Bilder in den Assets bereitgestellt.
00:21:17Ich zoome das hier auch noch mal für euch heran.
00:21:28Leider sieht es so aus, als könnte ich hier nicht reinzoomen.
00:21:34Jetzt aber.
00:21:34Okay.
00:22:00[TIPPEN]
00:22:06Wir werden sehen, was dabei herauskommt.
00:22:09Keine Fehler machen.
00:22:11Ja, genau.
00:22:12Das ist sehr wichtig.
00:22:13Wenn man das nicht ans Ende seiner Prompts schreibt,
00:22:15funktionieren sie nicht so gut.
00:22:18Aber während das hier läuft, kann ich euch
00:22:21ein wenig über ihre Arbeit erzählen.
00:22:25Wenn ihr auf die Svelte-Website geht
00:22:28und unsere KI-Dokumentation aufruft, bekommt ihr den Überblick.
00:22:32Wir haben ein MCP veröffentlicht, das eigene CLI-Tools mitbringt.
00:22:36Und es hat eine Reihe von –
00:22:40oh, hey, er hat das in den letzten fünf Minuten gefixt.
00:22:43Es sieht also anders aus als noch vor fünf Minuten.
00:22:46Aber wir haben mehrere Tools, die es auf eurem Rechner aktiviert.
00:22:51Die meisten davon dienen dazu –
00:22:53oder die ersten zwei dienen dazu, gute Informationen
00:22:58über Svelte zu erhalten.
00:22:58Es bringt eurem Agenten bei, wie man die Dokumentation liest,
00:23:03und zwar ganz spezifisch so,
00:23:05dass er genau die gesuchten Informationen findet,
00:23:08ohne die gesamte Doku dumpen zu müssen
00:23:11oder Zeit und Kontext mit unnötigem Suchen
00:23:12zu verschwenden.
00:23:15Es gibt auch diesen genialen Svelte-Autofixer,
00:23:17den sie gebaut haben. Er erkennt Muster,
00:23:21die LLMs oft verwenden, die aber nicht gut sind, und korrigiert sie.
00:23:26Zudem bietet es eine Integration mit unserem Playground,
00:23:33den man direkt hier nutzen kann.
00:23:37Eine weitere coole Sache ist eine
00:23:39unserer zentralen Design-Entscheidungen
00:23:44bei all diesen KI-Themen:
00:23:46Wie machen wir das für Agenten UND Menschen nützlich?
00:23:52Wir wollen nicht, dass das eine undurchsichtige Sache ist,
00:23:55bei der euer Agent auf magische Weise Dinge weiß,
00:23:59ihr selbst aber nicht.
00:24:00Es wäre sonst schwer nachzuvollziehen.
00:24:01Im Grunde versuchen wir also alles,
00:24:04was wir tun, auch in die Dokumentation zu integrieren.
00:24:07Unsere veröffentlichten Skills,
00:24:09die Teil des Open-Code- oder Cloud-Code-Plugins sind,
00:24:12wenn man sie installiert,
00:24:15veröffentlichen all ihre Inhalte auch in der Doku.
00:24:18Ihr könnt also immer sicher sein: Wenn ihr euch fragt,
00:24:20welche Best Practices wir eurem LLM vermitteln,
00:24:25könnt ihr sie selbst nachlesen.
00:24:27Sie werden immer so auf unserer Seite stehen.
00:24:31Schauen wir mal zurück, wie viel Arbeit
00:24:34das Ding schon geleistet hat.
00:24:35Bisher noch nicht viel.
00:24:39Oder vielleicht doch eine Menge.
00:24:45Ja, da passiert gerade viel beim Styling.
00:24:56Ich rufe einfach mal meinen Localhost auf
00:25:00und schaue, was es gemacht hat.
00:25:03Nichts.
00:25:07Okay, nun, ich möchte das hier nicht aufhalten,
00:25:10während es noch den ganzen Prozess durchdenkt.
00:25:12Das könnte eine Weile dauern.
00:25:13Falls wir am Ende noch Zeit haben, schauen wir uns an,
00:25:15was das LLM für unser handwerkliches Kartoffelkanonen-Business
00:25:19entworfen hat.
00:25:20Aber ja, das ist die KI-Entwicklung, die wir
00:25:25in den letzten Monaten vorangetrieben haben.
00:25:26Fantastisch.
00:25:32Ja, extrem relevant in dieser neuen Ära.
00:25:37Ich würde wirklich gerne wissen, was als Nächstes kommt.
00:25:40Worauf freut ihr euch am meisten?
00:25:46Das nächste Release wird SvelteKit 3 sein.
00:25:51Daran arbeiten wir momentan aktiv.
00:25:53Aber es wird kein Riesending mit Unmengen neuer Features.
00:25:56mit massenhaft neuen Funktionen.
00:25:57Es ist im Grunde eine Gelegenheit, vieles
00:25:59vom alten Kram zu entfernen, sozusagen den Tisch zu decken,
00:26:02damit wir all die aufregenden neuen Dinge bauen können.
00:26:06Die größte Änderung ist die Nutzung der Environment-API,
00:26:09jetzt, wo Vite 6 buchstäblich vor zwei Stunden veröffentlicht wurde.
00:26:15Und es wird Svelte 5 als Mindestversion voraussetzen.
00:26:21Ihr könnt also weiterhin Svelte 4 benutzen.
00:26:25Und darüber hinaus werden wir uns darauf konzentrieren,
00:26:29Async Svelte und Remote Functions stabil zu machen.
00:26:33Hört sich gut an.
00:26:37Ich habe läuten hören, dass ich jetzt
00:26:41an Elliot übergeben werde, weil das LLM
00:26:44fleißig am Arbeiten war.
00:26:46Willst du uns zeigen, was du hast?
00:26:47Wie es so oft läuft, wurde es genau eine
00:26:49Millisekunde nach unserem Wechsel zum nächsten Punkt fertig.
00:26:55Schauen wir mal hier rein.
00:26:59Ja, das ist unser handgemachter Kartoffelkanonen-Shop,
00:27:03den wir gerade für etwa einen Dollar an Tokens erstellt haben.
00:27:07Und wenn man so durch den Code schaut,
00:27:13hat es wirklich gute Arbeit geleistet, nichts Verrücktes gemacht
00:27:17und das genutzt, was ich als Best Practices für Svelte betrachte.
00:27:22Probiert es mal aus.
00:27:25Lasst uns wissen, wie es euch gefällt.
00:27:27Ich bin wirklich beeindruckt von der Arbeit,
00:27:29die Paolo und die anderen an all diesem AI-Kram geleistet haben.
00:27:33Und wir möchten uns stetig verbessern.
00:27:35Also gebt uns euer Feedback, wann immer ihr welches habt.
00:27:38Danke.
00:27:40Klasse, die Demo-Götter sind heute auf unserer Seite.
00:27:45Sollen wir die Runde für Fragen öffnen?
00:27:47Ich glaube, wir haben schon einige im Chat.
00:27:51Ich fange mal an, okay?
00:27:53Wir haben hier eine zu Remote Functions.
00:27:57Wird es Streaming für Remote Functions geben?
00:28:00Die DX von Remote Functions ist einfach so toll.
00:28:03Man möchte sie überall einsetzen.
00:28:05Ja, ich denke, Richard kann das beantworten,
00:28:06da du in diesem Bereich tätig bist.
00:28:10Ja, lustig, dass du das erwähnst.
00:28:12Ich baue nämlich gerade selbst eine App,
00:28:15die genau diese Funktion benötigt.
00:28:17Und wir – Simon hat vor einer Weile an einem PR gearbeitet,
00:28:22der Teile davon implementiert hat.
00:28:23Seitdem haben sich unsere Vorstellungen
00:28:28zum Design ein wenig weiterentwickelt.
00:28:31Aber es ist etwas, das wir unbedingt angehen wollen.
00:28:35Ja, wenn wir das hier in einer Woche machen würden,
00:28:40könnten wir vielleicht sagen: Hier ist der Pull Request.
00:28:43Soweit sind wir noch nicht ganz.
00:28:44Aber seid versichert, es hat eine sehr hohe Priorität.
00:28:47Und wir freuen uns sehr auf dieses Feature.
00:28:49Für diejenigen, die nicht vertraut sind: Im Grunde
00:28:51reden wir von einer Echtzeit-Version
00:28:55der Query-Funktion, bei der man Daten
00:28:59vom Server anfordert und ein Async Iterable zurückerhält,
00:29:04das jedes Mal, wenn es neue Daten gibt,
00:29:09diese an den Client weitergibt.
00:29:12So hat man Echtzeitdaten ohne jegliches Polling
00:29:15oder ähnliches.
00:29:16Und sobald die Seite diese Daten nicht mehr anzeigt,
00:29:21wird die Anfrage beendet.
00:29:23Und das Async Iterable räumt sich selbst auf.
00:29:26Es ist einfach eine sehr schöne Art,
00:29:28über diese Echtzeit-Probleme nachzudenken.
00:29:31Ja, darauf freue ich mich sehr.
00:29:33Um das ganz klar zu sagen: Wenn Rich sagt,
00:29:35dass wir uns bald darum kümmern, meint er,
00:29:38dass Elliot mich gerade davon abhält,
00:29:40daran zu arbeiten.
00:29:41Ich warte darauf, dass er etwas fertigstellt.
00:29:43Sobald ich mit meiner aktuellen Aufgabe durch bin,
00:29:45sind wir dran.
00:29:46Schön.
00:29:50Wir haben noch eine Frage.
00:29:52Und zwar: Warum Svelte gegenüber anderen Frameworks wählen?
00:29:55Offensichtlich halten wir es für das beste und fähigste Framework.
00:30:07Aber der wahre Grund, sich heutzutage
00:30:11für ein Framework zu entscheiden,
00:30:13ist ehrlich gesagt, dass es einem mehr Spaß macht als die anderen.
00:30:18Es geht viel mehr um persönliche Vorlieben
00:30:20als um irgendetwas anderes.
00:30:22Und besonders heutzutage, wo es
00:30:24wirklich einfach ist, zwischen Frameworks zu wechseln,
00:30:28hat man einen magischen Zauberer zur Hand, der einem zeigt:
00:30:32„Ich bin es gewohnt, das in Vue so zu machen.
00:30:35Wie mache ich das in Angular?“ oder was auch immer.
00:30:37Die KI kann das.
00:30:38Die Lernkurve wurde in der heutigen Zeit
00:30:43praktisch abgeflacht.
00:30:45Man sollte also das Werkzeug nutzen, mit dem man am produktivsten ist
00:30:49und mit dem man am liebsten arbeitet.
00:30:53Ein Teil davon ist die Community um das Projekt.
00:30:57Ein anderer Teil ist die allgemeine Philosophie des Projekts.
00:31:02Was man heutzutage aber meiner Meinung nach nicht tun muss,
00:31:05ist eine Entscheidung danach zu treffen, welches Framework X oder Y kann.
00:31:11Denn sie können im Grunde alle das Gleiche,
00:31:13oder welches Framework das größte Ökosystem hat.
00:31:16Denn das ist wirklich kein Problem mehr.
00:31:18Wählt also einfach das Framework, das am meisten Spaß macht.
00:31:21Und wir finden, dass das offensichtlich Svelte ist.
00:31:26Fantastische Antwort.
00:31:27Gefällt mir.
00:31:29Als Nächstes fragt jemand: Gibt es Neuigkeiten zum Thema Cache?
00:31:35Ja, ich denke, hier geht es wahrscheinlich um Remote Functions.
00:31:38Im Kontext von Remote Functions
00:31:41haben wir noch keine Cache-API.
00:31:45Es gibt einen internen Vorschlag.
00:31:48Das ist in Arbeit.
00:31:51Es wurde wegen all der anderen laufenden Arbeiten kurz beiseitegelegt.
00:31:55Aber es wird bald wieder aufgegriffen.
00:31:58Und dann werden wir eine wirklich schöne Caching-API haben,
00:32:01die mit Remote Functions integriert ist.
00:32:05Großartig.
00:32:06Wir haben eine etwas lockerere Frage.
00:32:08Was wäre dein Traumort für ein Svelte Summit?
00:32:10Oh, wow.
00:32:13Wollen wir spontan eine kleine Runde machen?
00:32:16Du bist stummgeschaltet, Elliot.
00:32:22Also, wenn wir von „Summits“ (Gipfeln) sprechen,
00:32:24hätten wir den Everest, den K2...
00:32:28Nein, aber für mich spielt der Ort keine so große Rolle.
00:32:34Weil ich sowieso hauptsächlich Zeit
00:32:36mit den anderen Svelte-Entwicklern verbringe.
00:32:38Auch wenn es kitschig klingt: Eigentlich ist es überall toll.
00:32:43Aber Europa ist echt cool.
00:32:46Fast überall dort gibt es Orte,
00:32:48an denen ich noch nicht war und die ich gerne sehen würde.
00:32:51Ich freue mich immer über einen Grund, ins Ausland zu reisen.
00:32:56Es gibt in der Svelte-Welt diese Tendenz,
00:33:01überall das Präfix „SV“ davorzusetzen.
00:33:04Welches Wort man auch immer nimmt,
00:33:06um eine Library oder ein Konzept zu benennen,
00:33:08man setzt einfach SV davor.
00:33:11Ich denke, wenn wir das konsequent durchziehen würden,
00:33:12müssten wir unsere Konferenz in Svalbard abhalten.
00:33:15Schön.
00:33:20Das ist eine norwegische Inselgruppe.
00:33:23Hast du das gerade spontan gegoogelt?
00:33:27Das kam tatsächlich neulich erst in einem Gespräch auf.
00:33:31Ja, ganz zufällig.
00:33:35Ja.
00:33:38Wenn ich wirklich träumen darf, wäre mein Traumort
00:33:41tatsächlich auf einem Boot.
00:33:45Einfach auf dem Meer.
00:33:47Schönes Wetter.
00:33:49Und dann einfach drei Tage auf einem Boot. Das wäre cool.
00:33:52Das wäre cool.
00:33:55Klingt alles wunderbar.
00:33:57Ich freue mich schon auf das nächste Svelte Summit.
00:34:00Und passend zum Thema Community und Events
00:34:03haben wir die Frage: Wie kann man
00:34:05sich bei Svelte einbringen? Gibt es Events oder
00:34:07Community-Möglichkeiten?
00:34:11Es finden ständig Events statt.
00:34:13Auf sveltesociety.dev findet ihr
00:34:15einen Veranstaltungskalender.
00:34:16Dort gibt es auch viele Infos dazu, wie man am besten
00:34:19mitmachen kann. Besonders wenn es in eurer Gegend
00:34:22noch nichts gibt und ihr Interesse hättet,
00:34:25eine eigene Svelte Society Gruppe zu gründen,
00:34:28ist sveltesociety.dev die richtige Anlaufstelle.
00:34:33Genau, und wenn ihr ganz neu seid, kommt in den Discord
00:34:36und sagt einfach „Hi“ in einem der vielen Kanäle.
00:34:41Es gibt auch spezielle Kanäle für die verschiedenen Gruppen
00:34:47oder Regionen.
00:34:49Meistens sind das Verweise auf andere Discord-Server
00:34:55in der jeweiligen Landessprache.
00:34:57Es gibt zum Beispiel auch einen Discord-Kanal
00:35:00der German Svelte Society.
00:35:01Schaut also einfach im Discord vorbei,
00:35:06dann ergibt sich der Rest von selbst.
00:35:08Und ansonsten ist der allgemeine Svelte-Kanal
00:35:12auch ein netter Ort zum Verweilen.
00:35:16Ja, die Svelte-Leute sind wirklich liebenswert.
00:35:18Schaut also unbedingt mal bei ihnen vorbei.
00:35:22Wir haben noch eine Frage zum Thema KI.
00:35:24Elliot, du hast das ja schon angesprochen.
00:35:26Jemand fragte: Es ist toll zu sehen, wie Frameworks sich
00:35:29an die Welt der KI-Agenten anpassen.
00:35:31Gibt es Statistiken dazu, ob Agenten standardmäßig Svelte wählen?
00:35:36Nein, nicht wirklich.
00:35:37Vielleicht könnten wir dazu ein Signal
00:35:44über etwas wie v0 erhalten,
00:35:46wo wir solche Telemetriedaten sehen.
00:35:49Aber Svelte im Allgemeinen hat –
00:35:53ich sage mal „Svelte“, aber ich meine die Leute hinter Svelte –
00:35:57eine eher ablehnende Haltung gegenüber
00:36:01dem Sammeln von Telemetriedaten eingenommen.
00:36:06Im Grunde sind die einzigen Daten, die wir haben,
00:36:08solche, die öffentlich zugänglich sind.
00:36:10Wir können uns also die NPM-Download-Trends ansehen,
00:36:14die momentan aus irgendeinem Grund völlig durch die Decke gehen.
00:36:18Man sollte sie also vielleicht nicht als absolut gesetzt ansehen.
00:36:20Keine Sorge.
00:36:22Aber ja, wir sammeln aus Datenschutzgründen
00:36:25wirklich keine Daten über unsere Nutzer.
00:36:27Wir wollen nicht auf diese Weise auf euren Rechnern präsent sein.
00:36:30Unsere Daten stammen also aus öffentlichen Quellen
00:36:35und vielleicht einige nützliche Infos über Vercel-Kanäle.
00:36:43Anekdotisch gesehen: Wenn man LLMs fragt, was man wählen soll,
00:36:46oder was das Beste ist, wird Svelte oft genannt.
00:36:51Das ist zumindest schon mal schön.
00:36:53Aber ob sich das auch in der Wahl von Svelte niederschlägt,
00:36:56wenn man es im Prompt nicht explizit angibt, ist eine andere Frage.
00:37:01Ja, das ist sehr interessant.
00:37:03Sobald man sie auffordert, über das ideale Tool nachzudenken,
00:37:06nennen sie oft Svelte.
00:37:08Aber wenn man nicht sagt: „Ich möchte, dass du dieses Framework nutzt"
00:37:11oder „Ich möchte das beste Framework",
00:37:12sondern nur „Bau mir eine App", nehmen sie standardmäßig React.
00:37:17Und da können wir momentan nicht viel dran ändern.
00:37:21Deshalb konzentrieren wir uns darauf, sicherzustellen,
00:37:23dass die Teams, die sich für Svelte entscheiden,
00:37:27die bestmögliche Erfahrung machen.
00:37:29Und dass KI-Agenten die bestmöglichen Voraussetzungen haben,
00:37:31die Dokumentation zu verstehen und Fehler zu finden.
00:37:36Ja, und wie man am Portal-Blog und der Potato Cannon-Website sieht,
00:37:42werden sie immer besser darin,
00:37:46mit dem Kontext, dem MCP und so weiter umzugehen.
00:37:50Man kommt damit inzwischen also ziemlich schnell ziemlich weit.
00:37:56Schön.
00:37:57Ja, es ist toll zu sehen, wie viel Arbeit ihr da reinsteckt
00:37:58und wie ihr sowohl menschliche Nutzer
00:38:01als auch KI-Agenten berücksichtigt.
00:38:04Wir haben noch ein paar spezifischere Fragen
00:38:06zu Svelte-Funktionen.
00:38:08Eine davon ist: Ist es okay, mehrere Aufrufe
00:38:11derselben Remote-Funktion im Markup zu haben,
00:38:14oder sollte man eine Referenz im Script-Tag nutzen?
00:38:17Ja, das ist es.
00:38:20Du arbeitest gerade daran, also erklär du es.
00:38:24Das, was Rich gerade davon abhält, an Live-Queries zu arbeiten,
00:38:26hat tatsächlich mit dieser Frage zu tun.
00:38:29Ja, es ist völlig okay, dieselbe Remote-Funktion
00:38:35mehrfach aufzurufen und sie an verschiedenen Stellen
00:38:39mehrfach zu referenzieren.
00:38:41Wenn man Remote-Funktionen nutzt,
00:38:44sollte das mentale Modell für Queries so aussehen:
00:38:46Wenn ich eine Query mit einem Argument aufrufe,
00:38:50erhalte ich eine Referenz auf diese Query,
00:38:54und die Query ist etwas anderes als die Daten selbst.
00:38:57Wenn ich also irgendwo in meiner App „getUser" mit der ID 1 aufrufe,
00:39:04erhalte ich überall in der App
00:39:07dieselbe Instanz dieser Query.
00:39:08Die Query-Aufrufe werden app-weit dedupliziert,
00:39:11sodass pro Argument-Satz maximal ein Aufruf erfolgt.
00:39:16Verschiedene Argumente liefern verschiedene Ergebnisse.
00:39:19Gleiche Argumente liefern dieselbe Query.
00:39:21Sie werden über die gesamte App hinweg dedupliziert.
00:39:24Es gibt da momentan noch ein paar seltsame Vorbehalte,
00:39:28und genau daran arbeite ich gerade – sie zu fixen, zu kodifizieren
00:39:33und das Ganze ein wenig klarer zu machen,
00:39:37so wie in den letzten Wochen.
00:39:39Und hoffentlich wird das bald veröffentlicht.
00:39:41Aber ja, die kurze Antwort lautet: Ja.
00:39:44Ruft sie einfach auf und nutzt sie, wo immer ihr wollt.
00:39:47Ja, und um das noch zu ergänzen:
00:39:48Der Grund, warum wir diesen ganzen Aufwand
00:39:51mit dem „await"-Keyword und so weiter betreiben, ist,
00:39:54weil wir möchten, dass ihr so weit wie möglich
00:39:57alles, was eure Komponente benötigt,
00:39:59innerhalb dieser Komponente ausdrücken könnt.
00:40:00Die Zeiten, in denen man Daten hier oben abruft
00:40:04und sie dann vorsichtig an alles weiterreicht, was sie braucht,
00:40:08sind bald vorbei.
00:40:10Aber wenn man erst eine Referenz auf eine Query braucht
00:40:14und diese dann herumreichen muss, dann
00:40:15hätten wir dieses Ziel eigentlich nicht erreicht.
00:40:17Die Idee ist: Wenn diese Komponente Daten braucht
00:40:20und jene Komponente zufällig auch Daten braucht,
00:40:22müssen sie nicht miteinander kommunizieren.
00:40:24Sie können das System einfach über das
00:40:28Query-Interface nach den Daten fragen.
00:40:29Und das System kümmert sich darum, sicherzustellen,
00:40:32dass dies nur zu einer einzigen Anfrage führt
00:40:34und keine Inkonsistenzen zwischen den beiden
00:40:36Komponenten entstehen.
00:40:40Klasse, danke.
00:40:42Hier ist eine Frage zur Animation- und Transition-API.
00:40:47Ist dafür eine Generalüberholung geplant?
00:40:49Es hieß: „Ich fand es mühsam, Flip-Werte für Von/Zu-Größen
00:40:54über Attachments zu übergeben."
00:40:57Ich brenne absolut darauf, daran zu arbeiten.
00:41:02Ich freue mich schon lange darauf.
00:41:04Es gibt so viel zu tun.
00:41:06Ja, alles andere kommt uns ständig in die Quere.
00:41:09Als wir die Attachments-API entworfen haben,
00:41:12hatten wir genau das im Sinn.
00:41:16Transitions und Animationen sind toll.
00:41:19Und sie sind so in das Framework integriert,
00:41:21dass bestimmte Dinge sehr einfach umzusetzen sind.
00:41:25Aber sobald man eine gewisse Grenze überschreitet,
00:41:28können sie einem nicht mehr wirklich helfen.
00:41:29Man braucht mehr programmatische Kontrolle über sie.
00:41:33Und genau da wäre eine programmatische API
00:41:36zur Definition von Transitions und Animationen nützlich.
00:41:42Und die Attachments-API ist—
00:41:46die Idee ist, dass künftig die Attachments-API
00:41:49in Kombination mit einer API, die sagt:
00:41:52„Hey, wenn ich aus dem DOM entfernt werde,
00:41:54warte kurz, bis ich ein kleines Fade-out
00:41:58oder ein kleines Shimmy oder was auch immer machen kann."
00:42:00Und dann kannst du mich aus dem DOM entfernen.
00:42:02Das ist es, was einige dieser fortgeschritteneren
00:42:06Transition- und Animations-Szenarien ermöglichen wird.
00:42:09Aber wir sind einfach noch nicht so weit.
00:42:11Es ist geplant.
00:42:12Es wird passieren.
00:42:13Aber ich kann keinen Zeitrahmen nennen.
00:42:16Sicherlich nicht in den nächsten zwei oder drei Monaten.
00:42:22Gut.
00:42:22Zumindest steht es auf dem Plan.
00:42:24Das hören wir gerne.
00:42:25Cool.
00:42:25Ich denke, wir haben Zeit für eine weitere Frage.
00:42:27Also die letzte.
00:42:29Svelte ist agnostisch, aber was ist die
00:42:32Lieblingsdatenbank der Teammitglieder?
00:42:34Noch eine schnelle Runde.
00:42:37SQLite.
00:42:37Ich habe früher mal Neon für ein kurzes Experiment genutzt,
00:42:47und das war wirklich nett.
00:42:50Ja, SQLite ist gut.
00:42:53Worauf ich wirklich warte, ist, dass diese Sync-Engines
00:42:59richtig gut und überall verfügbar werden,
00:43:02damit wir echte Local-First-Sachen machen können.
00:43:05Und dann—ehrlich gesagt, ist es mir egal,
00:43:09welche Datenbank ich im Backend nutze, das ist meine kurze Antwort.
00:43:13Ja, ich denke—
00:43:15ich weiß nicht, ob ich wirklich einen Favoriten habe, denn—
00:43:18wenn man fragt: „Was ist deine Lieblingsdatenbank?",
00:43:22gibt es so viele verschiedene, weil sie
00:43:24unterschiedliche Dinge besser können.
00:43:26Man muss also wissen, warum man eine
00:43:28Datenbank wählt, um einen Favoriten zu haben.
00:43:31Ich finde Sachen wie Convex sehr interessant für dieses
00:43:36Local-First-Sync-Engine-Thema.
00:43:38Ich finde sie echt cool, sie haben vieles, das für sie spricht.
00:43:41Meine liebste Allzweck-Datenbank
00:43:42ist wahrscheinlich eigentlich Dynamo.
00:43:45Es kann gewöhnungsbedürftig und frustrierend sein,
00:43:47aber es ist wahnsinnig schnell.
00:43:49Und es skaliert extrem gut.
00:43:51Aber ich mag auch SQL sehr gerne.
00:43:55Wenn ich also eine SQL-Datenbank für ein Projekt nutzen kann,
00:43:58werde ich mich wahrscheinlich dafür entscheiden,
00:44:04weil meine Karriere in der Datenanalyse und so begann.
00:44:07SQL ist also das, womit ich quasi aufgewachsen bin.
00:44:09Also ja, ich weiß nicht, ob ich einen Favoriten habe,
00:44:14aber so denke ich darüber nach.
00:44:16Schön.
00:44:20Und wir haben einen Kommentar von Paolo.
00:44:20Ich weiß, du hast ihn vorhin schon erwähnt.
00:44:23Er sagt: „Ich sehe zu viele Farben.
00:44:24Sind wir sicher, dass Rich, Simon und Elliot für Vercel arbeiten?"
00:44:27Mein Stuhl ist schwarz.
00:44:32Ja, Paolo hat mich gedrängt, den Vercel-Hoodie zu tragen,
00:44:35aber es ist zu warm hier drin.
00:44:38Alles klar, Leute.
00:44:40Aber ich habe ihn im Schrank und hole ihn raus,
00:44:45wenn die Tage kälter sind.
00:44:48Das hören wir gerne, immer schön den Merch präsentieren.
00:44:51Großartig.
00:44:54Ja, ich freue mich so auf die Zukunft von Svelte
00:44:55und weiß es wirklich zu schätzen, dass ihr dabei wart,
00:44:58für all eure harte Arbeit hinter den Kulissen.
00:45:01Vielen Dank auch an den Rest des Svelte-Teams,
00:45:03die Maintainer, die heute nicht im Live-Stream sind.
00:45:05Und ein Gruß an die wundervolle Svelte-Community.
00:45:09Ja, danke an Rich, Simon und Elliot, dass ihr heute dabei wart.
00:45:11Dankeschön.
00:45:16Tschüss.
00:45:17War mir ein Vergnügen.
00:45:18Okay, liebes Publikum, geht noch nicht weg,
00:45:20denn bevor wir Schluss machen, haben wir einen Ehrengast.
00:45:23Wir haben Eve vom Vercel Education-Team hier.
00:45:26Hallo.
00:45:31Wie läuft's?
00:45:32Hallo, Eve.
00:45:33Gut.
00:45:33Wie geht's dir?
00:45:34Mir geht's super.
00:45:35Danke.
00:45:36Was für ein geniales Team von Experten hier versammelt ist.
00:45:36Ja.
00:45:40Ein echter Genuss.
00:45:41Alles klar.
00:45:44Möchtest du uns mehr über die Academy erzählen
00:45:45und was du da so ausgeheckt hast?
00:45:47Ja, sehr gerne.
00:45:49Falls ihr es noch nicht gehört habt: Vercel hat jetzt eine Academy.
00:45:50Wir haben 11 Kurse, die bereits online sind.
00:45:55Der neueste davon ging heute live,
00:45:57und zwar—Tadaa—der „Svelte auf Vercel"-Kurs.
00:46:03Das Team war eine große Hilfe dabei,
00:46:10das Ganze über die Ziellinie zu bringen.
00:46:13Darin bauen wir eine Ski-Alert-App.
00:46:15Wenn ihr also Skifahrer seid—
00:46:18oh ja.
00:46:23Ich teile gerade den Bildschirm, ich blende das mal ein.
00:46:25Klasse.
00:46:28Oh, da haben wir's.
00:46:29Da haben wir's.
00:46:30Das macht es gleich spannender.
00:46:31Der „Svelte auf Vercel"-Kurs ist live.
00:46:34Darin baut ihr eine Ski-Alert-App.
00:46:36In unserer heutigen Welt wissen Skifahrer,
00:46:40dass es dieses Jahr eine eher schwierige Saison war.
00:46:43Sehr wenig Schnee.
00:46:47Überall war es zu warm.
00:46:48Deshalb ist es wichtig, benachrichtigt zu werden,
00:46:50sobald es ein guter Skitag ist.
00:46:52Und das ist die App, die wir im Kurs gemeinsam bauen,
00:46:54um genau das zu ermöglichen.
00:46:58Wir haben da alles Mögliche—man kann verschiedene Alarme
00:46:59für unterschiedliche Bedingungen einstellen, damit man,
00:47:02wenn die Bedingungen stimmen, sofort vor Ort ist
00:47:06und keinen der wenigen guten Tage verpasst.
00:47:10Ja, der Kurs deckt Svelte ab.
00:47:13Wie man es auf Vercel deployt.
00:47:17Wie man das AI SDK nutzt.
00:47:19Wie man Workflows einsetzt.
00:47:21Und einige Profi-Tipps für den Produktiveinsatz.
00:47:23Großartig.
00:47:27Wunderbar.
00:47:28Ich glaube fest daran, dass man am besten durch Bauen lernt.
00:47:29Das ist also fabelhaft.
00:47:31Vielen Dank.
00:47:33Wir werden auch einen Link zum Kurs
00:47:34in die Live-Ressourcen packen.
00:47:36Danke, dass du heute bei uns warst, Eve.
00:47:38Klasse.
00:47:41Vielen Dank.
00:47:41Alles klar.
00:47:42Und damit sind wir am Ende unserer Live-Session angelangt.
00:47:46Vielen Dank an unsere Community,
00:47:49dass ihr eure Zeit mit uns verbracht habt.
00:47:51Ich flunkere nicht, wenn ich sage: Der Chat war heute echt am Brennen.
00:47:52Es war toll, das zu sehen.
00:47:54Wir hoffen, es hat euch gefallen.
00:47:56Und um es mit Rich Harris' Worten zu sagen: Svelte ist eine Lebenseinstellung.
00:47:58Also probiert es aus.
00:48:02Baut mehr Svelte-Sachen.
00:48:03Wenn ihr bei künftigen Community-Sessions dabei sein wollt,
00:48:05findet ihr alle Details auf unserer Community-Plattform
00:48:08unter [community.vercel.com/live](https://community.vercel.com/live).
00:48:11Vielen Dank an alle.
00:48:13Man sieht sich.
00:48:15Tschüss.
00:48:16안녕.