Hallo und herzlich willkommen zu einer weiteren Folge der Programmierbar News, die zweite nach unserer Sommerpause. Wir haben die KW40 und ich bin der Fabi und neben mir sitzt der Jojo und auch der Jan. Hi Jan. Jan, wer du bist, klären wir gleich, bevor ihr aber viel über uns hört und noch mal kurz, was die Themen heute sind. Wir unterhalten uns über Java 21, über GraalVN. Lex Friedman hat einen Podcast mit Mark Zuckerberg im Metaverse. Deno hat Queues rausgebracht und es gibt das Hectober Fest. Dazu gleich mehr. Aber ihr habt ja gerade gehört, der Jan ist bei uns und ihr habt in der Vergangenheit schon häufiger gehört, wir haben und suchen jetzt nicht mehr ein Programmierbar-Community Lead. Das ist jetzt nämlich der liebe Jan. Und genau wir haben ja schon euch seit Ewigkeiten erzählt, dass wir jemanden suchen, der uns hier bei der Programmierbar unterstützt. Wir machen das ja alle neben unserem Hauptjob, haben super viele Ideen, stecken super viel Zeit in diesen Podcast rein, haben aber noch viele Ideen, wie es weitergehen kann, haben gemerkt, wir brauchen Unterstützung. Die haben wir jetzt. Jan, du warst vorher Head of Development bei Lillidoo bzw. Direkt davor hast du Developer Relations für Shopify gemacht und bist damit gefühlt genau mit dem Skillset ausgestattet, uns hier unterstützen zu können, weil wir schon mehrmals, wir haben immer probiert, wie können wir diese Stelle beschreiben, so multidisziplinär irgendwie, machst du jetzt hier einen Podcast mit, musst aber auch viele von den Ideen, die von uns hier rumschwirren, irgendwie mal alle mal durchgehen, überlegen welche davon sind wirklich realistisch?
Und uns freut es super, dass du da bist. Von daher nochmal wirklich ein herzliches Hallo von uns aus der Programmierbar und schön, dass du ein Teil von uns bist.
Ja, danke, dass ich da sein darf. Du hast es ja schon gesagt. Ich habe vorher selbst viel mit der Entwicklung gemacht, zehn Jahre lang Hands on Development Teams aufgebaut, Produkte aufgebaut und dann die letzten Jahre und Monate davor im Prinzip Developer Relations für Europa gemacht. Und das war auch so die Phase, wo ich dann dachte, so Programmieren und am Produkt arbeiten ist das eine, aber Communities aufbauen, mit Leuten reden, über Inhalte reden, Leuten was beibringen, zuzusehen, wie Leute lernen, das ist auch ganz cool. Und deshalb freut es mich, dass jetzt hier bei der Programmierbar sein darf, wo wir hoffentlich noch viel, viel mehr davon machen können.
Auf jeden Fall. Und ich glaube, wir haben uns auch vorhin ein bisschen darüber unterhalten, was genau erzählt man jetzt eigentlich? Ich glaube, was wir euch auf jeden Fall erzählen können, es gibt gefühlt immer viele Ideen, viele Pläne, die wir irgendwie hatten und es hat immer daran an Zeit gemangelt, die umzusetzen. In welchem Zeitrahmen und was wir davon jetzt in Zukunft umsetzen können, werden wir dann mal sehen, werdet ihr hoffentlich in irgendeinem Zeitrahmen irgendwann mal erfahren. Aber zumindest haben wir jetzt hoffentlich die Möglichkeit, das Ganze mal anzugehen. Cool auf jeden Fall. Und auch so ein bisschen deswegen. Wir wussten schon, dass der Jan Podcast aufnehmen kann. Aber wenn du vorher glaube ich keine Podcast Erfahrung hattest, weil es war auch besonders im Bewerbungsgespräch mal einen Podcast aufzunehmen. Es ist ja immer witzig, was man so im Bewerbungsgespräch macht. Aber da haben wir auch eine Testaufnahme gemacht, die ihr niemals zu hören bekommen habt, obwohl das eigentlich eine ziemlich gute Folge war.
Vielleicht.
Schlagen wir die noch aus. Ich glaube, wir haben sie nicht aufgenommen oder wie war das? Ich war.
Bei dir.
Nicht dabei.
Doch ich glaube, Dennis hat sie aufgenommen. Aber ich glaube, sie ist direkt danach wieder im E-Test verschwunden. Es gibt bestimmt auch in Deutschland irgendwelche DSGVO Richtlinien, die Bewerber Daten irgendwie vorschreiben, dass sie zu schreddern sind, dann oder sowas.
Keine Ahnung. Ja, aber mit deiner Einverständnis dürfen wir es bestimmt auch machen. Aber es scheint ja geschreddert worden zu sein. Von daher haben wir keinerlei Chance damit.
Aber ich weiß noch, ich weiß noch, dass ich über das Alpha Release von einer PAP Version gesprochen habe und ist ja bald November und dann kommt die raus und dann können wir das im Prinzip eins zu eins wiederholen.
Das ist sehr gut. Weil ich fand es nämlich, ich fand es nämlich cool. Gefühlt hast du daraus ein umgekehrtes Bewerbungsgespräch gemacht, weil dann irgendeine Techie-Frage gestellt wurde, die keiner von uns beantworten konnte. Mal schauen, können wir vielleicht dann noch mal stellen? Vielleicht können wir es bis dahin beantworten. Viel Wenns und Abers. Aber genau, steigen wir doch mal in die neuen Themen ein und geben dir eine neue Chance, die jetzt nicht mehr im Bewerbungsgespräch stattfindet. Wir haben ja angefangen, neue Software zu bauen. Lass doch mit Java 21 anfangen. Jojo, was gibt es da Neues?
Genau. Es gibt mit Java 21 eine lang ersehnte und wahrscheinlich eine der wichtigsten spannendsten Release sind, die es in den letzten Jahren in Java gegeben hat. Es sind nämlich super viele neue Features reingekommen. Sehr viele Features, die jetzt lange Zeit in der Entwicklung waren, vielleicht auch lange Zeit schon in der Preview-Phase gewesen sind und jetzt irgendwie finalisiert wurden. Wir haben allein 15 JdK Enhancement Proposals, so heißt letztendlich einfach dieser RFC Prozess für die Entwicklung von Java. Und was zum Beispiel jetzt inkludiert ist und final abgeschlossen ist, ist das Pattern Matching und es gibt endlich die lange sehenden Virtual Threats aus Project Loom. Die Vektor API, aber auch die Firmate Function Memory API, die so ein bisschen dieses Java native Interface ersetzen soll. Es gibt ein paar neue Free Preview Versionen, die vor allem für Entwickler die Arbeit leichter machen werden. Das sind die String Templates zum Beispiel und auch Anname Classes. Aber das, was man vielleicht unter Patter Matching kennt und das ist auch eine Entwicklung, die sich so ein bisschen gezogen hat. Also letztendlich war ja dieses ganze Thema, eben das Patter Matching in Java unter dem Projekt Ember untergeordnet oder wurde darin weiterentwickelt.
Das war so ein Seitenprojekt und das hat sich über die ganzen letzten JdK Releases eigentlich gezogen. Man hat zum Beispiel die Switch Expression mit der JDK 12 schon eingeführt. Dann in der Version 14 folgten dann die Type Patterns, also dass ich mit Instance of irgendwelche Sachen vergleichen kann und auch in dem Zuge auch die Record Typen, die es einfach ermöglichen, dass man nicht jedes Mal eine komplette Klasse in Java definieren muss, sondern wenn man reine Datenklassen hat, kann man das eben als Record definieren. Man kann direkt letztendlich dann auf die Getter zugreifen. Es werden alle entsprechenden Konstruktoren dann von der Runtime erzeugt und auch sowas wie natürlich Seed Classes, die mit JdK 15 eingeführt haben, haben natürlich zugrunde gelegt, dass man irgendwann auch die Möglichkeit hat, solche Klassen Hierarchien in einem Switch Expression komplett abdecken und abfragen zu können. Und ja, wir hatten vor ein paar Wochen glaube ich, bei dem Release von DATE3 eben auch schon mal das Thema Pattern Matching und muss sagen, dass sehr viele Strukturen und Möglichkeiten, die man jetzt in Java findet, eigentlich eins zu eins dem entsprechen, was man in DATE findet. Nicht, dass sich jetzt Java an DATE orientiert hat, sondern wahrscheinlich war es einfach andersherum, dass sich natürlich das DATEV Team an dieser längeren Entwicklung, die im Java Umfeld gelaufen ist, orientiert hat.
Aber es gibt zum Beispiel auch ein paar Sachen, die jetzt schon in DATEV implementiert sind. Also momentan kann man auch im Java zum Beispiel so ein Record Destructuring machen. Das heißt, wenn ich auf einen Typ vergleiche und sage, ich möchte aber auch gleich dann die Variablen extrahieren, wenn letztendlich dann dieses Switch Expression oder auch eine If Expression dann irgendwie gematcht hat, also das Pattern eben erfüllt war, möchte ich auch gleichsam mit den Bestandteilen eines Rekords dann weiterarbeiten. Und das ist schon möglich. Aber zum Beispiel kann man noch nicht, wie es in Daten jetzt schon möglich ist, dass man auch Arrays und Maps und andere Datenstrukturen irgendwie extrahieren und die StrukturDas wird aber zeitnah kommen. Das ist etwas, was in Project M schon entwickelt wird. Aber ja, es ist auf jeden Fall sehr, sehr umfangreich und bietet einfach eine API, mit der man sehr einfach und viel leserlicher auch bestimmte Abfragen gestalten kann. Pattern Matching kommt ja eher aus der funktionalen Programmierung, also eher etwas, was in der objektorientierten Programmierung eben anders ist und vielleicht nicht so einfach geschrieben wurde. Aber die haben sich eben sehr stark daran orientiert, was eigentlich diese funktionalen Ansätze einem bieten.
Und gerade aus dem Datenumfeld kann ich sagen, wir nutzen es jetzt seit vielleicht einem Monat. Wir haben sehr viele Switch Statements, die wir vorhatten, eben auf Switch Expressions umgestellt. Also es ermöglicht einem wirklich manchmal deutlich kompakteren Code zu schreiben, der viel verständlicher ist, was an der Stelle passiert. Was Sie jetzt als Preview noch mit eingeführt haben, das ist auch ein sogenannter Platzhalter gibt, das ist einfach ein Unterstrich. Das heißt, wenn ich mich zum Beispiel beim Auspacken eines Rekords für ein bestimmtes Feld nicht interessiere, kann ich einfach so einen Platzhalter, einen einfachen oder doppelten Unterstrich verwenden, sodass ich einfach sage, ich ignoriere dieses Element. Patterns kann ich allgemein nicht nur in Switch und if Statements nutzen, sondern ich kann das auch zum Beispiel in catch Blöcken nutzen oder auch bei Lambda Parametern, dort zum Beispiel direkt dann Übergabe Parameter Objekte irgendwie auszupacken und nur noch mit den Inhalten letztendlich dieses Objektes dann weiterarbeiten zu können. Das nächste spannende Thema und das macht natürlich auch Java für gerade Server-Anwendungen viel interessanter, ist, dass es jetzt eben Virtual Threats gibt. Und Virtual Threat ist ja, wie ich vorhin schon gesagt hat, etwas, was aus diesem Seitenprojekt Project Room gekommen ist und was ihr zum Beispiel mit Coroutine bei Kottlin vergleichen könnt.
Also bisher war es ja eigentlich immer so, dass letztendlich für ein JavaScript Threat wirklich die Plattform Threats genutzt werden mussten. Und das hat halt schon einen gewissen Overhead, weil gerade wenn man natürlich Webanwendungen hat, die ja sehr viel IO-Bound sind, also letztendlich nur auf IO Kommunikation warten, aber eigentlich die gesamte Zeit dazwischen bei einem Request auf die Antwort der Response warten und eigentlich nichts zu tun haben. Da wurden natürlich sehr viele Systeme Ressourcen blockiert, die eigentlich genutzt werden können. Und Virtual Threats verspricht eigentlich, dass man dort mit viel weniger Ressourcen overhead wirklich auf einem Plattform Threat mehrere Virtual Threats eben laufen lassen kann, die sich natürlich auch Speicherbereiche teilen können, aber die dort letztendlich dann viel optimaler laufen, sodass man wirklich Millionen von Threats, Virtual Threats parallel auf einem Webserver laufen lassen kann und dadurch natürlich einen viel besseren Durchsatz letztendlich für JavaScript Server bekommt. In dem Zuge sind noch ein paar neue Funktionen oder auch Klassen und Ansätze hinzugekommen. Das eine nennt sich Structureed Concurency, das andere Scope Values, einfach das Arbeiten mit diesen Virtual Threats zu vereinfachen, Scope Values ist sehr ähnlich zu den Threat Local Variablen, die man für das Arbeiten mit Plate Home Threats kennt.
Und eben Struktur Concurency ist es, gerade wenn man sagt, man hat letztendlich eine Aufgabe, die man auf mehrere Kerne verteilen will, auf mehrere virtuelle Threats verteilen möchte, wie man dann letztendlich diese Abläufe koordinieren und eben wieder zusammenführen kann, dann ein gemeinsames Ergebnis zum Beispiel auszugeben. Das soll einfach das Schreiben von solchen parallelen Aufgaben einfach deutlich einfacher machen. Was auch als Preview reinkommen, was ja spannend ist und glaube ich auch aus dem Datenumfeld etwas, was man kennt, ist sogenannte String Interpolation. Kennt man ja zum Beispiel auch aus dem TypeScript oder JavaScript Umfeld, dass man einfach sagen kann, man kann innerhalb eines Strings andere Elemente einbitten und die neuen Ansätze, die da zur Verfügung stehen, die ermöglichen es sogar eigene Template Prozessoren zu schreiben, sodass ich in Zukunft eben Json Objekte einfacher auspacken kann und mir eigene Prozessoren dafür schreiben kann, die solche Objekte dann verarbeiten. Es gibt so ein paar Neuerungen für Collections, dass es jetzt möglich ist, wirklich mit einer wohl definierten Reihenfolge eben damit zu arbeiten. Da gibt es einfach ein First Operator, Last Operatoren, ich kann sie umdrehen und Ähnliches. Etwas, was sozusagen dann in einer Klassenbibliothek einfach hilfreich ist, irgendwie mit solchen Collections zu arbeiten.
Und was auch super spannend ist, da haben wir auch schon Erfahrungen mit gemacht. Also im nativen Umfeld haben wir früher letztendlich aus verschiedenen Teilen eben auf z. B. Aus dem Android Umfeld auf C Bibliotheken irgendwie auf Geräte zugreifen müssen und haben immer dieses Java native Interface genutzt und da festgestellt Oh, das ist extrem langsam ist. Es ist super aufwendig letztendlich da die API zu definieren. Und da gibt es jetzt eben mit einem weiteren Previews, das ist jetzt das dritte Preview, was sie dafür herausbringen, mit dem vollen Functional Memory API die Möglichkeit, dass man eben dort direkt mit c-Bibliotheken arbeiten kann. Das ist dann statisch typisiert, wird automatisch generiert und dieser Full Memory Access erlaubt es, dass man neben dem normalen Speicherbereich eben noch weiteren Heap allokieren kann, auf denen dann letztendlich beide Bereiche, also aus dem nativen Teil und aus dem Java Teil eben zugreifen können, sodass man nicht jedes Mal die Daten über die Bridge übergeben muss und deswegen das deutlich schneller sein soll. Also die sagen so als Hausnummer, dass letztendlich mit diesen Forens Function und Memory in API der Implementierungsaufwand 90% reduziert werden soll und die Leistung das vier-bis fünffache steigen soll.
Also auf jeden Fall natürlich eine sehr nette Ergänzung, wenn man in Zukunft eben dann mit nativen Code-Teilen irgendwie interagieren muss. Und vielleicht noch eine Neuigkeit da nur zur GraphVM. Graphvm gibt es dann auch in der neuen Version und die bieten halt eben dann jetzt auch diesen vollständigen Support für die Virtual Threats. Also wer letztendlich seine Server eben auf der GraphVM laufen lässt, kann das dann auch direkt nutzen, einen besseren Durchsatz zu erreichen.
Habe ich das richtig verstanden? Also ich kenne mich mit Java nicht aus. Aber habe ich das richtig verstanden, dass die Idee jetzt ist, dass deine Java Runtime und dein irgendein anderes Binnary, das du ausführen willst, sich den Memory Heap teilen und beide darauf zugreifen? Ist das die Idee?
So verstehe ich es. Also einen gewissen Bereich letztendlich nicht den gesamten Heap, sondern es ist natürlich schon irgendwie getrennt. Aber letztendlich ist es so, dass du halt einen bestimmten Bereich zusätzlich allokieren kannst und dann aus beiden Bereichen darauf zugreifen.
Das ist ja super spannend. Also als du dann sagtest, na ja, das verringert irgendwie die Implementierung. Da dachte ich, na ja, das ist ja eigentlich nichts anderes als die Low Level X der API, die du dir vorstellen kannst. Einfach du hast kein Austauschformat, sondern du schaust direkt in den Speicher des anderen Programms irgendwie mit rein.
Und.
Da irgendwie einen Contract zu finden, an den sich dann alle halten, ist natürlich krass, weil wahrscheinlich die wenigsten oder das ist jetzt so ein Level, wo ich mich nicht auskenne, aber die wenigsten ja davon ausgehen, dass die interne Memory irgendwann mal ausgelesen wird zur Kommunikation.
Ich denke, das muss dann schon ein Format sein, was natürlich beide Seiten verstehen können, also was dann entsprechend definiert ist, dass sozusagen aus beiden Bereichen natürlich der Zugriff auf die gleichen Daten in dem gleichen Format dann gewährleistet ist. Aber du hast völlig recht. Also das ist natürlich etwas, was man auch aus anderen Programmierungen kennt, was die schnellste Art der Kommunikation ist. Einfach der eine Prozess legt es im Speicher ab, der andere kann letztendlich darauf zugreifen. Da muss ich aber auch sagen, dass ich über die konkreten Implementierung Details, die habe ich mir noch gar nicht angeschaut.
Man muss da nicht auf beiden Seiten einfach Schnittstellen geben, die da jetzt bereitgestellt werden? Ich werde ja nicht selbst mit dem Memory interagieren. Trotzdem werde ich irgendwie.
Eine Form von … In irgendeiner Form muss es natürlich so sein, genau, dass ich da ein klar definiertes Interface habe, wie ich die Daten dort reinschreibe und letztendlich dann sicherstelle, dass sozusagen...
Das heißt, technische Schicht über genau über Memory funktioniert oder worüber auch sonst? Kann mir ja eigentlich egal sein im besten Falle. Zumindest wenn du sagst, irgendwie der Implementierungsaufwand ist und was? War 90% der Implementierungsaufwand oder Geschwindigkeit? 90% geringer geworden. Dann klingt es komisch, wenn ich irgendwie...
Ja, genau. 90% war der Implementierungsaufwand und der Performance Faktor vier oder... Faktor vier oder fünf sein. Dadurch, dass man sich den Speicherbereich teilen kann.
Spannend, falls ihr das mal benutzt in der Java Version 21, lasst uns mal wissen. Vielleicht kriegen wir ein paar Erfahrungswerte. Java wird bei uns ja nicht mehr aktiv eingesetzt. Von daher werden unsere Erfahrungswerte sehr gering sein, die wir da.
Teilen können. Gerade bei die letzten Systeme von Java weg zu migrieren.
Haben wir sogar noch was? Ja, wir.
Haben es. Frau Pix haben wir noch. Einen letzten JavaScript Server ist da läuft.
Siehst du mal hier dann vielleicht doch noch mal Erfahrungswerte, falls ihr da noch entscheidet, was umzubauen. Ansonsten müssen wir uns mit Adam Bien noch mal unterhalten, der wird bestimmt eh noch mal herkommen, dann kann der uns was.
Dazu erzählen. Also er hat auch in seinem Podcast natürlich auch die Vorteile jetzt von den ganzen Sachen, die aus Project Loom und Member dann irgendwie reinkommen.
Oder hört das einfach und wartet nicht, bis er wieder bei uns ist. Genau. Aber spätestens dann können wir ihn fragen. Ja, dann genau bevor wir auf lextreatment-Podcast und Deno kommen, lass uns mal über Hactoberfest sprechen. Jan, was wird da gehackt?
Ja, es ist endlich wieder Oktober und Oktober ist nicht nur deshalb geil, weil Halloween ist, sondern auch weil Hactober ist. Hactoberfest hat nichts mit Oktoberfest zu tun in München. Es geht ganz ohne Alkohol und nüchtern, sondern es geht darum, Open Source Projekte zu unterstützen. Und ich bin da erstmals in Kontakt gekommen mit vor, ich weiß es nicht, bestimmt fünf, sechs, sieben Jahre schon irgendwie her. Ich glaube, Oktoberfest startet jetzt in der zehnten Edition dieses Jahr. Ich habe das damals mitbekommen über ein Projekt, das wir mit Digital Ocean gemacht haben, diesen Gründungsmitglied von dieser Initiative. Mittlerweile sind da ganz viele andere große mit dabei. Github, Gitlab, Hagenfac, DevTO, also ganz viele, die man so in der Szene irgendwie auch kennt. Und die Idee ist es eben, mehr Leute dazu zu bewegen, an Open Source mitzuarbeiten oder neue Contributor zu gewinnen. Und ich glaube allen Beteiligten ist klar, dass die Teilnahme am Hacker-Toberfest jetzt nicht zwangsläufig dazu führt, dass du dauerhaft Open Source, Maintenner oder Contributor wirst. Deshalb ist auch so ganz selbstbewusst das Motto der Veranstaltung: Shortterm Action, Long Term Impact. Also es hat niemand die Erwartungshaltung, dass jetzt jeder monatelang an seinem Lieblings Repository rumhackt, sondern die Idee ist, wenn ganz viele Leute ganz viele kleine Verbesserungen einreichen, dann ist ganz viel Mehrwert irgendwie geschaffen über ganz lange Zeit.
Und wer da mitmachen will... Das heißt aber so ein bisschen, genau was du gerade erzählt hast, wer mitmachen will. Also wie wenn ich jetzt, ich suche mal was auf und sage nur, ich mache das einfach zu dem Zeitpunkt, wo Hectoroverfest ist, so?
Genau. Also das ist die einfachste Variante. Du arbeitest einfach oder machst einen Pull-Request, Merge-Request an deinem Lieblings Open Source Repository. Und du kannst dich zeitgleich oder auch danach erst bei hacktoberfest. Com anmelden. Einfach Login via GitLab oder GitHub. Das brauchen sie eben, zu sehen, was für Pull Requests hast du so gemacht in der Zeit. Und sie erfassen dann automatisch alle, ich glaube alle geschlossen werden müssen sie, ne eröffnet werden müssen sie im Oktober oder geschlossen werden müssen sie im Oktober. Genau. Und das erfassen sie eben über deinen Git Login, Github Login.
Und.
Dann wird eben geguckt, wie viele Pull Requests, Smart Requests kriegt die Community so durch in der Zeit? Du kannst eigentlich an allen Projekten mitarbeiten mit einem kleinen Sternchen. Also sie nehmen sich natürlich so das Recht raus, wenn du jetzt an irgendwelchen Repositories mitarbeitest, die jetzt nicht mit den Werten der Veranstaltung irgendwie übereinstimmen, dass sie das dann disqualifizieren dafür oder das halt nicht so gerne sehen. Aber es gibt keine Vorgabe zu, wie groß dein Commit, dein Beitrag jetzt sein soll. Sie bewerben auch explizit oder sie wünschen sich auch explizit Leute, die Low oder No Code Beiträge machen. Also kannst du auch was übersetzen, du kannst an der Dokumentation mitarbeiten, du kannst Tests ergänzen oder ausbauen. Also ausbauen im Sinne von verbessern, nicht entfernen. Tests entfernen ist nie eine coole Idee. Das vielleicht nicht. Ja, und im Prinzip ist es so ein ganz kleines Incentive halt. Früher gab es dann irgendwie Sticker Packs und T-Shirts und keine Ahnung was alles. Mittlerweile sind sie da so auf einem grüneren Pfad unterwegs und pflanzen für jeden, der eben bei der Challenge teilnimmt, Bäume. Ich glaube für die ersten 50 oder 100.000 Teilnehmer oder so, die das schaffen pflanzen die Bäume und alle anderen Teilnehmer kriegen auch noch so ein Digital Reward Pack.
Da steht jetzt noch nicht so genau dabei, was es ist. Aber wenn man sich so die Unterstützer Community anguckt, dann kann man sich das so ein bisschen vorstellen, was es irgendwie sein kann. So, wie machst du jetzt mit? Also wie gesagt, der formale Teil ist einfach, hektoberfest. Com und irgendwie auf Login klicken und fertig. Es gibt zwei URLs, die ich dann noch mal kurz promoten wollen würde. Das eine ist first issue. Def und das andere ist up forgraps. Net. Können wir vielleicht beides auch in die Shownotes am Ende noch einmal mit reinpacken. Und da findet ihr eben Repositories von Maintenern, die am Hectorverfest teilnehmen und die ein paar ihrer Issues oder ein paar ihrer Pull Requests markiert haben für das ist sehr einsteigerfreundlich. Also wer sich jetzt noch nicht traut, irgendwie ein großes eigenes Feature zu bauen oder nicht selbstständig sich traut was rauszusuchen, kann da gucken. Da gibt es ganz, ganz viele Repositories in allen möglichen Sprachen, wo wirklich low, low, hanging fruit zu finden sind und wo jeder sicherlich was finden kann zum Mitmachen.
Ja, cool. Hast du vor mitzumachen?
Ich habe die letzten paar Jahre schon mitgemacht und ich werde es hoffentlich dieses Jahr auch wieder machen. Ich weiß noch nicht, ob ich einer der ersten 50 oder 100.000 sein bin, tatsächlich noch einen Baum gepflanzt zu kriegen, aber das wäre natürlich echt cool. Also auch wenn dann wahrscheinlich nicht mein Name draufstehen wird oder so, aber es ist einfach schön zu wissen, dass man irgendwie auch einen positiven Impact hat, der nicht nur digital ist, sondern der auch sehr, sehr analog und physisch ist.
Und wüsstest du schon, in welchem Projekt du was machst oder würdest du dann wirklich raussuchen nach? Keine Ahnung. Würdest du dann überlegen oder hast du schon was ins Auge gefasst?
Ich habe tatsächlich schon was ins Auge gefasst, das ist jetzt natürlich so ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen ein bisschen... Also das kann natürlich eines meiner eigenen Open Source Repositories nehmen. Also das qualifiziert jemand nicht. Also wenn ihr wirklich Open Source Maintenner seid, könnt ihr das auch so gerne machen. Aber so ehrlich muss an der Stelle auch sein, dass ein Repository auch schon sehr, sehr lange vernachlässigt wurde und das mal wieder ein bisschen Liebe irgendwie vertragen kann. Was ich vielleicht eher noch machen müsste, ist, mich auch, also meine eigenen Repositories bei einigen von diesen first issue oder Dev oder ähnlichen Plattformen mal anzumelden.
Weil ich kann auch immer, aber wenn es auch nur inzentiviert, einfach an den eigenen Open Source sagen, ist es trägt zur Open Source Community bei.
Definitiv. Ja, genau. Also wie gesagt, es gab mal ein ganz cooles Interview mit den Gründern, die auch gesagt haben, na ja, also Ziel ist es ja, ein Framework zu schaffen, was geradezu dazu einlädt, irgendwie missbraucht zu werden. Also wenn du das System so baust, dass je mehr Contributions irgendwie kommen, egal wie, ob das bei deinen eigenen Repositories sind, ob das Repositories sind, die du extra dafür jetzt irgendwie machst, ist ja am Ende egal. Am Ende gewinnt die Community.
Das.
Stimmt. Und Länge von Pull Requests oder so sind ja völlig unerheblich. Es geht die schiere Anzahl, die du dann irgendwie liest. Das ist das einzige, was wir erfassen können.
Und auch da kann man wieder sagen: Na ja, das lädt ja vielleicht dazu ein, anstatt einen großen viele kleine Pull Requests zu machen. Aber auch da kann man am Ende sagen: Na ja, aber Atolic Requests oder Atolic Pull Requests sind ja am Ende auch coole, lassen sich einfacher testen, lassen sich einfacher reviewen, lassen sich einfacher mergen. Also auch da wieder das System schon so gebaut, dass selbst wenn du versuchst, das irgendwie auszunutzen, dass du eigentlich nur maximal guten.
Benefit haben kann. Ich sage mal, die, die so oder so im September auch schon einige Issues oder Pull Requests eröffnet, geschlossen haben, wie auch immer, die werden jetzt nicht ihr Verhalten im Oktober komplett ändern, dann auf die... Also es geht ja... Das ist ja kein Vergleich, wo man sagt, wer schafft mehr so? Oder meinst.
Du, die Community hält sich jetzt im September mit irgendwie Beiträgen.
Komplett.
Zurück. Die werden gehamstert und dann im Oktober wird alles rausgehauen.
Jetzt geht's los. Von daher, ich glaube, es wird ja eher Leute dazu bringen, die es sonst nicht tun und die anderen werden sich nicht groß anders verhalten. Mein Tipp.
Ja, glaube ich auch.
Dann kommen wir zu DenoCues. Deno, ein Thema, was wir schon häufiger beackert haben, aber für die, die es immer noch nicht wissen, die nächste Generation JavaScript Runtime, Alternative für Node, entwickelt vom Entwickler von Node. Js, Rindal unter anderem, mit nativen Support für TypeScript mit Node. Js kompatibel und so weiter, die aber auch viel in Richtung Plattformen tun. Also mit DenoDeply haben sie auch eine Plattform, wo Deno-Services Serverless direkt deployt werden können. Und wir haben uns in einer Newsfolge, irgendwann im April war es, glaube ich, da haben wir uns auch schon mal über den Deno Key Value Store unterhalten, den sie jetzt haben, also ein Key Value Store, der eben auf diesem DenoRun Runtime läuft und eine Möglichkeit gibt, Serverless on the Edge Daten zu speichern. Und was sie jetzt rausgebracht haben, ist ein neues Produkt, was basiert auf dem Deno KV, also Key Value Store. Und zwar sind das Deno Queues. Einfache Möglichkeit. Also wer mit dem Begriff von Queues schon was anfangen kann, der weiß höchstwahrscheinlich genau, was sich hinter diesem Produkt verbirgt. Und zwar eine Message Queue, mit der ich eigentlich nur also nativ direkt mit, ich kann einfach eine Key Value Datenbank öffnen, was man mit dnum.
Open kb öffnet und auf der habe ich jetzt zwei Methoden, mit dieser Queue zu interagieren. Das eine ist die nq, also lege etwas auf die Queue drauf, db. Nq, wo ich einfach eine Message im Json Format mit einer Zeit oder einem Delay, wann es drauf gelegt oder bzw. Wieder rausgeholt werden soll, reinlegen kann. Und ich habe eine Listen Queue Methode, bei der ich sozusagen auf diese Nachrichten dann hören kann, wenn sie aus der sozusagen zu dem Zeitpunkt wieder rausgeholt werden. So, wer immer noch nichts mit Queues zu tun hatte, Use-Cases dafür wären zum Beispiel, ich will Notification-Scalule, sei es jetzt E-Mail Notification oder irgendwelche nativen Notification.
Oder ich möchte auch einfach nur Last verteilen.
Genau, Last verteilen. Das ist auch so ein anderes Beispiel. Auch irgendwie Web-Pro-Kommunikation, wenn viele Nachrichten reinkommen, dass ich es einfach verteilen möchte. Aber ich glaube, so der einfachste Anwendungsfall. Ich möchte irgendetwas in der Zukunft tun, mich erst dann damit beschäftigen, wenn das der Fall ist und dann lege ich es dafür auf die Queue. Lastverteilung wäre dann schon mal noch ein etwas komplizierterer Use Case. Aber es ist super cool, dass es halt so low level funktioniert. Also wenn es auf der Basis des Key Value Stores funktioniert, das heißt, wenn ich das in der Cloud mache mit denen, dann ist es auf ihrer Foundation DB basierend. Und wenn man es einfach lokal ausführt, dann nutzt es einfach irgendeine lokale SQL Datenbank, wo ich gerade vergessen habe, was es ist. Übrigens, ich sage die ganze Zeit Deno Run, Deno Deploy, meine ich natürlich. Also ich nutze einfach eine SQLite Datenbank und somit könnte ich entweder ein deno deploy nutzen in der Cloud oder eben auch lokal, aber dann eben nur mit der SQLite Datenbank. Und es bietet mir auch noch so ein paar Convenience Funktionen, wenn ich den Key Value Store auch nutze. Also beispielsweise gibt es ja im Key Value Store von Deno atomare Transaktionen, also dass ich mehrere Dinge im Key Value Store tun kann, die committen kann.
Und ich kann dann jetzt auch sagen, dass ich etwas in die Queue lege, wenn diese Transaktion erfolgreich war. Also ich kann direkt sagen, wenn ich sage okay, ich habe den Key Value Store, will eine Atolic Operation machen, setze irgendwelche Werte, sage am Ende ein Commit und vor dem Commit sage ich nq, also lege irgendwas auf die Queue, dann passiert das nur im Success Fall. Also nur wenn diese atomare Operation am Key Value Store wirklich durchgeführt wurde, dann wird es auch in die Queue reingepackt, beispielsweise, dass ich dem User nur Bescheid gebe, wenn auch wirklich was passiert ist und nicht, wenn es noch nicht passiert ist. Genau. Aber vom Ding her zwei relativ einfache Funktionen, aber eine ziemlich einfache Möglichkeit, wenn man den benutzt, einfach eine Message Queue auch direkt zu benutzen scheint. Also ich bin selbst noch nicht im Deno Ökosystem unterwegs, aber ich würde mich darüber freuen, wenn ich das wäre.
Und jetzt, jetzt so einen Worker aufzusetzen, starte ich dann auch einfach so ein Prozess, der einfach dann dieses Q-Listen macht und hol dann letztendlich die Pakete raus. Und der wartet dann letztendlich nur auf Nachrichten und verarbeitete dann.
Genau. Ich meine, ob der Worker jetzt derselbe Prozess ist, der es in die Q legt oder nicht, das muss man dann natürlich dann so ein bisschen, ist nach der eigenen System Architektur so ein bisschen gegeben. Grundsätzlich schaut Deno danach, dass nur, wenn mehrere beispielsweise auch Listen, dass nur einmal die Nachricht rausgeschickt wird. Aber es kann, sie sagen, man muss sie eigentlich trotzdem darum kümmern, dass eine Nachricht doppelt verschickt wird, weil es natürlich immer mal irgendwelche Fail-Overs geben kann oder so was. Also es kann Szenarien geben, wo es doppelt passiert, aber eigentlich im Großteil der Fälle sollte es nicht passieren. Aber man muss trotzdem Fail-over handling, wenn es halt wichtig ist, dass eine Nachricht wirklich nur einmal verarbeitet wird, muss man trotzdem Code dafür schreiben. Da gibt es auch ein paar Konvidenzfunktionen, die es über den Key Value Store geben, zu schauen, wurde diese Nachricht schon verarbeitet, aber man muss etwas dafür tun. Und Sie schreiben jetzt in dem Blogbeitrag nicht so ganz, wie es jetzt verteilt funktioniert, also wie man sicherstellt, dass wahrscheinlich, wenn man im Key Value Store arbeitet, weiß man es dann, wie man sicherstellt, dass alle auf denselben Key Value Store arbeiten.
Wenn ich mehrere Services habe, ist wahrscheinlich an die Instanz gekoppelt oder so, wo ich, wenn ich mehrere Services deploye, also wenn ich irgendwie Worker und irgendwie keine Ahnung, ich habe ein API Service oder einen Worker Service, kann ich die bestimmt so deployen, dass sie auf denselben Key Value Store zugreifen und dann könnten beide ein Listen machen.
Ich glaube, es ist ja auch so, dass wirklich das ganze Konzept von diesem Dino Key Value Store so ist, dass es auch verteilt funktioniert, also dass sie letztendlich dann eine Architektur haben, wo es dann nicht so gegeben sein muss, dass es auf einer Node läuft, sondern halt über verteilte Architektur.
Genau. Ich glaube, das ist ja so die Prämisse in einer globalen Datenbank für eben solche Edge Services. Und ich weiß es nur nicht, ich bin da gerade davon ausgegangen, dass ich den gleichen Service habe, der on the Edge an verschiedenen Standorten läuft, dann ist klar, müssen sie auf denselben Key Value Store zugreifen. Das ist ja das Promis. Ich wusste nur nicht, wenn es unterschiedlich deployte Services sind, dann wird man wahrscheinlich irgendeine Konfiguration haben, die sagt, nutzt denselben Key Value Store. Also da ist es auf dem Key Value Store basiert. Solange sie auf denselben zugreifen, werden sie auch auf die selbe Queue zugreifen.
Ja, auf jeden Fall super spannend, weil es gerade auch in unseren neueren letzten Microservice Architekturen eigentlich immer so ein zentrales Element ist, dass man so eine Queue hat, wo einfach Nachrichten gelesen werden, geschrieben werden. Einfach nur vielleicht wirklich Last von den Webserver nicht wegzunehmen, zu sagen, das sind asynchrone Jobs, die kann jemand anderes übernehmen, der vielleicht auch die Hoheit darüber hat. Oder auch wie du es gesagt hast, einfach so ein Skepto in die Zukunft zu machen, zu einem bestimmten Zeitpunkt dann Aktionen auszulösen.
Was nutzt ihr da? Nutzt ihr wirklich irgendeinen expliziten, dafür gedacht, ein Message Service, oder?
Ja, wir sind ja in der Google Cloud und da gibt es ja mit Task Views letztendlich einen Service, der.
Das genau angeht. Zum Beispiel bei The Test machen wir diese ganze Queue Handling über. Wir machen ja unser Big Table, dann nutzen wir einfach das, dass es das Streaming in Big Table gibt, so ein bisschen gere-use so. Und genau, gibt da glaube ich ja ein bisschen verschiedene Ansätze oder einfach. Bei Kuspern haben wir Redis einfach benutzt dafür auch. Also wir haben schon viel ausprobiert. Genau, viel ausprobiert dafür. Und aber so, dass so nativ und denodirekt funktioniert sehr gut.
Die eine Dimension ist ja Last von meinem Webserver wegzunehmen, was ich gerade schon gesagt habe. Die andere ist ja auch so ein bisschen dieses Interoperability irgendwie zu fördern. Also dein Webservice ist irgendwie in Java, vielleicht sogar schon in Java 21 irgendwie geschrieben. Ja, und dann schiebst du was in die Queue und dann kann ja jeder andere Service, der auch auf diese Queue zugreift, in jeder anderen Sprache geschrieben sein. Weil du vielleicht irgendwas mit Machine Learning hintendran machst oder Videobearbeitung oder keine Ahnung was, wo es halt irgendwie Sprachen gibt, die dafür viel besser geeignet sein können als das, was vielleicht deine Hauptsprache ist. Wie ist das denn bei diesen Deno Queues? Also es gibt ja bestimmt irgendwie dann native API-Zugriffe für die Deno Runtime. Aber kriege ich da auch andere Sprachen, andere Services angebunden, die nicht Deno sind?
Ja, gute Frage. Also ich würde davon ausgehen, dass der Key Value Store, was Deno Deploy spezifisches Feature ist, ich habe Deno-Deploy noch nicht genutzt, aber so wie ich es lese, würde ich erst mal erwarten: Nö, geht nicht. Aber ich würde sagen, es ist wirklich etwas komplett Deno Spezifisches. Also es würde da höchstwahrscheinlich nicht funktionieren. Ich würde es auch so erwarten.
Muss ja nicht schlecht sein. Es kann ja trotzdem die Hürde absenken, dass Leute das benutzen und mal das Konzept lernen und so. Und dann, wenn sie später doch irgendwie Interop brauchen oder größere Ansprüche haben, dann gehen sie vielleicht zu Big Query oder Rabbit MQ oder Redis.
Oder keine Ahnung was. Ich meine am Ende, wenn ich eine Infrastruktur habe, sage ich lege was auf die Queue und hole es wieder raus, so das zu Refact, dann wird es auch zumindest im Code nicht das große Problem sein. Deswegen glaube ich, der erste Anwendungsfall wird höchstwahrscheinlich sein sowas wie zum Beispiel Notification. Ich habe jetzt mein Deno Service da und will irgendwo Notification da hinlegen und habe einfach keine Lust, mir da irgendwie selbst zu überlegen, wann keine Ahnung jede Minute meine Datenbank zu überprüfen, ob da irgendwas drinliegt, sondern mich gerne nicht diese Implementierung kümmern wollen. Ich denke mal, das wird der Einstieg für die meisten sein. Aber wer weiß. Kommen wir von DNOQ noch zu unserem letzten Thema. Ich habe die Woche einen Podcast gehört, richtig gesehen, nicht ganz interessant, weil wir immer wieder auch das Thema Metaverse in unserem Podcast gehabt, jetzt auch schon lange nicht mehr und ja, durchaus auch ein bisschen kontrovers diskutiert. Und ich muss sagen, ich habe jetzt den, also welchen Podcast es geht, ist der Lex Friedman Podcast. Lex Friedman ist ja Research Scientist am MIT, bekannt für, also ist im Deep Learning Bereich unterwegs, hat einen Podcast mittlerweile schon seiner 400.
Folge und viele große Namen da mit drin. Keine Ahnung, wenn man jetzt auf die letzten guckt, war zum dritten Mal Elon Musk zu Gast, aber auch zum dritten Mal Mark Zuckerberg jetzt gerade. Und die haben ihren Podcast im Metaverse gemacht. Und wie sie ihn gemacht haben, ist eben das haben sie ja damals schon in diesem Metaverse Keynote, wo sie das das erste Mal vorgestellt haben und sich in Meta umbenannt haben, haben sie ja diese fotorealistischen Avatare gezeigt, so in der Preview. Und dieser Podcast war jetzt mit fotorealistischen Avataren. Dafür ist Lex Friedman wohl extra irgendwo in den USA Text oder so was. Es sind, es gibt wohl so Einrichtungen ein paar weltweit, wo sie Scanner haben, die einen so scannen, dass man diese fotorealistischen Avatare erstellen kann. Ich glaube, in ihrer Vision soll es ja irgendwann mal mit dem Handy funktionieren. Aber aktuell eben brauchst du dafür noch ein bisschen mehr Infrastruktur als dein Device in der Hosentasche. Aber haben dann räumlich voneinander getrennt, im Metaverse beide VR Brillen auf gehabt, die den Podcast durchgeführt und man muss sagen, also bei mir war es zum ersten Mal, ich würde es wirklich empfehlen mal anzuschauen, weil gefühlt habe ich da zum ersten Mal so ein bisschen auch gekauft dieses Szenario, so dass das schon eine andere Art der Interaktion so ein bisschen ist.
Und das finde ich krass, weil sie auch im Podcast immer wieder sagen, sie hoffen, dass es über Video überhaupt funktioniert. Zumindest sagt das Flex Freatman, weil es natürlich was ganz anderes ist, wenn du in der Virtual Reality bist und diese fotorealistischen Avatare siehst, als wenn du ein Video 2D davon siehst, wie es andere Leute gerade tun. Aber das Video ist echt schon gut gemacht und ich fand es schon sehr beeindruckend, den Sales. Man merkt trotzdem noch, dass teilweise Mimik und Gestik schon sehr gut funktioniert, obwohl Mark Zuckerberg und lexfriedman beide absolute Steine sind, was ihre Mimik angeht. Also lexfriedman ist nicht bekannt für starke Mimik und Mark Zuckerberg sieht auf jeden Fall weiterhin im Metaverse aus wie ein Roboter, so wie im echten Leben. Aber das fand ich schon cool. Sie unterhalten sich auch darüber, was so ein bisschen die Challenges sind, so dass es dann wirklich dahin kommt, dass man Leute das mit ihrem Handy scannen können. Aber ich fand es cool, weil es mir zumindestens noch mal, also es hat mir sehr viel Lust gemacht, das irgendwann mal auszuprobieren, wo ich mir schon vorstellen kann, dass jegliche Interaktion over the Wire mit fotorealistischen Avataren schon etwas anderes ist als Video Calls, die wir jetzt gerade machen.
Fand ich cool. Kann ichempfehlen. Einfach nur diesen, es gibt echt einen guten Eindruck.
Spannend, sich das anzuschauen. Ist es auch so, dass du wirklich jegliche Bewegung, also saßen die am Tisch oder haben die dann irgendwie gestanden und gehalten?
Also es ist am Anfang die Introduction ist, wo man lexfriedman sieht mit seinem gesamten Körper und er gibt sozusagen eine Introduction im Metaverse. Dann, wenn sie aber den Podcast machen, dann ist es wie diese Avatare von Facebook oder von Meta sind, die sind ab dem Oberkörper abgestimmt. Man sieht ab und zu mal, dass sie so teilweise ein bisschen ausfädet. Also es ist ein bisschen, also man sieht, ich glaube Arme und in erster Linie geht es Gesicht. Aber trotzdem ist es krass, weil man sieht dann teilweise immer mal die beiden Gesichter von der Seite, wie sie sich miteinander unterhalten. Aber ab und zu mal sieht man halt auch so etwas wie den View von Mark Zuckerberg via Lack Streetman sieht, wo Lack Streetman einen direkt anguckt. Und das ist schon, auch das ist etwas anderes, als wenn ich jetzt mir gerade einen Video Call angucke und mich jemand in seine Kamera da reinschaut. Schon da habe ich erst mal gedacht, oh krass, das ist schon ein anderes Feeling.
Aber die Sache ist ja auch, also auch wenn es jetzt nur diese Wüstenperspektive ist und so bei Schulterhöhe irgendwie abgeschnitten. Das ist ja auch alles, was du brauchst, Video Calls, wie du sie jetzt schon hast, irgendwie ersetzen zu können.
Weil.
Jetzt gerade wenn du mit Leuten sprichst, siehst du auch nicht mehr davon. Und wenn du dir überlegst, na ja, das, was du jetzt von den Leuten siehst, kannst du schon eins zu eins ersetzen. Das ist schon krass. Auch wenn am meisten aus dem Video hängengeblieben ist, zu sehen, wie Mark Zuckerberg versucht bewusst kein Roboter zu sein. Aber ja.
Aber ich finde, ich habe dann während dem Video die ganze Zeit Mark Zuckerberg beobachtet, weil man dann doch sieht, gerade bei Mark Zuckerberg, der wirklich wenig Mimik hat, ist aber dann, die machen es ganz cool, wo sie immer drei Videos von einer Person nebeneinander schneiden. Einmal das Reelle mit der VR-Brille auf, dann ganz links die aus dem Metaverse und in der Mitte so ein bisschen die Darstellung, wie so der Codex, das Mesh und was aus dem Codex direkt rauskommt. Und da sieht man, wenn man echt mit Metaverse vergleicht, dass Mark Zuckerberg im Echten zumindest noch so, er wirkt leicht freundlicher im Echten, weil zumindest ein paar leicht Bewegungenso die Wangenknochen oder bei den Backen. Da kommen noch so ein paar minimalste Bewegungen rüber, die aber im Metaverse dann nicht ganz übersetzt wurden. So, und da habe ich ein paar Mal gedacht, da sind manchmal die Feinheiten, machen einen Unterschied. Aber sie unterhalten sich auch darüber, ob zum Beispiel, das diskutieren sie wohl stark, ob du zum Beispiel Mimik und Gestik in einer gewissen Form einstellbar machen kannst. Also wenn interpretiert wird, du hast also, weil sie haben das Beispiel auch, sie haben das Beispiel auch natürlich darüber unterhalten, dass die beiden mit der wenigsten Mimik weltweit dann das Metaverse präsentieren, wo es Mimik und Gestik geht und wo sie dann auch sagen, na ja, vielleicht ist es aber auch gerade für Leute, dass Mark Zuckerberg sagt, so seine Emotionen werden ihm natürlich nicht immer angesehen, so weil er sagt, ein minimales Lachen, so kleines Lächeln ist schon vielleicht ein anderer Gefühlsausbruch als bei anderen Leuten.
Und wo sie drüber diskutieren, kann man zum Beispiel einstellbar machen, wie stark Emotionen im Metaverse sein sollen. Also soll es wirklich immer eine fotorealistische eins zu eins Abbildung der Realität sein? Oder sollen Emotionen verstärkt werden, dass man sagen kann Okay, pack 50% drauf, sodass ein kleines Lächeln schon ein großes Lachen ist, meine Emotionen stärker zu visualisieren, fand ich auf jeden Fall auch noch mal eine interessante Unterhaltung.
Es geht auch in beide Richtungen. Also ich kann. Irgendwann gibt es dann auch den Slider, wo ich mir den Fabi so einstellen kann, wie ich will.
Und.
Dann also egalIch sag so, was du machst und egal wie du dich irgendwie verhältst, sag ich dir, also mehr als ein kleines Lächeln möchte ich bitte beim Fabi nicht sehen.
Ich kann dir nicht lesen. Mach seine Emotionen stärker, dass ich irgendwie verstehe, was er von mir will. Ja, stimmt. Ich dachte erst, du meinst, wenn du mal ein Deep Fake von mir machst, dann kannst du mich einschränken. Aber so rum, stimmt, so rum könnte es auch gehen. Genau. Aber es ist eine starke Empfehlung auf jeden Fall und ich bin mal gespannt. Schaut es euch mal an. Ich finde, es gibt einen guten Eindruck und mir hat es echt Spaß gemacht, das zu schauen als eher Skeptiker, was das Metaverse angeht. Und zumindest da das zu sehen hat mir zumindest ein bisschen einen Glimms davon gegeben, wie es vielleicht mal sein kann und dadurch kaufe ich es auf jeden Fall ein bisschen mehr, diese Idee.
Ja, werde ich auf jeden Fall nachholen.
Macht das. Ich bin noch nicht komplett. Ich glaube, ich habe die Hälfte gesehen. Es waren schon interessante Unterhaltungen drin. Ist cool. So, Jojo. Jan, vielen Dank. Jan, noch mal schön, dass du da bist. Erste Folge gemeistert. Mal gucken, wie gesagt, wenn PAP dann rauskommt. Vielleicht stellen wir dann noch mal unser Bewerbungsgespräch nach. Ansonsten gebt uns wie immer gerne Feedback an podcast@programmier. Bar oder über einen unserer vielzähligen Social-Media-Kanäle. Danke fürs Zuhören. Wir hören uns nächste Woche wieder. Bis dann.
Ciao.
Ciao. Ciao.