00:00:07.200 --> 00:00:16.960
Hallo und herzlich willkommen zu einem neuen Deep Dive hier in der Programmierbar und ich glaube, wir machen was, was wir so ganz selten bisher gemacht haben.
00:00:17.280 --> 00:00:22.879
Wir sprechen nämlich heute über Dino Desktop und nicht, dass wir selten über Dino sprechen, das ist ganz und gar nicht der Fall.
00:00:22.960 --> 00:00:30.879
Wir sprechen halt häufig über Dino, aber wir widmen uns tatsächlich hier in diesem Deep Dive einem Thema, was vor gar nicht allzu langer Zeit schon mal bei uns in den News war.
00:00:30.960 --> 00:00:36.399
Und zwar haben wir in den News 26, 2026 schon über Dino Desktop gesprochen.
00:00:36.479 --> 00:00:42.960
Damals war es gerade frisch erschienen und wir haben so unsere ersten Eindrücke und Meinungen dazu geteilt.
00:00:43.039 --> 00:00:48.719
Und es ist ja ganz interessant, dass heute man sich vielleicht nochmal im Detail anschauen.
00:00:48.960 --> 00:00:59.920
Und weil ich, der Jan, hier nicht den ganzen Tag nur Dino machen kann und mir Dino Desktop auch nicht so in hundertprozentiger Tiefe anschauen kann, habe ich mir Verstärkung dazu geholt.
00:01:00.000 --> 00:01:03.200
Und wir haben heute den Leo Kettmeier von Dino.
00:01:03.280 --> 00:01:05.680
Also sagt man von Dino oder sagt man von Dino Land?
00:01:05.760 --> 00:01:06.480
Leo, wie sagt ihr das?
00:01:06.799 --> 00:01:08.239
Ja, von Dino, also Dino.
00:01:08.799 --> 00:01:12.079
Also wie es auch überhaupt ausgesprochen wird, das ist auch noch ein ganz anderes Thema.
00:01:13.040 --> 00:01:16.000
Sehr gut, da kommen wir dann bitte direkt gleich dazu.
00:01:17.120 --> 00:01:20.560
Weil das ist auch bei uns manchmal so Stein des Anstoßes hier so, ja.
00:01:20.879 --> 00:01:29.359
Aber dann auf alle Fälle, Leo, herzlich willkommen, schön, dass du bei uns bist, dass du Zeit genommen hast, um einmal über Deno-Dino, wie auch immer, zu sprechen.
00:01:30.319 --> 00:01:44.560
Du bist angestellt bei besagter Firma, aber warst vorher auch schon so Open Source Freiwillig-Contributor und hast dann den Sprung in die Vollzeitstelle quasi dazu geschafft.
00:01:44.799 --> 00:01:46.400
Wie musst du mir das vorstellen?
00:01:46.719 --> 00:01:52.159
Ja, also anderthalb Jahre hatte ich dann Open Source Contribution gemacht.
00:01:52.239 --> 00:01:54.799
Das war einfach zufällig, habe ich Dino gefunden.
00:01:55.599 --> 00:02:02.799
Über einfach eine YouTube Recommendation von dem Talk, so Ten Years, no, Ten Things I Regret About Note.
00:02:04.239 --> 00:02:05.519
Den habt ihr auch gesehen damals?
00:02:05.680 --> 00:02:06.480
Ja, ja, genau.
00:02:06.560 --> 00:02:22.000
Und ja, das hatte ich mir einfach dann mir angeschaut, habe ich ein bisschen recherchiert, bin dann die Community beigetragen, äh, beigetreten und dann wollte ich ein paar Features haben, die einfach nicht gehabt und weil ich irgendwie Discord-Bots machen wollte.
00:02:22.240 --> 00:02:39.199
Weil das ist ja, was man, wenn man ein bisschen JavaScript machen will und nicht viel weiß, das ist irgendwie dann so, dass große Projekte immer das einige machen und das, ja, damals konnte ich sehr wenig JavaScript und TypeScript.
00:02:39.439 --> 00:02:41.280
Fangen wir nicht mal an mit Rust und sowas.
00:02:41.520 --> 00:02:44.719
Da wusste ich nicht mal, dass es, was Rust überhaupt war.
00:02:45.680 --> 00:02:48.240
Und dann, ja, hat sich halt einfach das ein bisschen entwickelt.
00:02:48.319 --> 00:02:51.599
Ich wollte Features haben, habe ich angefangen, ein paar Sachen zu lernen.
00:02:51.759 --> 00:02:52.560
Und ja.
00:02:54.080 --> 00:02:57.599
Du bist uns heute zugeschaltet aus Rotterdam.
00:02:58.400 --> 00:03:01.919
Das ist, wie der Zufall es so will, ja in den Niederlanden.
00:03:02.000 --> 00:03:08.560
Und kleine Notiz am Rand, so Pet Peef von mir ist ja so, wenn Leute immer Holland sagen, wenn sie Niederlande meinen.
00:03:08.639 --> 00:03:10.560
Aber Rotterdam ist wirklich Holland, oder?
00:03:10.800 --> 00:03:12.000
Es ist Südholland.
00:03:12.159 --> 00:03:12.800
Weil Hauptland ist.
00:03:13.599 --> 00:03:15.520
Es gibt Holland zweigeteilt.
00:03:16.400 --> 00:03:22.960
Also offiziell, also wenn ich meine Adresse eingeben muss, muss ich Südholland sagen, weil das einfach eine andere Region ist als Nordholland.
00:03:23.120 --> 00:03:26.240
Und ja, es gibt Holland, aber das ist einfach die zwei zusammengeworfen.
00:03:26.400 --> 00:03:28.719
Offiziell gibt es, sag ich mal, nicht.
00:03:30.000 --> 00:03:34.800
Und du bist ja auch nicht der erste von euch, der hier bei uns ja programmierbar ist.
00:03:34.960 --> 00:03:39.759
Der Luca auch von Denodino war ja auch schon ein paar Mal bei uns.
00:03:39.919 --> 00:03:43.120
Der sitzt ja auch in den Niederlanden, aber das ist jetzt nur ein Zufall.
00:03:43.280 --> 00:03:46.479
Man muss nicht in den Niederlanden sitzen, um für euch zu arbeiten, oder?
00:03:46.800 --> 00:03:47.120
Nee.
00:03:47.360 --> 00:03:55.919
Es ist einfach, ich glaube, außerhalb Amerika ist Niederlanden, wo wir einfach am meisten Leute jemals hatten.
00:03:56.080 --> 00:03:57.840
Das ist einfach ein pures Zufall.
00:03:58.080 --> 00:03:58.800
Purer Zufall.
00:03:58.879 --> 00:04:00.879
Oder da tummeln sich vielleicht einfach die richtigen Leute.
00:04:00.960 --> 00:04:02.800
Also vielleicht ist das ja auch so ein Thema.
00:04:04.159 --> 00:04:18.879
Aber ich habe auch gesehen, du sitzt nicht nur in Rotterdam, du sitzt auch in den TC39 und 55 für Dino und werkelst da quasi vollkommen übergreifend auch noch an der Zukunft von JavaScript-Respektive TypeScript mit.
00:04:19.120 --> 00:04:19.279
Genau.
00:04:19.600 --> 00:04:21.199
Das ist ja auch ganz abgefallen.
00:04:21.439 --> 00:04:27.120
Ja, ja, das ist, da bin ich eigentlich erst seit Neuerns dabei.
00:04:27.279 --> 00:04:30.560
Das war dieses Jahr das erste Meeting, das ich dabei war.
00:04:30.879 --> 00:04:38.000
Und daher, dass dann Luca ja von Deno weggegangen ist, mussten wir jemanden haben, der das übernimmt.
00:04:38.160 --> 00:04:43.920
Und daher, dass ich schon ein bisschen Involvement mit Standards hatte über Deno, habe ich dann das einfach übernommen.
00:04:44.000 --> 00:04:47.920
Und das, jo, da kann man schon interessante Sachen lernen und machen.
00:04:48.319 --> 00:04:49.519
Das finde ich immer cool.
00:04:49.600 --> 00:04:55.279
Also, wir hatten vor kurzem auch ein Deep Dive gemacht mit jemandem vom W3C so, ja.
00:04:55.519 --> 00:05:02.079
Und da quasi zu sehen, dass, also ohne da jetzt irgendjemandem zu nahe zu reden, ne, aber das sind auch ganz normale Menschen.
00:05:02.160 --> 00:05:02.639
So, ja.
00:05:02.959 --> 00:05:07.920
Man denkt ja immer, das sind so alte, weise Männer mit langen Rauschenbären, also den langen Bart hast du schon, ja.
00:05:08.000 --> 00:05:12.399
Also das bringst du vielleicht mit, der ist noch nicht ganz so weiß, wie man sich das dann vielleicht klischeemäßig vorstellt.
00:05:12.639 --> 00:05:14.000
Aber es ist halt nicht so, oder?
00:05:14.240 --> 00:05:24.879
Es sind Leute, ich sag mal so wie du und ich, aus der Praxis, die dann da irgendwie einfach zusammensitzen und mit, ich sag mal, bestem Wissen und Gehwissen irgendwie daran arbeiten, wie das halt so weitergehen könnte.
00:05:25.040 --> 00:05:28.639
Und das da mal so ein kleines Spotlight irgendwie drauf finde ich eigentlich auch ganz cool.
00:05:28.959 --> 00:05:34.240
Ja, ne, und also die Standards-Bodies, da lernt man, da trifft man Leute natürlich auch.
00:05:34.959 --> 00:05:38.160
Man kann zur Sprache Sachen hinzufügen, aber man muss nicht sein.
00:05:38.399 --> 00:05:46.560
Ich kenne einige, die einfach dort sind, aber zum Zuhören oder einfach um Ideen zu verbreiten, dass man vielleicht ein bisschen etwas machen könnte.
00:05:46.720 --> 00:05:48.480
Aber da sind sehr viele verschiedene Firmen.
00:05:48.639 --> 00:05:50.800
Man muss jetzt nicht irgendwie eine Riesenfirma sein.
00:05:50.879 --> 00:05:55.040
Da kannst du auch ein kleines Unternehmen mit fünf Leuten sind dabei.
00:05:55.199 --> 00:05:56.800
Also alles Mögliche.
00:05:58.000 --> 00:05:58.639
Nice.
00:05:59.519 --> 00:06:04.319
Bevor wir gleich ans Eingemachte gehen, lass uns doch ganz kurz über die Deno-Dino-Diskussion sprechen.
00:06:06.399 --> 00:06:08.720
Also, wie sagst du es denn?
00:06:10.000 --> 00:06:11.839
Es kommt mir sehr zufällig raus.
00:06:11.920 --> 00:06:28.480
Also, ob es Deno oder Dino ist, das spriche ich immer ein bisschen anders aus, wie Lust und Laune ist, aber ich habe gerade eben hier unsere Docs, unsere Docs-Website aufgerufen und weil da haben wir es aufgeschrieben, wie man es aussprechen soll.
00:06:28.560 --> 00:06:29.759
Und das ist ein Dino.
00:06:30.959 --> 00:06:33.360
Okay, so habe ich mir das auch irgendwie immer gedacht.
00:06:33.439 --> 00:06:36.000
Ich habe auch ganz lange mit Dino gesagt, so, ja.
00:06:36.160 --> 00:06:43.759
Aber nachdem ja euer Logo auch so ein Dino ist, ja, muss man muss man, glaube ich, dann auch einfach Dino sagen.
00:06:44.000 --> 00:06:52.160
Vielleicht in 30 Sekunden für alle da draußen, die noch nichts mit Dino zu tun hatten, wie würdest du Dino beschreiben?
00:06:52.240 --> 00:06:53.199
Was ist Dino?
00:06:53.519 --> 00:07:04.160
Dino ist eine Alternative zu Node.js, so aber ein bisschen verbessert, sag ich mal, also nicht vielleicht verbessern, aber einfach moderner.
00:07:04.480 --> 00:07:12.240
Ein paar modernere Ideen reinbringt in der Runtimes, aber auch einfach ein All-in-One-Iclusive Toolkit.
00:07:12.399 --> 00:07:30.079
Also du bekommst einfach Linterformatter, Bundling, Desktop-Apps, Doc Generation, also sehr viele verschiedene extra Features, die einfach nicht nur die Runtime selbst sind, sondern einfach Sachen herum und auch TypeScript out of the box.
00:07:30.319 --> 00:07:38.399
Aber auch eines der wichtigen Sachen für uns ist, wie gesagt, Standards und deswegen folgen wir auch sehr viel die Browser-Standards.
00:07:38.560 --> 00:07:43.199
Das heißt, also, wenn du ein Websocket machen willst, benutze nicht irgendwie unsere WebSocket API.
00:07:43.279 --> 00:07:49.839
Nee, du benutzt einfach die Browser WebSocket API und die ist genau implementiert wie in einem Browsern.
00:07:50.000 --> 00:07:59.040
Also du kannst einfach dein Knowledge von Browser-Usage einfach wieder weiter benutzen in Dino.
00:07:59.839 --> 00:08:03.120
Ich muss sagen, das war auch das, was mich damals da so ein bisschen hingezogen hat.
00:08:03.199 --> 00:08:29.519
Zum einen als jemand, der zu dem damaligen Zeitpunkt zumindest nicht hauptsächlich mit TypeScript gearbeitet hat, zu sagen, okay, es gibt hier eine Runtime, die dir im Prinzip diese ganze Transpellation und Linter und was du halt irgendwie so alles brauchst, um aus so, so wie man halt früher TypeScript erstmal zu JavaScript komplett hat und dann das irgendwie ausgeführt hat, so das alles nicht mehr machen zu müssen, und sich damit auch überhaupt gar nicht auseinandersetzen zu müssen.
00:08:29.680 --> 00:08:31.920
Das war natürlich cool und einfach für mich.
00:08:32.639 --> 00:08:55.840
Und dann, wie du halt sagst, halt nicht irgendwelche proprietären Custom APIs irgendwie lernen zu müssen, sondern zumindest so, wenn man halt eine API lernen muss, also natürlich muss man immer noch lernen, wie irgendwie ein Websocket funktioniert, aber du lernst halt den Standard so und du lernst es so, wie du es danach auch genau im Browser machen kannst und hoffentlich ja dann auch irgendwie in anderen Runtimes, die sich halt auch an diesem Standard orientieren, halt auch machen kannst.
00:08:55.919 --> 00:09:01.279
Das heißt, das Wissen, was du aufbaust, bleibt halt so ein bisschen portabler gefühlt.
00:09:02.320 --> 00:09:11.919
Wie gut das in der Praxis dann immer klappt, kann man nochmal diskutieren, aber zumindest der Ansatz ist ja irgendwie lobenswert und es fühlt sich dann einfach so ein bisschen besser an, wenn man da Arbeit reinsteckt.
00:09:12.320 --> 00:09:14.639
Also mein Ersteindruck.
00:09:15.200 --> 00:09:16.399
Stefan ja auch damals.
00:09:16.879 --> 00:09:28.240
Also, wenn ich erst angefangen hatte und Deno gesehen habe, fand ich das einfach, was mich auch da richtig reingebracht hat in Deno, dass ich das so haben will, dass ich einfach mein Wissen weiter nutzen kann.
00:09:30.000 --> 00:09:37.600
Wir haben, wie gesagt, in den News schon einmal über Dino Desktop gesprochen, so eure, ich sag mal, Alternative zu Elektron vereinfacht.
00:09:38.320 --> 00:10:04.720
Wenn man sich anguckt, was Dino noch irgendwie gerade alles macht, alles kann, alles ist, da gibt es zum einen Dino die Runtime, es gibt irgendwie JSR, was eure Package Registry ist, es gibt Fresh, das Webframework, es gibt Dino Deploy als Infrastrukturangebot, es gibt Dino Desktop als irgendwie Rapper für Desktop-Apps und es gibt dann noch so ganz an der Seite irgendwie Cloud Patrol, über das wir auch mal irgendwann, glaube ich, in den News gesprochen haben.
00:10:05.360 --> 00:10:12.320
Und ich schaue da ehrlicherweise so ein bisschen drauf und ich frage mich dann so, was ist eigentlich gerade so euer Fokus?
00:10:12.480 --> 00:10:22.320
So, ja, weil am Anfang war die Story, glaube ich, noch eine sehr einfache, wie du sagst hast, ne, was haben wir irgendwie aus Node gelernt und wie kann man irgendwie eine elegantere Runtime vielleicht auch bauen?
00:10:22.799 --> 00:10:27.200
Und mittlerweile gibt es Webframeworks und Infrastruktur und Desktop-Rapper und die Registry.
00:10:28.080 --> 00:10:32.080
Was ist so die überragende Mission da oben drüber?
00:10:32.480 --> 00:10:36.559
Also Deno, ich würde sagen, ist keine JavaScript-Firma.
00:10:36.799 --> 00:10:38.799
Deno ist eine Tooling-Firma.
00:10:39.039 --> 00:10:41.600
Was wir machen, ist Tooling für Entwickler.
00:10:41.840 --> 00:10:45.440
Deswegen, also am Anfang natürlich, hat es mit JavaScript angefangen.
00:10:46.320 --> 00:11:02.480
Aber es hat sich einfach ein bisschen verbreitet, weil also jetzt zum Beispiel auch mit AI haben wir dann halt ja Claw Patrol, weil wir das einfach intern brauchten für ein paar Sachen und einfach sehr hilfreich war und haben wir entschieden, dass wir das einfach dann richtig als ein richtiges Projekt freigeben.
00:11:02.639 --> 00:11:10.559
Also sehr viele Sachen, die am Ende wir einfach selber benutzen wollen und brauchen, machen wir dann einfach öffentlich.
00:11:10.799 --> 00:11:13.279
Weil, warum für uns selbst alles zu behalten?
00:11:13.440 --> 00:11:14.559
Bringt ja nichts.
00:11:15.600 --> 00:11:15.919
Okay.
00:11:17.519 --> 00:11:19.919
Fair und lobenswert vielleicht.
00:11:22.399 --> 00:11:28.080
Ich habe eben schon gesagt, so kurz gefasst ist Dino Desktop irgendwie eure Alternative zu Elektron.
00:11:28.639 --> 00:11:31.759
Jetzt gibt es ja schon Alternativen zu Elektron, ja.
00:11:31.840 --> 00:11:35.840
Und manche, die auch gar nicht so unähnlich sind zu dem, was ihr mit Dino Desktop macht.
00:11:35.919 --> 00:11:45.279
Und bevor wir da jetzt in die Details reingehen, vielleicht einmal so neben Elektron, Taure, Elektrobannen und was das so alles da draußen irgendwie gibt.
00:11:46.240 --> 00:11:50.399
Wieso habt ihr auf diesen Markt geguckt und gesagt, so, da fehlt noch eine Lösung?
00:11:50.480 --> 00:11:58.080
Also, man hätte ja auch sagen können, da gibt es schon sehr viel, da ist irgendwie vielleicht wenig Potenzial zur Ausdifferenzierung irgendwie da.
00:11:58.639 --> 00:12:04.159
Was mal so ausschlaggebend für euch um sagen, so, nee, da braucht es auch noch unsere Lösung.
00:12:05.679 --> 00:12:18.000
Gute Frage, also es hat sich, es ist ein Projekt, was ich seit sagen wir mal jetzt vier Jahren ungefähr her, ja, das ich immer wollte.
00:12:18.080 --> 00:12:31.200
Also ich wollte eine Möglichkeit, um Desktop-Apps zu machen und ich fand Elektron, sagen wir mal, zum Kotzen, weil es einfach, ja, wenn man es benutzt, fand ich immer ein bisschen kompliziert.
00:12:31.440 --> 00:12:37.759
Ein bisschen zu viele Konzepte und alles, muss man ein bisschen alles so viel Verschiedenes lernen.
00:12:37.919 --> 00:12:47.919
Und dann war einfach auch der Fall, dass mit Deno kann man Elektron nicht benutzen, weil Elektron, sagen wir mal, ziemlich ein Fork ist von Node.js.
00:12:48.159 --> 00:12:50.960
Also es bundelt sein eigenes, äh, sein eigenes Runtime.
00:12:51.039 --> 00:12:54.159
Da kann man dann nicht irgendwie einfach Deno einfach ersetzen.
00:12:54.799 --> 00:12:58.399
Deswegen brauchten wir einfach eine andere Lösung.
00:13:02.559 --> 00:13:10.320
Und vielleicht auch da, bevor wir über die Details sprechen, was ist so euer Elevator-Pitch für Dino-Desktop?
00:13:10.399 --> 00:13:12.639
Was ist das Alleinstellungsmerkmal?
00:13:13.600 --> 00:13:20.480
Also, das ist kompliziert, weil einfach wir sehr viele verschiedene Sachen machen damit.
00:13:20.799 --> 00:13:27.039
Aber die Idee ist einfach, wie alles bei Deno, alles einfacher machen für Entwickler.
00:13:27.200 --> 00:13:31.840
Man muss nicht irgendwie alles irgendwie konfigurieren, machen, bla bla bla.
00:13:32.080 --> 00:13:43.840
Nee, du kannst einfach Dino-Desktop, wenn du zum Beispiel sagen wir mal, du hast eine Webseite mit irgendwie Next.js, kannst einfach nur einen Dino-Desktop exekutieren in der Command-Line und das gibt dir einfach eine Desktop-App.
00:13:44.000 --> 00:13:46.320
Muss keine Code-Änderungen machen überhaupt.
00:13:46.399 --> 00:13:50.399
Also es ist, würde ich sagen, einfach, wie einfach es ist zu nutzen.
00:13:51.519 --> 00:13:56.240
Und als Runtime selbstverständlich dann quasi Dino zur Laufzeit, ja.
00:13:56.639 --> 00:13:59.440
Was nutzt ihr da im Rendering?
00:14:00.559 --> 00:14:06.879
Also, das ist halt das Interessante, wo wir uns etwas ändern von den anderen Lösungen.
00:14:06.960 --> 00:14:11.519
Und das ist, dass du entscheiden kannst, was du willst zum Rendern.
00:14:12.559 --> 00:14:15.759
Bei Default ist es, glaube ich, halt die System WebView.
00:14:15.919 --> 00:14:24.159
Das macht einfach, dass dann die Binary relativ klein sein wird von der Desktop-Welt-App, weil es einfach dann das benutzt, was auf dem System ist.
00:14:25.039 --> 00:14:29.679
Aber dann gibt es auch Ceph, was Chrome-Embedded-Framework ist.
00:14:29.759 --> 00:14:34.159
Also das heißt Chromium ziemlich ähnlich wie Elektron es macht.
00:14:34.240 --> 00:14:42.879
Und das macht halt natürlich, dass alles ein bisschen größer sein wird von Binary Size, aber dafür bekommst du ganz Chromium, sage ich mal, dabei.
00:14:42.960 --> 00:14:52.559
Also du kannst alles die ganzen APIs, die vielleicht nur bei Chrome sind oder einfach, dass es Consistent Rendering über die anderen verschiedenen Operating Systems ist.
00:14:52.960 --> 00:15:17.519
Und ja, das ist halt, musst du sehen, was du am besten brauchst und willst, ob dir Binary Size wirklich wichtig ist oder Consistency wichtig ist, aber wenn du zum Beispiel in der Firma bist und ihr habt alle nur Macs und ihr braucht eine interne App, da würde wahrscheinlich einfach dann nur die WebView reichen, weil da weißt du, dass du nicht irgendwie bei Linux dann bist und dann funktioniert die Hälfte nicht.
00:15:19.039 --> 00:15:26.399
Aus der praktischen Erfahrung kommt, was ist für die meisten Leute eher das ausschlaggebende Argument, vielleicht doch auf Chromium zu setzen?
00:15:26.480 --> 00:15:32.799
Ist es eben genau diese Consistency, weil sie sagen, okay, ich liefere hier mein Chromium mit und damit weiß ich ganz genau, wie das überall aussieht.
00:15:32.879 --> 00:15:42.240
Und auch wenn jetzt so Sachen wie, ich sag mal, Fontrendering, Kernning so ein bisschen unterschiedlicher noch sind von Betriebssystem zu Betriebssystem, so die groben Features sind zumindest irgendwie gleich, ja.
00:15:42.480 --> 00:15:54.960
Oder ist es tatsächlich eher dieses, boah, ich brauche hier APIs, die es halt gerade nur in Chromium gibt und mein, weiß nicht, macOS, WebKit, Safari-Ding tut es halt hier irgendwie einfach nicht.
00:15:55.759 --> 00:16:06.799
Also ich würde schon sagen, es ist hauptsächlich Consistency und einfach, weil Leute sehr damit halt Chromium hat ja was, was sagen wir mal, 90, 96 Prozent Market Share.
00:16:07.039 --> 00:16:09.519
Einfach das ist, was Leute sich damit wohlfühlen.
00:16:09.759 --> 00:16:12.399
Und ja, es gibt halt ein paar APIs.
00:16:12.720 --> 00:16:17.360
Chrome fügt schon ein bisschen mehr und schneller hinzu als die anderen Browsern.
00:16:17.440 --> 00:16:19.600
Aber die anderen Browser machen auch keine schlechte Arbeit.
00:16:19.840 --> 00:16:22.480
Ein paar haben vielleicht auch sogar APIs, die Chromium noch nicht hat.
00:16:22.720 --> 00:16:27.360
Also das ist schon, würde ich sagen, Consistency ist the key.
00:16:27.519 --> 00:16:39.519
Weil ja, bei den anderen Browsern auch, man könnte auch, sag ich mal, Firefox-based Backend haben für Dino-Desktop, könnte man theoretischerweise implementieren.
00:16:39.840 --> 00:16:45.600
Aber bringt, sag ich mal, nicht allzu viel, weil einfach Leute Chromium wollen.
00:16:47.120 --> 00:16:54.240
Okay, jetzt hast du eben schon gesagt, dass so Dino-Desktop das ist, was du schon seit vier Jahren eigentlich haben willst.
00:16:54.639 --> 00:16:56.960
Wie sah denn dieser Schaffensprozess aus?
00:16:57.039 --> 00:17:08.400
Weil ich nehme mal jetzt nicht an, dass irgendwie zwei Wochen vor dem 2.9-Release jemand eingefallen ist, so dieses Desktop-Ding, das sollten wir vielleicht mal bauen, lass uns noch kurz ein paar Nächte um die Ohren schlagen und dann schippen wir das noch schnell mit.
00:17:08.559 --> 00:17:16.720
Und dann wird ja vielleicht so ein bisschen mehr Konzeptionsarbeit und Planung und die ein oder andere Diskussion irgendwie noch eingeflossen sein.
00:17:16.880 --> 00:17:22.559
Nimm uns da doch mal mit, so auf eine kleine Zeitreise, so, wie hat sich Dino Desktop entwickelt?
00:17:23.039 --> 00:17:36.400
Ja, also wie gesagt, es hat vor vier Jahren aus eine Idee angefangen, haben wir dann leider nie gemacht, weil einfach es ein sehr komplexes System wäre und wir keine richtige Lösung gefunden hatten, wie wir das machen könnten.
00:17:36.640 --> 00:17:53.200
Und das hat da aber auch alles angefangen, wann ich mit ein paar Leuten von Taure getroffen habe und wir dann ein bisschen zusammen konzentisiert haben für eine Lösung für Dino Desktop und Taure, sagen wir mal, auszunutzen zu können damit.
00:17:53.920 --> 00:17:55.519
Aber das wurde dann einfach nichts.
00:17:55.599 --> 00:18:06.079
Einfach wie gesagt, wir hatten die Infrastruktur, dass wir das bauen können und dass wir das auch so machen wollen, wie wir es haben wollen, ging es halt leider nicht.
00:18:06.400 --> 00:18:13.680
Und dann, ja, hatten wir das, sag ich mal, immer versucht, so einmal im Jahr wieder als Projekt kurz für eine Woche vielleicht, hey, können wir das doch bauen?
00:18:13.839 --> 00:18:15.680
Haben wir nie dann eine gute Lösung gefunden.
00:18:15.839 --> 00:18:18.160
Bis zu, naja, diesem Jahr.
00:18:18.319 --> 00:18:26.000
Da hatten wir dann endlich, hat mein Kollege DeW hat ja eine gute Lösung gefunden, wie wir das am besten bauen können.
00:18:26.640 --> 00:18:37.920
Dass wir einfach auch das größte Problem ist bei Desktop-Apps ist, dass normalerweise brauchst du, dass der Renderer das Hauptprozess ist.
00:18:38.240 --> 00:18:43.119
Es kann nicht sein, dass ein Dino das Hauptprozess ist, weil das macht alles Mögliche ein Problem.
00:18:43.519 --> 00:18:46.400
Da gehen meiste APIs zum Beispiel auf dem Mac dann nicht.
00:18:46.559 --> 00:18:52.079
Du kannst irgendwie nicht mal eine Window, glaube ich, kreieren, wenn du nicht das Hauptprozess bist.
00:18:52.720 --> 00:18:53.359
Ah, okay.
00:18:53.839 --> 00:18:55.200
Ja, das macht es einfach.
00:18:55.279 --> 00:18:57.759
Deswegen ist es nicht so eine einfache Sache.
00:18:58.000 --> 00:19:02.640
Aber da haben wir halt Lösungen dann gefunden und da haben wir dann angefangen zu bauen.
00:19:03.039 --> 00:19:07.759
Und ja, das war schon ein paar Monate.
00:19:08.000 --> 00:19:15.440
Dann, während wir angefangen haben, kamen dann auch Elektrobonnen raus, also dass das angesagt wurde.
00:19:15.839 --> 00:19:18.799
Und es hat schon ein paar Sachen ähnelt sich ab.
00:19:18.880 --> 00:19:22.640
Wir haben ein paar Sachen dann am Ende auch etwas, sag ich mal, abgeschaut von Elektrobannen.
00:19:22.799 --> 00:19:30.640
Wir haben natürlich auch Sachen von Elektron, von Tauri, haben wir ein bisschen kopiert, weil einfach, die haben nicht schlechte Konzepte am Ende des Tages.
00:19:30.720 --> 00:19:33.920
Die sind ja gute Projekte, sonst wären die ja nicht so beliebt.
00:19:34.160 --> 00:19:38.880
Aber ja, da haben wir ein bisschen und auch das ein bisschen das Dino draufgespringelt.
00:19:39.039 --> 00:19:45.200
Einfach, dass wir selber unseren eigenen Flair, den Dino-Flair, hinzufügen.
00:19:47.119 --> 00:19:50.720
Okay, was ist denn der Dino-Flair an Dino-Desktop?
00:19:51.119 --> 00:19:53.279
Wo merke ich den denn in der Verwendung?
00:19:53.839 --> 00:19:57.359
Ja, ich würde, wie gesagt, sagen, einfach, wie einfach es ist zu nutzen.
00:19:57.599 --> 00:20:05.200
Also es ist einfach echt, es ist sehr einfach, APIs sehr übersichtlich, würde ich sagen.
00:20:05.359 --> 00:20:15.119
Also ein paar Sachen sind halt kompliziert, weil am Ende des Tages brauchst du immer noch eine Desktop-App und leider ist das ganze System mit Desktop-Apps halt leider relativ kompliziert.
00:20:15.440 --> 00:20:21.599
Aber APIs haben wir versucht, so ähnlich wie möglich zu Browser-APIs zu nachmachen.
00:20:21.680 --> 00:20:30.960
Also Events, die du aus dem Browser kennst, wie Mouse-Move und Klick und sowas, ist alles, sagen wir mal, eins zu eins gemappt.
00:20:31.599 --> 00:20:38.319
Und das ist einfach, dass Leute, mit was die schon kennen, einfach das ausbauen können.
00:20:39.119 --> 00:20:49.039
Und ja, halt Ease of Views und sagen wir mal, modernere Konzepte und Ideen, wie man ein paar Sachen machen kann.
00:20:50.160 --> 00:21:02.799
Wenn ich jetzt mit Dino Desktop meine erste eigene App bauen will, dann brauche ich da wahrscheinlich nicht viel mehr als einen TypeScript-File und das macht im Zweifelsfall auch erstmal nicht mehr, als irgendwie ein Window zu öffnen und was deines irgendwie reinzumalen.
00:21:03.039 --> 00:21:05.680
So mein kleiner Hello World-Case, ja.
00:21:06.000 --> 00:21:10.880
Und dann sage ich einfach, hey, Dino Desktop, hier ist mein Main.
00:21:11.039 --> 00:21:11.920
TS, Intro.
00:21:13.440 --> 00:21:14.319
Hier ist das File.
00:21:15.200 --> 00:21:18.160
Da kannst du alle anderen von da aus finden und zusammenschrauben.
00:21:18.240 --> 00:21:20.799
Und dann fällt so ein Binary raus und das kann ich aufmachen.
00:21:21.279 --> 00:21:24.559
Was tut denn aber Dino Desktop, um dieses Binary zu bauen?
00:21:24.720 --> 00:21:27.200
Also wenn ich hier tippe Dino Desktop Main.
00:21:33.119 --> 00:21:43.839
Also, Dino Desktop funktioniert, das ist einfach, wir haben Pre-Build-Binaries auf dem Bucket irgendwo und das muss es halt das runterladen.
00:21:44.079 --> 00:21:53.599
Diese Binaries sind etwas unterschiedlich von der Haupt-Dino-Binary, die du benutzt, wenn du einfach Dino benutzt.
00:21:53.759 --> 00:21:59.680
Also das ist, sag ich mal, hat die Subcommands nicht, hat einfach ein paar Sachen weggenommen, aber dafür hat es auch.
00:22:00.480 --> 00:22:02.559
Binaries, dann sind das die Runtime-Binaries, ja?
00:22:02.720 --> 00:22:03.119
Genau.
00:22:03.839 --> 00:22:04.160
Okay.
00:22:04.720 --> 00:22:13.440
Und ja, dafür hat aber diese spezielle Binary, die runterlädt, halt die ganzen Dino-Desktop APIs und die ganzen Features dazu.
00:22:13.519 --> 00:22:23.039
Weil wir wollen nicht, dass Dino selbst auch irgendwie Dino-Desktop APIs selbst hat.
00:22:23.119 --> 00:22:30.160
Wir wollen, also für uns Deno ist immer ein Headless Runtime.
00:22:30.319 --> 00:22:35.200
Also alles, was du machst mit Dino, muss auf ein Headless-System funktionieren.
00:22:35.359 --> 00:22:37.920
Und das natürlich funktioniert nicht mit Desktop.
00:22:38.000 --> 00:22:40.880
Das ist ein ziemlich Konflikt.
00:22:41.039 --> 00:22:45.759
Deswegen kriegst du eine separate Binary, die einfach nur die APIs hat.
00:22:45.839 --> 00:23:01.039
Und das lädt hier runter und dann bandelt es deine App zusammen, also deine ganzen Typefit-Files, deine Assets und sowas, das wird alles zusammengebundelt und dann am Ende dieser Binary einfach zugeworfen, sage ich mal so.
00:23:01.200 --> 00:23:06.000
Das ist einfach, wir haben so einen Magic Header am Ende von der Dino-Binary.
00:23:06.160 --> 00:23:27.839
Wenn es sieht, dass es irgendwo dieser Header dann doch da ist und Code danach, also irgendwie unserem Format, sieht, dass dann noch weitere Dateien noch weitere Bytes danach sind, dann benutzt es diese alle Bytes nach diesem Magic-Header und benutzt das, um Dino zu exekutieren.
00:23:28.480 --> 00:23:44.799
Das heißt, der Buildprozess sozusagen ist nichts anderes, als dieses spezielle Runtime-Binary zu nehmen und meine zusammengepackte Anwendung quasi hintendran an dieses Binary zu schreiben, sodass es quasi eine konkettete Datei sozusagen wird.
00:23:45.119 --> 00:23:45.839
Genau.
00:23:46.160 --> 00:23:48.480
So funktioniert auch Dino-Compile.
00:23:48.559 --> 00:23:53.039
Also wir haben sehr viel Infrastruktur damit einfach wieder benutzt.
00:23:55.599 --> 00:23:55.920
Okay.
00:23:57.359 --> 00:24:08.000
Und also wahrscheinlich den Anwendungsgrafen da zusammenzubauen, das ist ja eh was, was ihr schon könnt, weil das brauchst du ja eh, um einen ganz normalen Dino-Prozess irgendwie schon zu starten.
00:24:08.240 --> 00:24:16.079
Passiert da noch irgendwas anderes Spezifisches im Sinne von, weiß nicht, muss das komprimiert werden, muss das signiert werden?
00:24:16.240 --> 00:24:22.559
Passiert also irgendwas, was es von einem normalen, ich sag mal, Dino-Server-Prozess unterscheidet?
00:24:23.359 --> 00:24:28.559
Ja, also komprimiert ist eine Option, da gibt es eine Flag, das Compress.
00:24:30.640 --> 00:24:47.119
Dann gibt es Signing, das ist halt mit Desktop-Apps, du willst halt natürlich deine App signiert haben, damit die auf einen App Store gehen kann oder einfach nicht, dass dann irgendwie, wenn du auf Mac bist, der sagt, hey, diese App kenne ich nicht, die will ich nicht öffnen.
00:24:47.440 --> 00:24:58.400
Also ja, es sind noch ein paar extra Sachen, die noch möglich sind für Users, aber im Normalfall, also wenn du nichts weiteres machst, einfach nur Dino-Desktop, nee, da machst einfach nur das einfach.
00:25:00.960 --> 00:25:07.839
Und ganz blöd gefragt, muss meine Dino Desktop-App ein GUI mitbringen?
00:25:08.480 --> 00:25:17.680
Weil ich könnte, also der Bildprozess, wie du ihn gerade beschrieben hast, den könnte ich ja auch analog zu Dino Compile quasi nutzen, um jetzt nur CLI-Tools zum Beispiel zu bauen.
00:25:18.160 --> 00:25:24.400
Oder ist es quasi schon so, dass da auf Biegen und Brechen irgendwo erwartet wird, okay, du musst jetzt hier mal ein Fenster zeichnen, sonst ist irgendwas schiefgelaufen.
00:25:24.640 --> 00:25:26.240
Ja, das ist schon der Fall.
00:25:26.319 --> 00:25:28.559
Also muss eigentlich nicht genau sein Fenster.
00:25:28.799 --> 00:25:32.960
Du kannst auch zum Beispiel nur ein Tray-Icon haben, also da im Tray.
00:25:33.279 --> 00:25:35.440
Oder einfach ein Dock-Icon.
00:25:35.680 --> 00:25:41.119
Also es muss schon irgendetwas geben, weil sonst geht das System dann, hä, was ist denn hier denn los?
00:25:41.279 --> 00:25:46.559
Weil, ja, dann solltest du echt Dino Compile selbst nutzen und nicht Dino Desktop.
00:25:46.640 --> 00:25:48.400
Das ist dann ein bisschen.
00:25:52.160 --> 00:25:53.680
Okay, ähm.
00:25:56.559 --> 00:25:56.880
Wie?
00:25:58.720 --> 00:25:59.519
Oder andersrum.
00:25:59.680 --> 00:26:02.079
Du hast am Anfang gesagt, ihr seid eine Tooling Company.
00:26:02.720 --> 00:26:02.960
Ja.
00:26:04.880 --> 00:26:10.960
Ihr baut das, was ihr glaubt, was die Leute daraus brauchen, oder vielleicht auch das, was ihr selber braucht und stellt es dann den anderen zur Verfügung.
00:26:11.359 --> 00:26:14.480
Welchen Use Case hast du denn selbst mit Dino Desktop bedient?
00:26:14.640 --> 00:26:18.160
Also, du hast ja gesagt, du wolltest es haben, als es dann da war.
00:26:18.319 --> 00:26:21.440
Was war das, was du mit Dino Desktop gebaut hast?
00:26:22.559 --> 00:26:24.799
Um ehrlich zu sagen, gar nichts.
00:26:25.279 --> 00:26:28.000
Es war einfach, also ich will eine Möglichkeit haben, dass du Leute.
00:26:29.279 --> 00:26:29.920
Genau.
00:26:30.240 --> 00:26:38.640
Nee, und wir haben in der Community über die Jahre immer gesehen, es gab sehr viele Leute, die sehr enthusiastisch drauf waren, eine Möglichkeit für Desktop-Apps zu haben.
00:26:39.599 --> 00:26:45.200
Leute haben versucht, extern einfach eine Möglichkeit zu haben, für Desktop-Apps zu bauen.
00:26:45.279 --> 00:26:51.599
Da gab es irgendwie drei große Projekte, die das versucht haben und gemacht haben.
00:26:51.839 --> 00:26:57.039
Ist halt natürlich aber nicht dasselbe, als wenn das richtig in der Runtime integriert ist.
00:26:57.279 --> 00:27:00.240
Und ich fand es einfach ein interessantes Problem.
00:27:00.559 --> 00:27:06.640
Ich damals vor vier Jahren war ich schon ein bisschen Elektron-Apps am Bauen, aber heutzutage dann doch nicht mehr.
00:27:06.880 --> 00:27:10.400
Und jetzt habe ich keine Zeit, um irgendeine App zu bauen.
00:27:10.559 --> 00:27:14.559
Ich habe ja nur Zeit, das System um die App zu bauen, zu bauen.
00:27:15.759 --> 00:27:17.279
Na gut, Arbeitsteilung, ne?
00:27:17.359 --> 00:27:19.920
Irgendjemand anderes musste halt die App bauen.
00:27:21.039 --> 00:27:25.359
Wir nehmen diese Folge Mitte, Ende August auf.
00:27:25.680 --> 00:27:32.880
Die Dino-Version 2.9, das ist noch der aktuellste Release, das ist auch der Release, mit dem Dino Desktop quasi erstmalig erschienen ist.
00:27:33.119 --> 00:27:34.720
Das kann, bis die Folge raus ist.
00:27:34.799 --> 00:27:51.359
Ich sag mal, die kommt so Ende September, Mitte Oktober, da kann vielleicht schon eine neue Dino-Version da sein, aber unabhängig davon, in den Release-Notes zu 2.9 steht, Dino Desktop ist experimental, the Surface Described here is stabilizing and some features are still landing.
00:27:51.759 --> 00:27:55.440
Was ist denn der aktuelle Zustand von Dino Desktop?
00:27:55.839 --> 00:27:58.720
Was fehlt vielleicht noch komplett?
00:27:59.039 --> 00:28:01.440
Was könnte sich vielleicht nochmal ändern?
00:28:01.519 --> 00:28:02.720
Was ist noch so ein bisschen im Flux?
00:28:02.880 --> 00:28:04.400
Wo fühlt ihr euch schon gut mit?
00:28:04.640 --> 00:28:05.680
Wie sieht es aus?
00:28:06.559 --> 00:28:12.720
Also, wir bekommen relativ viel noch Issues von Leuten, die einfach das System noch ausprobieren.
00:28:12.799 --> 00:28:15.920
Es kommen immer wieder ein paar Bugs und dort.
00:28:16.880 --> 00:28:26.960
Richtig, Features, die fehlen, muss ich sagen, fällt mir jetzt nichts ein, außer wenn ich jetzt durch unseren Issue-Tracker gehe und da vielleicht ein paar Sachen rausfinde.
00:28:27.200 --> 00:28:32.880
Aber generell würde ich sagen, das System ist halt gebaut, es funktioniert.
00:28:33.200 --> 00:28:41.039
Es ist vielleicht, was einfach fehlt, ist einfach halt ein bisschen Refinement und ein paar Sachen einfach, ja, ich würde sagen, eigentlich hauptsächlich die Bugfixes.
00:28:41.440 --> 00:28:42.640
Das ist schon das Größte.
00:28:42.799 --> 00:28:49.519
Es gibt halt ein paar Kleinigkeiten hier und dort, die ich gerne hätte, aber das sind dann auch vielleicht ein paar Sachen, die mehr Long-Term sind.
00:28:49.599 --> 00:28:57.680
Weil zum Beispiel habe ich eine Branch mit einem weiteren Backend, Servo, dass man Server nutzen kann dann.
00:28:57.759 --> 00:29:04.480
Aber Server ist halt sehr experimentell noch und ich rede mit den Leuten von Server ab und zu und ja, die fügen schon ein paar Sachen.
00:29:06.240 --> 00:29:14.079
Server ist das originelle Projekt, das überhaupt Rust für erfunden wurde.
00:29:14.480 --> 00:29:23.440
Das ist ein alternative Browser-Engine, die von Mozilla angefangen wurde.
00:29:24.480 --> 00:29:30.160
Und Firefox eigentlich benutzt ein paar Sachen von Server selbst und Server benutzt ein paar Sachen von Firefox.
00:29:30.240 --> 00:29:39.519
Die teilen sich schon ein paar Sachen hier und dort, aber es ist halt ein, sag ich mal, experimentelles, komplett in Rust gebautes Browser.
00:29:40.079 --> 00:29:44.000
Und das geht schon seit vielen Jahren weiter, aber ja, es ist halt.
00:29:44.319 --> 00:29:46.240
Browser-bauen ist nicht einfach, sag ich mal so.
00:29:46.400 --> 00:29:47.519
Da gibt es sehr viele Sachen.
00:29:47.920 --> 00:29:51.839
Das hat ja schon einen Grund, warum die letzten 20 Jahre gefühlt kein neuer dazugekommen ist.
00:29:52.079 --> 00:29:52.880
Genau.
00:29:54.240 --> 00:29:59.680
Okay, also im Prinzip so ein bisschen, ich sag mal, was Modularität angeht.
00:29:59.759 --> 00:30:01.759
Vielleicht, ne, irgendwie Runtime tauschen können.
00:30:02.240 --> 00:30:05.119
Renderer ist ja schon tauschbar, haben wir eben schon gesagt.
00:30:06.559 --> 00:30:07.200
Gut.
00:30:07.519 --> 00:30:17.200
Jetzt gibt es ja, wenn man sich die anderen anguckt, Elektron, Elektro One, Tauri, wir haben sie vorhin schon mal genannt, zum Beispiel auch ganz andere Use Cases, die dann noch abgedeckt werden.
00:30:17.279 --> 00:30:22.880
Ich glaube, Tauri hat ja in seiner 2.0er Version dann auch angefangen, so Mobile-Apps zu unterstützen, zum Beispiel.
00:30:23.680 --> 00:30:29.279
Ist das was, was ihr euch auch anguckt, oder heißt es nicht umsonst Dino-Desktop?
00:30:29.759 --> 00:30:36.880
Ja, also vielleicht, Dino Desktop war vielleicht nicht der beste Name, weil wir haben schon ein bisschen herumgeschaut von wegen Mobile-Apps auch.
00:30:37.759 --> 00:30:40.799
Dino Mobile ist vielleicht noch frei, branding-mäßig.
00:30:41.119 --> 00:30:43.599
Ja, vielleicht noch machbar, ja.
00:30:44.400 --> 00:30:48.640
Vielleicht einfach nur ein Alias für den Desktop-Subcommand am Ende.
00:30:48.799 --> 00:30:52.960
Aber ja, nee, also wir haben jetzt iOS-Bilds, sind machbar.
00:30:53.039 --> 00:30:57.359
Ich weiß nicht, ob Desktop-Apps mit iOS schon jetzt funktionieren oder ich zweifle es.
00:30:57.680 --> 00:31:00.720
Vielleicht, wenn diese Folge rauskommt, dann vielleicht schon dann.
00:31:01.119 --> 00:31:06.799
Aber Dino kann jetzt für iOS gebaut werden und ich glaube, Android geht auch langsam vielleicht.
00:31:06.880 --> 00:31:08.960
Da bin ich mir leider nicht 100% sicher.
00:31:09.200 --> 00:31:15.119
Aber nee, also Mobile Apps ist schon etwas, was für uns interessieren, dass das eine Möglichkeit ist.
00:31:17.920 --> 00:31:18.559
Cool.
00:31:21.440 --> 00:31:25.920
Wie, also wir haben ja in den News auch über Dino-Desktop gesprochen.
00:31:26.240 --> 00:31:30.799
Was war so das Feedback, was bei euch so initial dazu aufgeschlagen ist?
00:31:30.880 --> 00:31:40.079
War es mehr so ein Boah, cool, ich habe da schon super lange drauf gewartet und endlich kann ich die Desktop-Apps bauen, die ich die ganze Zeit nicht bauen konnte?
00:31:40.319 --> 00:31:43.839
Oder war es mehr so ein verwirrtes so wieso?
00:31:44.240 --> 00:31:47.759
Oder was war so das Feedback, was ihr bekommen habt?
00:31:48.319 --> 00:31:55.119
Feedback war überraschenderweise nicht viel, aber nicht in einer schlechten Nacht.
00:31:55.279 --> 00:31:59.680
Normalerweise, wenn man nicht viel Feedback bekommt, heißt es, ach scheiße, Leute benutzen es nicht.
00:32:00.000 --> 00:32:01.119
Aber das war eigentlich nicht der Fall.
00:32:01.279 --> 00:32:03.440
Leute haben es benutzt, ich habe es gesehen in der Community.
00:32:03.680 --> 00:32:07.680
Leute haben es sehr gemocht und wir haben relativ wenige Issues bekommen.
00:32:08.160 --> 00:32:12.000
Was ich sehr überraschend fand, aber ich sah Leute, die haben Sachen gebaut.
00:32:12.240 --> 00:32:18.720
Ich habe DMs bekommen, ich habe auf uns im Discord gesehen, ich habe Leute auf Twitter gesehen, die Sachen bauen waren.
00:32:18.880 --> 00:32:24.799
Also anscheinend haben wir einfach nur relativ Glück gehabt, dass er nicht zu viele Bugs hatten, sage ich mal so.
00:32:25.039 --> 00:32:27.440
Vielleicht, also es gibt natürlich immer noch einige Bugs.
00:32:27.839 --> 00:32:32.720
Sehen wir mal, wir sind so bei 34 Open Issues gerade bei Dino-Desktop bei uns.
00:32:32.799 --> 00:32:34.880
Also es sind ein paar Features auch noch dazwischen.
00:32:35.200 --> 00:32:41.440
Aber ich sag mal, für so ein System nur 34 Issues bin ich ziemlich froh mit.
00:32:41.599 --> 00:32:51.119
Es kommt natürlich immer etwas Neues dazu, aber initiellerweise sehr, würde ich sagen, sehr gut, wurde es sehr gut akzeptiert.
00:32:51.279 --> 00:33:03.599
Ich hatte am gleichen Tag oder den Tag davor, dass wir released haben, war ich halt bei einer Konferenz und habe ich einen Truck gegeben und Leute waren sehr interessiert.
00:33:03.759 --> 00:33:07.440
Also es scheint das einfach, ja, Leute brauchen was.
00:33:08.480 --> 00:33:13.839
Was waren so die interessantesten Use Cases, die du so gesehen hast, was denn Leute damit gemacht haben?
00:33:14.240 --> 00:33:16.240
Oh Gott, gute Frage.
00:33:16.960 --> 00:33:18.640
Was haben Leute damit gebaut?
00:33:21.839 --> 00:33:24.240
Da bin ich mir gerade leider nicht sicher.
00:33:24.960 --> 00:33:27.519
Da fällt mir gerade nichts im Kopf ein.
00:33:28.000 --> 00:33:33.359
Aber definitiv einiges war, sagen wir mal, mehr Herumexperimentierung.
00:33:33.440 --> 00:33:35.519
Natürlich gibt es das halt leider sehr viel.
00:33:35.680 --> 00:33:43.519
Ich sag leider, weil das heißt, dass am Ende doch vielleicht nicht eine richtige App wurde oder einfach nur so ein Side-Projekt wurde.
00:33:44.000 --> 00:33:51.839
Aber ja, also dass jetzt eine vollständige App von jemandem gebaut wurde und die in Nutzung ist, weiß ich nicht.
00:33:52.079 --> 00:33:55.519
Kann ich aber mir vorstellen, dass da vielleicht ein paar herumgehen.
00:33:55.680 --> 00:34:02.960
Also ich habe ja auf alle Fälle noch so eine Electron-App, die werde ich vielleicht bei Gelegenheit mal portieren.
00:34:03.039 --> 00:34:12.079
Die hat nämlich damals, als ich sie benutze, also ist einmal gebaut, ich benutze die jetzt nur für mich so durchgehend, von daher habe ich es ganz lange auch nicht mehr angefasst.
00:34:12.239 --> 00:34:16.559
Damals war das Problem, dass sie unter Linux super schlecht funktioniert hat, weil das Rendering da so ein bisschen komisch war.
00:34:16.719 --> 00:34:22.000
Das wird dann mein Test Case für Dino Desktop, das entsprechend besser funktioniert.
00:34:22.159 --> 00:34:23.920
Ich brauche eigentlich nur zwei Features dafür.
00:34:24.000 --> 00:34:25.679
Ich brauche transparente Fenster.
00:34:26.320 --> 00:34:27.039
Könnt ihr sowas?
00:34:27.199 --> 00:34:28.079
Ja, das ist macht.
00:34:28.559 --> 00:34:29.840
Das ist schon ein Feature.
00:34:30.159 --> 00:34:34.480
Und ich brauche Path-Through-Click-Events.
00:34:34.639 --> 00:34:38.400
Also das ist im Prinzip den Klick nicht Capture in meinem Window.
00:34:39.360 --> 00:34:39.679
Okay.
00:34:41.440 --> 00:34:45.840
Wenn ihr es noch nicht habt, ist das jetzt hier meine Gelegenheit, ein Feature-Request zu platzieren so.
00:34:46.159 --> 00:34:48.960
Aber vielleicht mal schnell auf.
00:34:49.679 --> 00:34:51.760
Ich bezweifle es, dass wir es haben.
00:34:53.360 --> 00:34:55.920
Aber ich werde es mir mal anschauen.
00:34:56.079 --> 00:35:03.679
Weil was ich nämlich machen muss mit meiner App, ich lege so ein transparentes Fenster über den kompletten Desktop sozusagen und kann natürlich dann nicht alle Klicks capturen.
00:35:03.760 --> 00:35:07.840
Ich muss im Vordergrund sein für das, was ich machen will, aber du sollst ja trotzdem dein Zeug benutzen können.
00:35:07.920 --> 00:35:10.400
Und dementsprechend müssen die Klicks durchgehen.
00:35:10.639 --> 00:35:14.800
Und wie gesagt, Elektron Contest damals mit so ein bisschen rumgehacke.
00:35:14.960 --> 00:35:20.559
Wenn Dino Desktop das kann, dann fängt Claude morgen an, die App zu portieren.
00:35:20.880 --> 00:35:21.679
Perfekt.
00:35:21.920 --> 00:35:23.440
Ja, also ich glaube, dass du.
00:35:24.320 --> 00:35:32.719
Okay, ich kenne die APIs nicht, wie das, sag ich mal, wirklich funktionieren würde, systemweise, aber ich kann mir nicht vorstellen, dass das allzu kompliziert sein könnte.
00:35:33.199 --> 00:35:34.639
Ich schoss mich schon mal an.
00:35:36.239 --> 00:36:03.280
Wie Extendable, würde ich gerade sagen, erweiterbar ist das Ganze denn, also wenn ich jetzt, ne, ich habe jetzt hier diesen Use Case und wir stellen uns vor, es würde jetzt so gar nicht unterstützt werden von Dino Desktop, wie einfach oder wie offen seid ihr denn da für so ein Pair, wenn ihr jetzt sagt, okay, ich kümmere mich darum, eine API dafür zu bauen, ich kümmere mich um die Native-Implementierung auf Renderer-Seite und hier ist mein Pull-Request.
00:36:05.760 --> 00:36:07.599
Kannst du kurz nochmal wiederholen?
00:36:08.480 --> 00:36:23.840
Also wenn mir jetzt quasi dieses Click-Through-Feature fehlen würde, ja, und ich sage, okay, ich gestalte die API dafür in Dino Desktop, ich kümmere mich um die Implementierung in dem Renderer und ich mache einen Pull-Request für euch, damit ihr das Feature quasi haben könntet.
00:36:24.800 --> 00:36:28.320
Seid ihr da offen für, baut ihr das eher alles noch gerade eher so selbst?
00:36:28.559 --> 00:36:29.440
Wie sieht das aus?
00:36:29.679 --> 00:36:39.920
Also wir bekommen schon ein paar Pull-Requests, jetzt nicht allzu viele, weil es halt am Ende des Tages ja schon, sagen wir mal, ein sehr komplexes System ist, aber bekommen wir und werden gemerged.
00:36:40.000 --> 00:36:41.599
Also habe gestern ein paar gemerged.
00:36:41.760 --> 00:36:44.639
Also ja, ja, würde schon akzeptiert.
00:36:44.800 --> 00:36:47.360
Also wenn das eine gute Pull-Request ist, natürlich.
00:36:48.480 --> 00:36:49.679
Es gibt nur gute Pull-Requests.
00:36:52.400 --> 00:37:00.639
Für das Dino-Team, was ja doch irgendwie großteils aus dem Web irgendwie kommt und dem Web zu Hause ist, ja.
00:37:00.880 --> 00:37:05.440
Was war das denn für eine Umstellung, sich im Prinzip jetzt auch mit diesen ganzen Native-Themen zu beschäftigen?
00:37:05.519 --> 00:37:13.199
Ich meine, jetzt mein Beispiel ist ja nur eins von vielen, ja, weil du hast ja vorhin zum Beispiel auch gesagt, man kann auch Menü-Bar- oder Doc-Apps irgendwie dazu bauen.
00:37:13.280 --> 00:37:14.400
Da musst du dich ja auch beschäftigen.
00:37:14.719 --> 00:37:18.320
Das ist ja was, was jedes Betriebssystem quasi komplett unterschiedlich handelt.
00:37:18.400 --> 00:37:27.920
So in Windows gibt es diese Tray-Icons, im Mac OS ist irgendwie so ein Doc-Ding, in Linux hängst du halt hart an deinem Desktop irgendwie dran, wie das dann integriert und dargestellt wird.
00:37:28.239 --> 00:37:32.880
Und das sind ja alles so Fragen, mit denen ihr euch vorher so quasi überhaupt nicht beschäftigen musstet.
00:37:33.280 --> 00:37:37.199
Und auf einmal musst du dich so um Native App Development kümmern.
00:37:37.760 --> 00:37:39.840
Wie näher, also wie kommt man da rein?
00:37:40.719 --> 00:37:45.519
Also ich werde, ich würde sagen, das ist nicht so unterschiedlich, zu was wir zuvor gemacht haben.
00:37:45.679 --> 00:38:14.719
Halt ja, wir haben uns nicht mit irgendwie Desktop-Systemen wirklich bekannt gemacht zuvor, aber am Ende des Tages, Dino ist ja eine Runtime, die auf, sagen wir mal, Linux, Windows, Mac funktionieren und wir mussten schon Sachen bauen, die einfach sehr unterschiedlich am Ende des Tages funktionieren under the Hood, aber gleich sich gleich sein müssen für Users, auch wenn die auf verschiedenen Systemen komplett anders sind.
00:38:15.599 --> 00:38:29.199
Also es ist jetzt nicht irgendwie etwas, das wir mit nicht schon ein bisschen uns mal durchgesetzt haben mussten, dass einfach Sachen nicht funktionieren gleich auf verschiedenen Systemen.
00:38:29.360 --> 00:38:40.639
Ist halt natürlich bei Desktop-Apps und das ganze Environment schon ein bisschen, sag ich mal, aggressiver, ein bisschen schlimmer, dass da schon die APIs sehr, sehr anders sind.
00:38:41.599 --> 00:38:48.320
Aber ja, also wie gesagt, war jetzt nichts etwas, was wir nicht irgendwie schon ein bisschen kennen.
00:38:48.559 --> 00:38:49.360
Und ja.
00:38:51.119 --> 00:38:56.559
Welches Betriebssystem war denn da am, oh Gott, ich will das nicht wertend formulieren.
00:38:56.800 --> 00:39:00.400
Welches Betriebssystem hat die größte Herausforderung für euch dargestellt?
00:39:00.960 --> 00:39:02.719
In dieser Vereinheitlichung, ne?
00:39:02.800 --> 00:39:15.519
Weil das ist, man kennt es ja, man will so eine einheitliche API irgendwie schaffen, der ist okay, ich habe hier, weiß ich nicht, für Linux Map das irgendwie ganz gut, Windows passt da auch irgendwie so rein und bei Mac OS ist es irgendwie wieder alles anders.
00:39:15.679 --> 00:39:21.119
Jetzt müssen wir diese ganze API irgendwie so weit auseinanderbiegen, dass er diese drei irgendwie so beherbergen kann.
00:39:21.679 --> 00:39:29.760
Gab es da eines, wo du sagst, okay, das war schon immer mehr herausfordernd oder war das so, in jedem Use Case irgendwie wieder ein anderer, der da am schlimmsten war?
00:39:30.239 --> 00:39:35.679
Ja, ich würde schon sagen, verschiedene Use Cases, andere Systeme am schlimmsten.
00:39:35.760 --> 00:39:42.159
Also das eine, was ich mich erinnere, was echt anstrengend war, war Notifications auf macOS.
00:39:42.559 --> 00:39:45.199
Das ist Chaos, pures Chaos.
00:39:45.280 --> 00:39:52.079
Also, das war, glaube ich, irgendwie zwei, anderthalb Woche oder so war es, nur das irgendwie zum Laufen zu bekommen.
00:39:52.960 --> 00:39:58.559
Irgendwie ganz, ganz pingelig, wie es sein genau gemacht werden muss.
00:39:59.039 --> 00:40:04.000
Sonst würde ich sagen, aber generellerweise das schlimmste OS ist wahrscheinlich Linux.
00:40:04.480 --> 00:40:06.639
Weil es einfach kein ist.
00:40:06.719 --> 00:40:07.760
Weil das Desktop fragmentiert ist?
00:40:07.840 --> 00:40:19.440
Ja, weil es so fragmentiert ist und einige APIs nicht gibt, vielleicht ein paar Environments und auch einfach generell ein paar Sachen schon anders funktionieren.
00:40:19.920 --> 00:40:24.719
Also ein paar Features, die Dino-Desktop habe, funktionieren auf Linux nicht.
00:40:24.880 --> 00:40:34.559
Jetzt sag nicht viele, aber ich glaube, Spray-Icons, ein paar Sachen sind limitiert, wenn mich richtig erinnere, weil das einfach alles ganz anders funktioniert und dann geht doch nicht.
00:40:34.800 --> 00:40:36.159
Also gibt es ein paar Sachen.
00:40:36.400 --> 00:40:38.000
Es gibt ja gar nicht so dieses eine Linux.
00:40:38.239 --> 00:40:40.800
Ich meine, es gibt da verschiedene Distributionen, es gibt verschiedene Desktops.
00:40:41.199 --> 00:40:51.440
Wie habt ihr denn irgendwie das Target dafür überhaupt festgelegt, um zu sagen, okay, das ist die Art von Linux, die Kombination von Distro und Desktop, die wir irgendwie supporten wollen?
00:40:53.840 --> 00:40:55.199
Gute Frage.
00:40:56.559 --> 00:40:58.239
Also es ist einfach, wir benutzen das.
00:40:58.480 --> 00:41:06.239
Oder ist das so der eine Engineer, der halt irgendwie, weiß ich nicht, Fedora am Laufen hat und bei dem muss dann irgendwie alles probiert werden und wenn es da läuft, dann ist schon okay.
00:41:06.559 --> 00:41:09.119
Ja, sagen wir mal, es geht schon sowas in der Nähe.
00:41:09.199 --> 00:41:27.280
Also wir versuchen nicht auf so viele verschiedene unterschiedliche Systeme, aber ich glaube, weil wir haben unseren CI automatisiert, dass wir richtig Tests end-to-end testen können und ich glaube, unser CI ist Ubuntu, wenn ich mich kritische GitHub, einfach ein GitHub Runner, ich glaube, die sind Ubuntu.
00:41:27.519 --> 00:41:32.400
Und dann ich habe Arch mit KDE.
00:41:32.880 --> 00:41:34.880
Also ich teste es da drauf.
00:41:35.199 --> 00:41:37.760
Und ja, wenn das funktioniert, dann funktioniert es.
00:41:37.840 --> 00:41:45.679
Wenn nichts funktioniert, dann macht irgendjemand eine Issue auf und da muss ich irgendwie herausfinden, wie ich das zum Laufen bekomme, wenn ich nicht deren System habe.
00:41:45.840 --> 00:41:48.320
Und das ist dann auch schon ein bisschen eine Aufgabe.
00:41:48.639 --> 00:41:53.920
Aber generellerweise sind APIs schon, sag ich mal, ein bisschen standardisiert.
00:41:54.000 --> 00:41:57.360
Also es ist, es gibt ja, habe ich ja X11 und Wayland.
00:41:57.679 --> 00:42:04.079
Und wir haben uns, glaube ich, auf X11 am Anfang basiert.
00:42:04.239 --> 00:42:06.960
Und ich glaube, jetzt funktioniert Wayland auch.
00:42:07.840 --> 00:42:15.039
Also ja, wenn Deef 2 funktionieren, dann funktioniert es eigentlich, sag ich mal, so 90%, wenn noch nicht mehr von Linux-User.
00:42:15.199 --> 00:42:16.480
Das ist ja gut genug.
00:42:18.000 --> 00:42:25.840
Du hast eben den CI-Prozess angesprochen, lass uns vielleicht da einmal kurz drüber sprechen.
00:42:26.159 --> 00:42:37.519
Wie kann ich dir, oder muss ich mir das denn vorstellen, wenn du so ein Testing-Setup aufsetzen willst für das Framework und die Runtime selbst, ja?
00:42:37.599 --> 00:42:41.119
Und du dich quasi auch, eigentlich kannst du dich auf nichts verlassen und nichts trauen.
00:42:41.199 --> 00:42:52.320
So, du musst ja alles irgendwie validieren, so geht dieses Fenster auf, wenn ich das irgendwie caller, ja, erscheint da ein, also weiß ich, erscheint ein Tray-Icon und ist da das richtige Bild drin, so ungefähr, ja.
00:42:52.480 --> 00:42:56.559
Da wüsste ich jetzt irgendwie gar nicht, wie ich das testen wollen würde.
00:42:56.639 --> 00:43:03.679
Also du musst ja, weiß nicht, macht man da viel so Visual Testing, man macht einfach so ein Screenshot und guckt, ob das richtige Icon da drin auftaucht.
00:43:04.159 --> 00:43:05.519
Wie ist euer Setup?
00:43:06.000 --> 00:43:16.480
Also das ist schon ein interessantes Problem zum Lösen, weil ich hatte dann mit jemand von Tauri gesprochen und weil ich wollte wissen, wie die das machen.
00:43:16.639 --> 00:43:20.320
Und da wurde mir gesagt, wir testen solche Sachen überhaupt nicht.
00:43:20.480 --> 00:43:22.719
Wir machen Live-Testing mit den Usern.
00:43:24.239 --> 00:43:25.199
Bananensuftware.
00:43:25.760 --> 00:43:43.760
Weil es so kompliziert ist, überhaupt etwas richtig end-zu-end zu testen, weil das Einzige, was du machen kannst, wirklich ist, A, Screenshots und B, APIs anfragen auf dem System und checken, hey, ist diese auch nur sehr beschränkt irgendwie was?
00:43:44.000 --> 00:43:58.159
Also natürlich kannst du so ein System fragen, ist dieses Fenster da und ist es groß genug und bla, aber halt dann den Inhalt von dem Fenster oder in den Prozess reinzugucken, dass du die Interprocess Communication irgendwie läuft, das kannst du ja von außen, also per Design ja eigentlich auch nicht.
00:43:58.239 --> 00:44:03.679
Das ist ja Teil des, also das ist ja ein Feature vom Betriebssystem, dass du in den laufenden Prozess nicht unbedingt reingucken kannst.
00:44:04.400 --> 00:44:05.039
Genau.
00:44:05.440 --> 00:44:09.280
Also wir haben ein paar verschiedene Lösungen, um Sachen zu testen.
00:44:09.599 --> 00:44:20.719
Eins ist, wir haben einfach ein, sagen wir mal, ein Backend, was nicht wirklich da ist für das einfach so ein Testing-Backend, sag ich mal.
00:44:20.880 --> 00:44:35.119
Das funktioniert komplett anders, das ist einfach nur irgendwie ein Harness und sieh, dass alles wirklich so gecollt ist, wie es gecot werden soll, ist halt immer noch nicht komplett richtig, weil dann kannst du immer noch nicht komplett wissen, ob alles funktioniert.
00:44:35.360 --> 00:44:44.559
Also vor ein paar Tagen, glaube ich, habe ich jetzt irgendwie eine Issue gesehen, hey, ich bekomme überhaupt keine Events, wenn V-Sizen auf diesem System und dachte, hä, warum das denn?
00:44:44.719 --> 00:44:47.280
Und da muss ich jetzt noch weiter schon in den nächsten Tagen, was da los ist.
00:44:47.440 --> 00:44:53.599
Aber das ist, solche Sachen sind sehr schwierig zu testen und dafür haben wir auch keine Lösung gehabt.
00:44:53.679 --> 00:45:07.039
Also wenn Taurus nicht geschafft hat, die einzige, die ich noch fragen werde, wahrscheinlich ist Elektron, wie die das machen, weil das kann ich mir nicht vorstellen, dass ein Projekt so groß wie Elektron nicht irgendwie eine Infrastruktur dafür hat.
00:45:07.119 --> 00:45:16.400
Und wenn nicht, dann wäre es vielleicht mal Zeit, dass die OSS mal etwas hinzufügen, dass wir Sachen richtig testen können, weil das ist schon nicht ideal.
00:45:16.559 --> 00:45:18.639
Ich finde, Sachen müssen testbar sein.
00:45:18.800 --> 00:45:21.679
Und wenn nicht, dann gibt es ein Problem.
00:45:22.639 --> 00:45:23.760
Ja, das ist ein super Punkt.
00:45:23.920 --> 00:45:29.440
Also wir haben ja auch schon eine Folge über Tauri gemacht und da habe ich gar nicht nachgefragt, wie die das handeln, aber du hast vollkommen recht.
00:45:30.159 --> 00:45:31.840
Da gibt es halt irgendwie nichts.
00:45:34.079 --> 00:45:34.400
Ja.
00:45:35.039 --> 00:45:35.920
Crazy.
00:45:36.719 --> 00:45:48.559
Okay, lass uns vielleicht, bevor wir über die Zeit rennen, noch so ein bisschen den Vergleich anstellen, ohne jetzt irgendwie nur auf Elektron oder Tauri rumzubashen oder irgendwas.
00:45:49.760 --> 00:46:07.599
Wie würdest du denn sagen, ist da Dino aktuell so positioniert im Vergleich, was vielleicht so Performance, Bildkomplexität, Bundle-Size, also die üblichen Metriken, auf die ich halt so gucke, wenn ich mir so eine App zusammenschrauben will, wo seht ihr euch da gerade?
00:46:08.320 --> 00:46:20.639
Also dafür haben wir sogar eine Seite in unseren Docs, in unseren Dino-Desktop-Docs, da gibt es eine Comparison-Seite und da gibt es eine schöne Tabelle, die man sich anschauen kann.
00:46:22.800 --> 00:46:23.920
Verlinken wir auch direkt.
00:46:24.159 --> 00:46:24.800
Perfekt.
00:46:24.960 --> 00:46:30.559
Und ja, also es ist nicht, dass irgendwie Dino-Desktop jetzt das perfekte System ist.
00:46:30.639 --> 00:46:32.719
Es gibt nie perfektes System natürlich.
00:46:32.960 --> 00:46:38.800
Aber ich würde sagen, also App-Size sind wir mittelprächtig drauf.
00:46:38.960 --> 00:46:44.400
Es ist am Ende, hängt ab, ob du WebView benutzt oder Chromium benutzt, weil Chromium ist halt schon massiv.
00:46:45.280 --> 00:46:48.000
Deswegen, da sind wir dann schon größer als zum Beispiel Tauri.
00:46:48.239 --> 00:46:54.079
Tauri am Ende ist ja nur WebViews und am Ende auch eine Rust-App.
00:46:54.239 --> 00:46:57.360
Du hast keine ganze JavaScript-Runtime dabei.
00:46:57.440 --> 00:46:59.920
Also da ist Tauri natürlich viel kleiner.
00:47:00.239 --> 00:47:06.880
Aber dafür haben wir halt die ganzen Dino-Features wie so Node-Compatibility, aber das wollen ja am Ende des Tages ja eh alle.
00:47:08.400 --> 00:47:14.400
Ja, Cross-Compilation ist halt eins der größten Sachen, würde ich sagen, noch, die wir machen.
00:47:14.559 --> 00:47:20.400
Weil, soweit ich weiß, gehen bei allen anderen Systemen das nicht, außer Elektron.
00:47:20.719 --> 00:47:25.440
Die haben halt ein System dafür, aber das ist auch nicht perfekt.
00:47:25.679 --> 00:47:44.880
Also Dino kann ja schon seit, also schon Dino Compilen konnte damals, wann wir es rausgebracht haben, auf andere Targets zu kompilieren, weil am Ende des Tages, wie vorhin gesagt, wir müssen einfach nur eine People-Binary runterladen und dann einfach Sachen am Ende anhängen.
00:47:45.519 --> 00:47:52.960
Weil ihr quasi sozusagen auf dem Bildsystem gar nicht kompiliert, sondern ja nur concettet und dann ist quasi das Binary schon gebaut.
00:47:53.519 --> 00:47:56.320
Genau, deswegen können wir cross-compilen überall.
00:47:56.480 --> 00:48:02.800
Also du kannst eine Dino-Desktop-App von Mac auf Windows bauen.
00:48:02.960 --> 00:48:05.280
Es gibt ein paar Limitations, sag ich mal.
00:48:06.079 --> 00:48:14.079
Wir haben auch Installers, also du kannst MSI-File oder App-Image für Linux oder dort DMG.
00:48:14.559 --> 00:48:22.639
Und da die, also ich glaube, MSI geht nur auf Windows, also das geht leider nicht cross-kompilierbar.
00:48:23.119 --> 00:48:29.440
DMG definitiv nicht, weil das irgendwie ein spezielles Tool braucht, was nur auf Mac leider ist.
00:48:29.599 --> 00:48:37.599
Also da sind ein paar Limitations, aber generellerweise, ja, eine App selbst kann schon cross-kompiliert werden.
00:48:40.639 --> 00:48:48.480
Und du hast gerade schon gesagt, ne, in manchen diesen Zahlen liegen da unterschiedliche von diesen Playern irgendwie so vorne.
00:48:48.639 --> 00:48:51.760
Und am Ende ist das ja, glaube ich, auch immer so eine Prioritätenabwägung.
00:48:52.079 --> 00:49:00.320
Also Tauri legt das halt hart darauf an, irgendwie ultra klein zu sein und liefert halt dafür halt irgendwie keinen eigenen Renderer mit.
00:49:02.000 --> 00:49:13.119
Was sind denn so eure ein, zwei Prinzipien, Prioritäten, die so die Entwicklung von Dino Desktop beeinflusst haben und auch zukünftig beeinflussen werden?
00:49:13.440 --> 00:49:15.440
Was ist euch denn am wichtigsten bei dem Produkt?
00:49:15.519 --> 00:49:24.079
Ja, weil offensichtlich ist es ja nicht, dass ihr das kleinste Binary sein wollt oder den schnellsten Coldstart oder keine Ahnung, was da irgendwie so alles gibt.
00:49:24.400 --> 00:49:26.559
Aber woran orientiert ihr euch?
00:49:26.639 --> 00:49:31.440
Was ist so euer Polarstern, Nordstern, was auch immer, Stern?
00:49:33.280 --> 00:49:51.760
Das ist eine sehr gute Frage, die ich nicht sehr gut antworten kann, weil wir haben kein richtiges Konzept, sag ich mal, was vielleicht sich ein bisschen blöd anhört, aber wir wollen einfach ein Tool bauen, was funktioniert und unsere, sag ich mal, Ideen und Konzepte einfach, die das Dino-Lair hat, sag ich mal so.
00:49:51.920 --> 00:49:53.599
Aber das ist ja das ist ja ein Konzept.
00:49:53.679 --> 00:50:04.000
Also ich meine, natürlich ist es jetzt nicht so in einen catchy Satz irgendwie zu bringen, aber zu sagen, so, Dino Desktop soll sich halt am, ne, wie vorhin schon, soll sich halt nach Dino anfühlen.
00:50:04.239 --> 00:50:04.480
Genau.
00:50:04.639 --> 00:50:05.920
Dann ist es vielleicht einfach das.
00:50:06.159 --> 00:50:06.480
Ja.
00:50:06.719 --> 00:50:07.519
Ja, dann.
00:50:07.840 --> 00:50:09.599
Ja, kann man so sagen, genau.
00:50:11.119 --> 00:50:11.440
Okay.
00:50:14.320 --> 00:50:20.079
Ja, ich glaube, ich bin hier mit meinen Fragen gut durchgekommen.
00:50:20.239 --> 00:50:26.239
Meine Lieblingsfrage am Schluss ist immer, welche Frage habe ich dir nicht gestellt?
00:50:26.320 --> 00:50:36.639
So, über welches Thema wolltest du unbedingt reden, hast dich vorbereitet und hast gesagt, so Mensch, der Jan hat mich jetzt gar nicht zu, weiß ich nicht, Interprocess Communication befragt.
00:50:36.719 --> 00:50:39.039
Da wollte ich unbedingt so gerne noch drüber reden.
00:50:39.119 --> 00:50:45.199
Oder er hat mich gar nicht zu dem Dev- und Debug-Tooling oder keine Ahnung, so deine Chance.
00:50:45.599 --> 00:50:49.360
Welches Thema haben wir so gar nicht gestrichen und wo fehlt uns noch was?
00:50:49.519 --> 00:50:58.960
Ja, also eigentlich Dev-Setups, sag ich mal, wäre wahrscheinlich das Größte, weil wir haben komplett ein ganzes Hotmodul-Reloading-System.
00:50:59.119 --> 00:51:06.559
Du kannst deine App einfach komplett, du musst nicht die ganze Zeit neu bauen, kannst einfach dash-HMR, glaube ich, ist es.
00:51:06.639 --> 00:51:09.039
Oder dash-dev, ich kann mich gerade nicht erinnern.
00:51:09.280 --> 00:51:11.599
Und ja, du kannst einfach deine App bauen.
00:51:11.760 --> 00:51:21.920
Ob du jetzt irgendwie ein Framework benutzt, dann benutzt es den Framework, also es erkennt Frameworks und es kann dann sehen, was es machen muss mit dem Framework.
00:51:22.079 --> 00:51:33.760
Und du kannst einfach dann Dino Desktop callen und dash-dash immer und bekommst einfach alles hot, module reloaded und auch nicht-Modules, einfach auch alle Assets und sowas.
00:51:33.840 --> 00:51:41.519
Also alles ist schon, sag ich mal, sehr komplett integriert, dass einfach du nichts machen musst.
00:51:41.679 --> 00:51:43.280
Du kannst einfach nur bauen.
00:51:43.360 --> 00:51:46.320
Das ist halt die Idee am Ende des Tages für Dino-Desktop.
00:51:46.400 --> 00:51:49.280
Du musst nicht so viel überlegen, über wie das System funktioniert.
00:51:49.440 --> 00:51:50.639
Wir machen alles für dich.
00:51:55.519 --> 00:51:58.559
Und wahrscheinlich sind ja auch so Dev-Tools irgendwie schon mit drin.
00:51:58.639 --> 00:52:04.719
Also ich nehme an, dass mindestens, wenn man den Chrome-Renderer nutzt, dann wird man irgendwie auf die Chrome-Dev-Tools kommen.
00:52:04.880 --> 00:52:15.199
Aber wahrscheinlich gibt es ja auch einen Analog zu, wenn ich das native Web-Rendering nehme, dann gibt es ja auch immer irgendeine Art von Dev-Framework dazu, oder?
00:52:16.079 --> 00:52:23.920
Ja, also genau, du kannst die Dev-Tools vom System, also vom Renderer benutzen.
00:52:24.079 --> 00:52:32.960
Also sagen wir mal jetzt den Chrome-Inspector, wenn du mit Chrome bist oder Firefox-Dev-Tools oder Apple, was auch immer.
00:52:34.559 --> 00:52:41.920
Aber am besten funktioniert, würde ich sagen, Dino-Desktop mit dem Chrome-Renderer, weil am Ende des Tages Dino ist halt auf V8 basiert.
00:52:42.000 --> 00:52:50.719
Das heißt, wir benutzen den gleichen DevTools-Setup als Chrome und da können wir schon ein paar nice Sachen machen.
00:52:50.960 --> 00:53:06.719
Zum Beispiel kannst du einfach nur mit einem DevTools-Window von Chrome beides den Renderer inspektieren und gleichzeitig aber auch den, sag ich mal, den Server-Coder.
00:53:06.880 --> 00:53:12.559
Ist ja kein Server wenn du des Tages, aber kannst, sagen wir mal, den Dino-Code inspektieren.
00:53:12.719 --> 00:53:15.920
Alles in einer Window und das ist alles komplett integriert, dass du.
00:53:16.320 --> 00:53:22.159
Wie würde ich das machen, wenn ich jetzt nicht die Chrome-Renderer nehme, sondern irgendwas anderes?
00:53:22.320 --> 00:53:26.559
Wie komme ich dann an den Konsolen-Output von meinem Hauptprozess dran?
00:53:27.280 --> 00:53:37.360
Also dann musst du Dino-Desktop oder Dino generell hat immer eine Dash-Inspect Flag und dann würdest du halt zwei separater haben.
00:53:37.440 --> 00:53:48.000
Dann würdest du die vom Browser, was auch immer, also wie gesagt, sagen wir mal, Firefox-Dev-Tools und dann halt brauchst du halt dann eine Chrome-Inspektor offen für Dino selbst.
00:53:48.320 --> 00:53:50.480
Und wo kommt dieser Chrome-Inspector her?
00:53:50.559 --> 00:53:53.039
Weil der ist ja nicht in der Dino Runtime drin, oder?
00:53:55.039 --> 00:54:01.920
Also du musst, also um Chrome-Inspector zu nutzen, musst du schon Chrome installiert haben.
00:54:02.239 --> 00:54:07.199
Okay, und das macht dann quasi einfach nur so eine Remote-Session, also eine Connection in den Prozessor.
00:54:08.159 --> 00:54:21.119
Was am Ende des Tages Inspectors noch, also jedenfalls im Falle von Chrome und V8 und sowas ist, ist einfach nur ein WebSocket-Server, das einfach ein bestimmtes Protokoll hat und ein paar weitere Sachen noch.
00:54:21.360 --> 00:54:24.000
Und das erkennt dann halt Chrome.
00:54:25.840 --> 00:54:27.360
Okay, okay.
00:54:28.960 --> 00:54:31.519
Das ist gut, dass wir nochmal drüber gesprochen haben.
00:54:32.400 --> 00:54:40.639
Tut Dino irgendwas in seinem, oder Dino Desktop irgendwas in seinem Compile-Schritt, um diese ganzen Debug-Tools und Flags irgendwie auszubauen?
00:54:40.800 --> 00:54:52.400
Oder zu deaktivieren oder wie auch immer, oder könnte ich, wenn ich jetzt, wenn du gibst mir jetzt eine Dino-Desttop-Anwendung, ja, und ich starte die mit Dash-Dash-Inspect bei mir lokal, ist das dann immer noch alles drin?
00:54:52.480 --> 00:54:55.599
Oder ist das quasi in dem fertig kompilierten Produkt nicht mehr?
00:54:56.800 --> 00:55:08.000
Das ist immer noch drin, weil einfach, halt wir können es nicht aus dem Renderer rausnehmen, natürlich, weil der Render ist der Renderer, wir werden jetzt nicht irgendwie aus Chromium versuchen, irgendwie Sachen zu löschen.
00:55:08.079 --> 00:55:09.599
Das wäre alles zu kompliziert.
00:55:09.760 --> 00:55:18.400
Und der Inspektor in Deno selbst, der ist auch immer noch dabei, weil das einfach ein Teil, sagen wir mal, von V8 ist und da gehen er auch jetzt nicht rein, also am Ende des Tages.
00:55:18.480 --> 00:55:19.119
Es ist immer noch dabei.
00:55:19.280 --> 00:55:23.360
Aber ihr könntet dann eine Runtime schippen, die zumindest die Flags einfach nicht mehr anbietet.
00:55:24.159 --> 00:55:24.800
Genau.
00:55:25.119 --> 00:55:26.800
Das wäre eine Möglichkeit, ja.
00:55:26.960 --> 00:55:32.800
Aber wenn du Dino Desktop eine Binary rausbekommst, gehen eh keine Flags mehr.
00:55:32.960 --> 00:55:47.920
Also deswegen kannst du, würde ein User das irgendwie nicht möglich haben, überhaupt, sag ich mal, die Flags zu enablen, dass die irgendwie den Inspektor irgendwie magischerweise wieder anmachen, wenn die nicht irgendwie die Entwickler der Apps sind.
00:55:48.000 --> 00:55:48.800
Also vielleicht wäre es irgendwie.
00:55:50.719 --> 00:55:55.599
Naja, vielleicht gäbe es eine Möglichkeit, aber da musst du dann wirklich in die Binary reingehen und Sachen ändern.
00:55:55.679 --> 00:56:01.599
Also da, da bin ich mir jetzt nicht hundertprozentig, aber ich glaube, da kann man nicht viel machen.
00:56:02.639 --> 00:56:10.239
Und selbst wenn, also auch ein geändertes Binary, dann ist es im Zweifelsfall nicht mehr signiert und bla bla auch alles nicht so ganz trivial.
00:56:10.400 --> 00:56:18.559
Und also am Ende gilt ja aber wahrscheinlich auch für eine Dino-Desttop-App, genauso wie für alle Elektron und sowas Apps ja auch.
00:56:19.360 --> 00:56:23.440
Was man da schippt, ist ja eigentlich ein Webfrontend.
00:56:24.880 --> 00:56:34.079
Und im Zweifelsfall muss man ja immer damit rechnen, dass egal was da im Quelltext oder in deinem Debug-Output oder im Logstatement oder irgendwo drin ist, ist halt kein Secret.
00:56:34.880 --> 00:56:46.880
Mit genug Wollen und Energie kommt man da ran, ja, es ist nicht irgendwie da reinkompiliert, sondern es ist halt am Ende immer noch, in Anführungszeichen, nur TypeScript.
00:56:47.039 --> 00:56:51.920
Ein bisschen obfuscated und komprimiert oder keine Ahnung was, aber am Ende ist es halt immer noch lesbar.
00:56:52.880 --> 00:56:53.039
Genau.
00:56:53.440 --> 00:56:54.239
Bytecode oder so.
00:56:54.320 --> 00:56:56.400
Und selbst den kann man zurückkompilieren.
00:56:57.599 --> 00:56:58.400
Genau.
00:56:59.039 --> 00:56:59.840
Alright.
00:57:00.159 --> 00:57:00.559
Cool.
00:57:00.880 --> 00:57:03.280
Dann haben wir, glaube ich, alles.
00:57:03.599 --> 00:57:07.039
Und wir können zu unserer letzten Kategorie übergehen.
00:57:07.119 --> 00:57:10.480
Wir können nämlich sprechen über die Pixel of the Day.
00:57:27.039 --> 00:57:29.760
Du bist Gast, du hast anfangen.
00:57:30.000 --> 00:57:32.800
Leo, was hast du für uns heute im Gepäck?
00:57:33.119 --> 00:57:34.079
Oh, wow, ich bin.
00:57:34.559 --> 00:57:35.440
Meine Güte.
00:57:35.679 --> 00:57:43.840
Also bleiben wir schon noch immer noch beim Programmieren, würde ich sagen, eigentlich ZB Search.
00:57:44.079 --> 00:57:45.760
Also ZB Search.
00:57:46.719 --> 00:57:49.440
Da kommst du wahrscheinlich an ein paar andere Sachen, wenn du einfach nur googelst.
00:57:49.519 --> 00:57:52.159
Also zbesearch.dev ist das.
00:57:52.320 --> 00:57:57.119
Und das ist einfach eine Open Source Library für Search.
00:57:57.280 --> 00:58:02.800
Hört sich sehr banal und langweilig an, ist aber halt Search-Systeme sind nicht einfach.
00:58:02.960 --> 00:58:13.840
Und ich bin damit ein bisschen herumexperimentieren und finde im Moment sehr interessant und bin am Denken, vielleicht ein paar von unseren Sachen darüber raufzuwechseln.
00:58:14.000 --> 00:58:20.239
Vielleicht sogar auch GSR komplett, das benutzen werden soll.
00:58:20.320 --> 00:58:21.760
Aber ja, sieht einfach interessant aus.
00:58:21.920 --> 00:58:23.440
Was ist da aktuell für die Suche?
00:58:23.679 --> 00:58:24.320
Ebena?
00:58:24.559 --> 00:58:26.880
Was benutzt ihr da aktuell für die Suche in TSA?
00:58:27.519 --> 00:58:29.840
Benutzen im Moment Algolia.
00:58:30.159 --> 00:58:32.320
Ah ja, das nutzen wir auch bei der Programmierbar.
00:58:32.880 --> 00:58:40.800
Also ehrlicherweise muss man sagen, so als Lösung für, du musst überhaupt nicht viel darüber nachdenken und es funktioniert einfach, sind die schon sehr gut.
00:58:41.440 --> 00:58:55.360
Ja, aber das Problem ist einfach, wir wollen ein paar spezielle Sachen mit JSR machen, von wegen Search und das geht leider nicht in den Limits von Algolia, was die uns umsonst gegeben haben als Open Source Projekt.
00:58:55.519 --> 00:59:01.280
Wir bräuchten nämlich irgendwie mindestens, glaube ich, 20-fach der Nutzung.
00:59:02.159 --> 00:59:05.519
Wenn nicht so, für was wir machen wollen.
00:59:05.679 --> 00:59:16.960
Also da wollten, dass die wie einen Kontrakt signieren und schön was bezahlen, was für JSA nicht eine Option ist, weil es am Ende des Tages einfach ein Open Source Projekt ist.
00:59:18.800 --> 00:59:22.800
Okay, dann, wenn du schon so ein Coding-Pick hast, dann nehme ich auch ein Coding-Pick.
00:59:22.880 --> 00:59:26.320
Ich hatte ja hier zwei zur Auswahl, was der andere war, werden wir nie erfahren.
00:59:28.000 --> 00:59:32.480
Und ich bringe als Pick mit, ich hoffe, ich hatte das noch nie, Scraps.
00:59:32.639 --> 00:59:36.079
Ich weiß nicht, ob du Screeps kennst, das ist ein Strategiespiel.
00:59:36.719 --> 00:59:45.519
Und ich hatte das, glaube ich, vor, oh Gott, das ist schon sehr, sehr lange her, mal auf Kickstarter gebackt und mittlerweile gibt es das auch auf Steam oder so zu kaufen.
00:59:45.760 --> 01:00:00.400
Und was der Clou an der Sache ist, für jede deiner Einheiten oder jeden deiner Einheiten-Typen musst du in JavaScript, ja, der Kreis schließt sich, das Verhalten quasi selbst programmieren.
01:00:01.519 --> 01:00:19.519
Das heißt, es spielt sich auch so ein bisschen MMOR-PG-mäßig, im Sinne von, du kannst aus deiner Session disconnecten und weil alle deine Einheiten ja wissen, was sie tun müssen und wie sie agieren sollen und bla, läuft quasi dieses Spiel auch ohne dein Zutun weiter.
01:00:19.760 --> 01:00:37.840
Du hast auch gar keine Möglichkeit, wenn du drin bist, irgendwas zu machen und so, weiß ich nicht, Age of Empires oder Commandant Conquer mäßig zu sagen, so, ich markiere diese Einheiten und ich schicke sie dahin und nein, das Einzige, was du machen kannst, sagst du, okay, ich nehme mir diese Einheit und ich tausche quasi ihr Skript aus und dann fängt sie halt an, sich anders zu verhalten an.
01:00:37.920 --> 01:00:38.960
Das ist alles, was du machst.
01:00:39.519 --> 01:00:47.280
Und das ist im Prinzip eine Echtzeitstrategie für Developer und das fand ich damals schon ganz cool, ich finde es immer noch ganz cool.
01:00:47.360 --> 01:00:51.679
Ich habe leider nicht so viele Leute, mit denen ich das spielen kann, weil das schon auch nicht, es hat so eine gewisse Hürde.
01:00:51.920 --> 01:00:54.719
Also du fängst halt an und keine Einheit macht gar nichts.
01:00:54.800 --> 01:00:58.239
Und dann fängst du da an und sagst, okay, jetzt programmiere ich mal hier so ein bisschen los.
01:00:58.400 --> 01:01:15.840
Mittlerweile gibt es, glaube ich, auch so Cross-Compilation zu, du kannst es auch in, weiß ich nicht, Python, Rust, PHP irgendwie hochladen und sie schieben das dann irgendwie zu, also ich glaube, das Spiel macht immer noch, also die Engine macht immer noch nur JavaScript-Evaluation, also es wird irgendwie dann transpiliert oder sowas.
01:01:16.159 --> 01:01:18.960
Aber ja, mega cool.
01:01:19.039 --> 01:01:26.880
Und wenn ihr da Bock habt, Bock habt, das zu spielen, dann meldet euch bei mir und dann spiele ich das nämlich endlich auch mal wieder, wenn es ja noch ein paar andere Leute finden.
01:01:27.119 --> 01:01:32.079
Ja, ich habe das vor einigen Jahren schon mal gehört, aber ich habe nie wirklich zu tief reingeschaut.
01:01:32.159 --> 01:01:35.440
Vielleicht wäre das mal Zeit, dass ich mal ein bisschen tiefer reingehe.
01:01:36.079 --> 01:01:55.360
Ja, es hat halt leider, wie gesagt, also du musst halt dann so ein bisschen natürlich auch die API lernen, im Sinne von, ne, wie kannst du, was ist halt so die API, wie fragst du ab, wo so eine Einheit ist, was um sie rum ist, was sind so die Commands, du dir geben kannst, das ist nicht alles ganz trivial, aber es macht halt Spaß, wenn es dann mal läuft.
01:01:55.519 --> 01:02:03.280
Und man hat halt immer so diesen, weiß ich, diesen angenehmen Facts, du guckst da drauf und denkst so, ja, das habe ich gemacht.
01:02:04.559 --> 01:02:08.159
Keine andere Einheit auf dieser Welt verhält sich so wie meine.
01:02:08.639 --> 01:02:10.400
Im Guten wie im Schlechten.
01:02:13.760 --> 01:02:14.480
Wunderbar.
01:02:14.800 --> 01:02:18.719
Das als mein Pick of the Day, Screeps.
01:02:18.880 --> 01:02:22.480
Oder also dass die MMORPG-Variante davon heißt, Screeps World.
01:02:22.719 --> 01:02:29.599
Es gibt auch Screeps Arena, wo man einfach nur so skirmish gegeneinander spielt, aber Scrips World ist eigentlich das, was man haben will.
01:02:29.840 --> 01:02:30.159
So.
01:02:30.480 --> 01:02:30.960
Cool.
01:02:31.119 --> 01:02:34.079
Dann, Leo, danke dir für die Zeit.
01:02:34.320 --> 01:02:40.400
Danke für die ganzen Insights und Insider-Stories zu Dino Desktop und Dino im Allgemeinen.
01:02:40.800 --> 01:02:46.159
Eine allerletzte Frage vielleicht noch, weil die wird mir ab und zu irgendwie immer gestellt, so aufs Spaß bei uns in den News.
01:02:46.400 --> 01:02:51.360
Immer wenn ich anfange über Dino zu reden, kommt dann Dave rein und sagt so, und, Jan, was ist dein Lieblingsdino?
01:02:52.000 --> 01:02:53.840
Also, Leo, letzte Frage für heute.
01:02:53.920 --> 01:02:55.280
Was ist dein Lieblingsdino?
01:02:56.079 --> 01:02:56.800
Wie meinst du?
01:02:56.960 --> 01:02:58.079
Achso, okay.
01:03:00.639 --> 01:03:02.079
Du musst mal um die Ecke denken.
01:03:02.320 --> 01:03:10.880
Ich muss, also die Sache ist, Dino selbst, das Mascott, ist leider kein richtiger Dinosaurier basiert.
01:03:11.039 --> 01:03:12.639
Das ist so mehr konzeptuell.
01:03:12.880 --> 01:03:17.760
Aber ich glaube, was am nächsten, na, Stegosaurus ist schon mal nicht richtig.
01:03:18.159 --> 01:03:22.000
Das fehlt ja dann die Stecheln hin auf den Rücken dran.
01:03:22.079 --> 01:03:23.280
Also, gute Frage.
01:03:23.519 --> 01:03:30.239
Was wäre, weil, also ich selbst habe jetzt nicht unbedingt ein Lieblings-Deno, muss ich sagen.
01:03:30.320 --> 01:03:30.880
Oder Dino.
01:03:31.679 --> 01:03:37.440
Da würde ich einfach gehen mit, was Dino selbst ist, aber leider ist es vollkommen fair.
01:03:37.599 --> 01:03:40.079
Dein Lieblingsdino ist der Deno.
01:03:40.800 --> 01:03:41.440
Genau.
01:03:42.559 --> 01:03:43.280
Wunderbar.
01:03:43.440 --> 01:03:45.280
Dann, wie gesagt, danke dir.
01:03:45.519 --> 01:03:46.639
Schön, dass du da warst.
01:03:46.800 --> 01:03:47.760
Bis bald, hoffentlich.
01:03:48.559 --> 01:03:50.639
Danke mal mindestens zweimal im Leben.
01:03:50.880 --> 01:03:54.320
Und danke an alle da draußen, die wieder zugehört haben.
01:03:54.559 --> 01:04:04.320
Wenn ihr Fragen, Anregungen, Kritik zur Folge habt, dann immer gerne eine E-Mail an podcast.programmier.bar oder schreibt uns auf Social Media, hinterlasst einen Kommentar, wo auch immer ihr diese Folge gerade hört.
01:04:04.480 --> 01:04:07.599
Wir lesen alles mit und wir freuen uns.
01:04:07.840 --> 01:04:09.440
Und bis zur nächsten Woche.
01:04:09.599 --> 01:04:10.079
Bis dann.
01:04:10.320 --> 01:04:11.599
Ciao, ciao.