WEBVTT
1
00:00:06.320 --> 00:00:10.759
Hey, welcome to another episode of
JavaScript Jabber. This week on our panel
2
00:00:10.800 --> 00:00:15.119
we have Steve Edwards and tell you
Jay's not here. I'll do him.
3
00:00:15.400 --> 00:00:20.879
Yo yo yo from very cold and
rainy Portland, which is not out of
4
00:00:20.879 --> 00:00:26.359
the ordinary for this time of year. Dang peer hey from Tel Aviv where
5
00:00:26.399 --> 00:00:30.280
it's still well actually fal Saba,
which is also in Israel. It's still
6
00:00:30.359 --> 00:00:34.320
light outside, which explains why I'm
in Farsabah because I'm still at the office.
7
00:00:34.359 --> 00:00:37.079
As you might be able to tell
from my background if you're watching the
8
00:00:37.920 --> 00:00:42.560
stream or the recorded video, it's
you know, it's daylight savings in the
9
00:00:42.679 --> 00:00:45.600
US and not yet in Israel,
which makes it even earlier for me.
10
00:00:46.320 --> 00:00:50.479
So so yeah, I must say
that is a very distinctive white wall and
11
00:00:50.920 --> 00:00:55.880
whiteboard there with nothing written on it. It stands out. Yeah, somebody
12
00:00:55.920 --> 00:00:58.880
cleaned out the whiteboard, which is
a good thing because it means that there
13
00:00:58.880 --> 00:01:06.680
are no trade secret right awesome.
I'm Charles max Wood from Top End Devs
14
00:01:06.719 --> 00:01:08.840
and I just want to say hi
to all thirty seven people watching us on
15
00:01:10.200 --> 00:01:14.000
x or Twitter, whatever you're calling
it. And we have a special guest
16
00:01:14.000 --> 00:01:15.560
this week that it's Kevin Winnery Kevin, do you want to say hello and
17
00:01:15.599 --> 00:01:19.599
introduce yourself. Yeah, that'd be
great. How's it going, folks.
18
00:01:19.680 --> 00:01:23.439
I'm Kevin. I'm a part of
the Dino team, and I'm coming to
19
00:01:23.519 --> 00:01:26.760
you from Minneapolis, which is not
cold actually as it usually is. It's
20
00:01:26.799 --> 00:01:30.680
actually unseasonably warm for March in Minneapolis, but we'll take it. We can
21
00:01:30.680 --> 00:01:37.280
get a little bit more time outside
without a cod awesome. All right,
22
00:01:37.319 --> 00:01:41.079
Well, we brought you on to
talk a bit about Dino, and I
23
00:01:41.159 --> 00:01:44.599
have to say I was a little
surprised to find that we haven't had an
24
00:01:44.640 --> 00:01:49.319
episode where we talked specifically about Dino. I think we've talked about isn't there
25
00:01:49.319 --> 00:01:55.000
a web framework or something that we
talked about. We mentioned Fresh. I
26
00:01:55.079 --> 00:01:59.359
think we mentioned Fresh, and we
said that we wanted to bring somebody to
27
00:01:59.400 --> 00:02:02.400
talk about Fresh. But I don't
think we actually had an episode about Fresh
28
00:02:02.439 --> 00:02:07.519
either, So maybe we'll take that
this opportunity to also talk about Fresh.
29
00:02:07.959 --> 00:02:12.360
Yeah, for sure, Fresh.
I might have been confused with I know
30
00:02:12.400 --> 00:02:15.439
we did an episode on Bun,
so that may be. Yeah. It
31
00:02:15.479 --> 00:02:19.680
was a great episode, by the
way, even though I didn't participate,
32
00:02:22.000 --> 00:02:24.800
despite the fact that there was no
effect, despite the fact. Yeah,
33
00:02:24.840 --> 00:02:30.520
it was just uh a j And
what's what's the name of the guy who's
34
00:02:30.599 --> 00:02:36.000
doing BUN forget? I forgot his
name. Probably Jared, I would imagine
35
00:02:36.080 --> 00:02:38.919
Jared. Yeah it was Jared.
Yeah it was Jared. I'm pretty sure
36
00:02:38.039 --> 00:02:42.120
it was a great episode. Yeah, Jared, I'm highly recommend it.
37
00:02:42.199 --> 00:02:49.400
Yes, they AJ took the opportunity
to really dive into the nitty gritty details
38
00:02:49.479 --> 00:02:53.680
of what it means to build an
engine. That's kind of how he operates.
39
00:02:53.719 --> 00:02:58.199
But it makes the episodes fun,
so it works. Let's let's jump
40
00:02:58.199 --> 00:03:02.000
in though, and quickly introduce.
I know that probably most of our listeners
41
00:03:02.240 --> 00:03:07.000
have some idea what it is,
but we always have new people. And
42
00:03:07.039 --> 00:03:09.800
by new people, I mean like
new to programming or new to JavaScript who
43
00:03:09.840 --> 00:03:14.439
may not know. So let's give
them a baseline and we'll move up from
44
00:03:14.479 --> 00:03:19.919
there. Yeah sounds great. So
Dino as a JavaScript run time similar to
45
00:03:20.520 --> 00:03:27.240
no JS or BUN and it was
originally created by Ryan Dahl, who was
46
00:03:27.280 --> 00:03:32.759
the author of no JS about ten
going on fifteen years ago now, and
47
00:03:34.199 --> 00:03:38.280
it sort of came out of wanting
to address some problems and some issues that
48
00:03:38.840 --> 00:03:44.719
Ryan had with no JS originally and
some things that kind of felt could have
49
00:03:44.759 --> 00:03:47.879
been done slightly better, so differently
in the JavaScript run time, kind of
50
00:03:47.919 --> 00:03:55.759
built in the modern era. So
Dino has support for Typescript natively, so
51
00:03:55.800 --> 00:04:01.199
instead of just JavaScript code, you
can use typescript code without any third party
52
00:04:01.199 --> 00:04:05.400
tools or a build step, and
for those that are brand new, Typescript
53
00:04:05.479 --> 00:04:10.520
is a compile the JavaScript language which
is strongly typed, kind of similar to
54
00:04:10.599 --> 00:04:14.360
a Java or a c sharp,
and it can help by kind of surfacing
55
00:04:14.400 --> 00:04:18.879
compile time errors and provide type checking
and kind of makes the editing experience a
56
00:04:18.879 --> 00:04:24.720
little bit more on rails in JavaScript, where you could have a predictable interface
57
00:04:25.079 --> 00:04:30.120
that has great ide support and things
like that. Dino also tries very hard
58
00:04:30.160 --> 00:04:35.120
to be as browser like a programming
environment as possible. One thing about no
59
00:04:35.240 --> 00:04:40.560
JS that, as it was originally
created, a lot of the Web standard
60
00:04:40.680 --> 00:04:45.160
APIs that we enjoy in the browser
today didn't exist, so there wasn't really
61
00:04:45.199 --> 00:04:49.759
a module system for creating reusable code. So no js had common js,
62
00:04:49.800 --> 00:04:57.920
which is a older module format that
has since been superseded by ecmscript modules.
63
00:04:58.480 --> 00:05:00.279
There were, you know, no
file system. There is no built in
64
00:05:00.519 --> 00:05:04.519
HGP request API like the fetch API
that we have in the browser today.
65
00:05:04.839 --> 00:05:12.560
So Dono wherever possible tries to implement
browser APIs to expose functionality instead of inventing
66
00:05:12.639 --> 00:05:18.240
kind of new APIs whenever possible.
And another thing with the NOE ecosystem as
67
00:05:18.240 --> 00:05:21.759
it exists today is a lot of
the tooling that you need to be productive,
68
00:05:23.480 --> 00:05:28.160
like a linter, a format,
or a test runner, lots of
69
00:05:28.199 --> 00:05:31.439
these different tools that where you know, in a note project you're usually installing
70
00:05:31.720 --> 00:05:35.839
you know, a dozen or more
dependencies before you even get started, a
71
00:05:35.920 --> 00:05:41.040
lot of those things have kind of
been rolled into the Dino run time itself,
72
00:05:41.120 --> 00:05:44.319
so there's a format or built in, a linter built in. There's
73
00:05:44.360 --> 00:05:50.360
even utility to compile your denote program
into a cross platform executable. So a
74
00:05:50.360 --> 00:05:54.680
lot of the sort of key developer
tools that you'll you'll tend to need in
75
00:05:54.720 --> 00:05:59.879
every project are included out of the
box in Dino. Another thing that DONA
76
00:06:00.480 --> 00:06:04.839
does that is unique to jobscript grun
times is providing kind of granular controls over
77
00:06:04.959 --> 00:06:10.560
the execution environment of your code.
So by default, your code doesn't actually
78
00:06:10.560 --> 00:06:15.199
have access to the file system,
or the system environment or the network you
79
00:06:15.279 --> 00:06:18.639
as the developer kind of have to
opt into letting your code have access to
80
00:06:18.680 --> 00:06:23.759
those things. So say you're running
in a secure CI environment and you don't
81
00:06:23.800 --> 00:06:27.439
want you know, your code and
any you know, dependencies that you're bringing
82
00:06:27.480 --> 00:06:32.120
in to have access to environment variable, say you can execute your code with
83
00:06:32.319 --> 00:06:40.759
the least number of privileges possible within
the underlying execution environment. So that run
84
00:06:40.839 --> 00:06:45.600
time security by default is also something
that's unique to Deno. So, yeah,
85
00:06:45.600 --> 00:06:47.480
it's a jobscript run time. It's
built on Rust in Tokyo. It's
86
00:06:47.560 --> 00:06:54.959
quite fast, especially sort of in
comparison to similar like HGP handling operations that
87
00:06:55.639 --> 00:07:00.600
exist in Note And yeah, we
hope provides just a really nice developer experience
88
00:07:00.720 --> 00:07:03.199
that's a little more you know,
batteries included than something that you might have
89
00:07:03.319 --> 00:07:09.000
in Node today. I have to
ask because you just mentioned that, what
90
00:07:09.160 --> 00:07:13.360
is Tokyo. I'm familiar with Rust
obviously, but I'm not familiar with Tokyo.
91
00:07:13.399 --> 00:07:18.639
What is that? Tokyo is a
RUSS library for doing asynchronous IO operations.
92
00:07:19.120 --> 00:07:25.000
So in Node they have libuv which
kind of provides a similar set of
93
00:07:25.040 --> 00:07:29.920
functionality, and Tokyo is is the
library to do to provide a similar set
94
00:07:29.959 --> 00:07:35.560
of functionality and rust interesting. Uh, and so listening to your description,
95
00:07:35.879 --> 00:07:42.000
I think it might be best summed
up as Dino is Node done right.
96
00:07:44.160 --> 00:07:47.399
I mean, certainly it's was kind
of envisioned in that way of like,
97
00:07:48.000 --> 00:07:53.720
you know, if if we were
to recreate node and kind of with the
98
00:07:53.759 --> 00:07:57.319
context that we have today, Dino
is kind of the attempt at doing that.
99
00:07:57.720 --> 00:08:00.319
I don't know if i'd call it
that indicates that Node was done wrong.
100
00:08:00.399 --> 00:08:03.959
I think it's maybe a better description, say, node is done with
101
00:08:05.120 --> 00:08:07.480
what was available at the time,
and now there's a lot of other things
102
00:08:07.519 --> 00:08:11.040
available and better way to do things, so let's use those. Yeahs is
103
00:08:11.040 --> 00:08:13.439
a long time in tech, you
know, lots of things to learn.
104
00:08:13.560 --> 00:08:18.439
Yeah, And it's not just that, I mean Node kind of paved the
105
00:08:18.480 --> 00:08:22.560
way. So a lot of things, you know, were created in an
106
00:08:22.639 --> 00:08:26.959
ad hoc kind of a way,
and you know, you don't always have
107
00:08:28.120 --> 00:08:31.320
all the context and all the information, and by the time you have a
108
00:08:31.360 --> 00:08:35.600
better understanding of what it is that
you actually want to do or the way
109
00:08:35.639 --> 00:08:41.600
that it should be done, people
are already using whatever you've created, and
110
00:08:41.759 --> 00:08:46.279
much like the web itself, there
are no vackseats. Yeah. Absolutely like
111
00:08:46.879 --> 00:08:52.480
the successive node and NPM just has
like enshrined a lot of those patterns that
112
00:08:52.519 --> 00:08:56.519
we kind of take for granted in
doing super side jobscript today. Yeah,
113
00:08:56.519 --> 00:08:58.279
and common jass is one of those
examples, right, Like there wasn't a
114
00:08:58.320 --> 00:09:03.840
Web standard module API in you know
twenty you know what it was, It
115
00:09:03.840 --> 00:09:07.879
would have been like twenty ten twenty
when like node was still originally being created,
116
00:09:09.480 --> 00:09:11.879
and so common jass was one of
the ideas that was floating around that
117
00:09:11.919 --> 00:09:16.960
they implemented. And yeah, it's
just we've kind of standardized in certain directions
118
00:09:18.120 --> 00:09:20.799
or like we've learned things or you
know, created new technology that didn't exist
119
00:09:20.799 --> 00:09:26.120
in those days. By the way, I think the no go for it,
120
00:09:26.240 --> 00:09:28.960
I was going to say, I
think the no vaccines is really the
121
00:09:30.000 --> 00:09:35.000
best way of putting it where.
Yeah, it's not that node couldn't innovate
122
00:09:35.039 --> 00:09:37.720
in the ways that Dino is.
It's more that, yeah, they had
123
00:09:37.759 --> 00:09:41.240
all of this stuff that you know, had kind of been built onto it
124
00:09:41.279 --> 00:09:46.879
over time that people relied on.
And yeah, I mean we see this
125
00:09:46.919 --> 00:09:52.080
in all kinds of stuff, including
the ECMAScript standard. Right, they don't
126
00:09:52.480 --> 00:09:56.480
they don't kill stuff off, at
least not very often, and so you
127
00:09:56.480 --> 00:09:58.240
know, you have these people that
rely on this stuff, and yeah,
128
00:09:58.240 --> 00:10:01.320
you can't pull it back, and
so the only way to move forward kind
129
00:10:01.320 --> 00:10:05.000
of like what Angler did way back
in the day, right, moving from
130
00:10:05.000 --> 00:10:09.399
one to two, except they just
kept the name and confused a bunch of
131
00:10:09.399 --> 00:10:11.919
people and it cost some issues for
them. But yeah, it's the same
132
00:10:11.960 --> 00:10:15.159
idea where it's Okay, we need
to move forward in these ways, but
133
00:10:15.240 --> 00:10:20.559
we can't do it without breaking compatibility
in the background. I think another great
134
00:10:20.600 --> 00:10:24.799
example of that is the use of
promises and the sync of weight. If
135
00:10:24.840 --> 00:10:28.720
you look at the nod APIs,
you know most of them were created,
136
00:10:30.240 --> 00:10:35.159
at least the fundamental ones were created
before promises were a thing, and certainly
137
00:10:35.200 --> 00:10:41.759
before the JavaScript language had built in
a sinker weight. So it uses different
138
00:10:41.799 --> 00:10:48.799
patterns, uses patterns like calledbacks and
stuff like that. And with Dino,
139
00:10:48.919 --> 00:10:54.039
I believe much of the APIs,
especially because it is trying to use modern
140
00:10:54.120 --> 00:11:01.879
web APIs whenever possible, a lot
of these APIs are promise based fetch yeah,
141
00:11:01.960 --> 00:11:05.519
yeah, I mean, and since
like note of course, like a
142
00:11:05.519 --> 00:11:09.360
lot of the core APIs also provide
a promise based interface that's sort of been
143
00:11:09.399 --> 00:11:13.600
grafted over the top of the callback
based interfaces. But yeah, I mean
144
00:11:13.720 --> 00:11:18.919
a lot of those, you know, the the Web standard APIs like fetch
145
00:11:18.519 --> 00:11:26.279
are you available? The UH and
ECMAScript language features that do appear in node
146
00:11:26.320 --> 00:11:28.879
and they and they will filter their
way into UH, you know, into
147
00:11:28.919 --> 00:11:33.120
note over time too, will usually
show up in DINO first, like for
148
00:11:33.600 --> 00:11:37.000
for example, like top level async
a weight is something that you can do
149
00:11:37.159 --> 00:11:41.600
in DINO, which I think is
behind a flag and Node. I'd have
150
00:11:41.639 --> 00:11:46.919
to actually double check. I'm not
sure if it's available with a flag or
151
00:11:46.960 --> 00:11:50.559
in some other context. But yeah, so like these for of bleeding edge
152
00:11:50.759 --> 00:11:56.159
Ecmoscript language features will tend to make
their way into Deno a little a little
153
00:11:56.159 --> 00:12:03.919
faster as well. Now, one
of the things that NOE or Dino sorry
154
00:12:03.000 --> 00:12:07.799
created when it came about, By
the way, just if everybody, if
155
00:12:07.919 --> 00:12:13.960
our listeners aren't didn't notice, aren't
aware, Dino is literally spelled backwards,
156
00:12:13.039 --> 00:12:18.919
right, that's the point of the
name. Yes, that that is kind
157
00:12:18.960 --> 00:12:20.679
of where it came from. It's
actually like if you were to sort the
158
00:12:20.759 --> 00:12:28.080
characters in note on that is how
you get do you oh cool? So
159
00:12:28.159 --> 00:12:31.159
one of the things that you also
introduced in Dino, as I recall,
160
00:12:31.320 --> 00:12:39.559
is like a quote unquote standard library, a collection of JavaScript or typescript utility
161
00:12:39.639 --> 00:12:46.000
functions and objects and classes and whatnot
that can be used in the code and
162
00:12:46.200 --> 00:12:48.480
if. One of the things,
by the way, that I find kind
163
00:12:48.480 --> 00:12:54.919
of unfortunate is that it seems that
this standard library did not make its way
164
00:12:54.000 --> 00:13:00.840
out of Dino into the JavaScript community
at large. I would have loved to
165
00:13:00.879 --> 00:13:05.960
see a lot of this functionality just
generally available everywhere. Yeah. So the
166
00:13:05.440 --> 00:13:13.000
Yeah, the Deno Standard Library,
at least until recently, was largely mostly
167
00:13:13.080 --> 00:13:16.600
usable in Dino. There are ways
to use it outside of the context of
168
00:13:16.639 --> 00:13:20.759
Dino. With the event of JSR, which is a registry, I don't
169
00:13:20.799 --> 00:13:24.000
know if we'll get into it,
you know, in this sort of conversation.
170
00:13:24.480 --> 00:13:28.639
Uh, the standard library has been
published on JSR now as well,
171
00:13:28.679 --> 00:13:33.720
and since JSR modules can be used
in any runtime environment, the Deno standard
172
00:13:33.759 --> 00:13:37.679
Library is now you know, kind
of available in Node or you know,
173
00:13:37.720 --> 00:13:41.720
in your es build code for that
you create for the browser, or in
174
00:13:41.799 --> 00:13:45.480
bun so a lot of that stuff
kind of has been freed from a Dino
175
00:13:45.559 --> 00:13:50.480
specific packaging. That's excellent. I
really hope that something like that library can
176
00:13:50.559 --> 00:13:58.000
become more than a quote unquote standard
library and actual standard library for JavaScript slash,
177
00:13:58.039 --> 00:14:03.240
acmascript, slash s typescript, that
would be awesome. It just provides
178
00:14:03.279 --> 00:14:07.519
a lot of useful functionality that a
lot of people end up recreating themselves on
179
00:14:07.600 --> 00:14:13.320
as a one off basis. Yeah, yeah, for sure. Hopefully that
180
00:14:13.360 --> 00:14:16.000
will start to make its way out
a little bit as the you know,
181
00:14:16.039 --> 00:14:20.960
as people start you know, adopting
adopting JSR for other purposes to you.
182
00:14:22.320 --> 00:14:26.399
Now, you mentioned that one of
the reasons that Dino can do all this
183
00:14:26.480 --> 00:14:31.600
stuff and kind of you know,
introduced all these innovations is the fact that,
184
00:14:31.919 --> 00:14:39.120
unlike Node that has to contend with
all the legacy packages and legacy code
185
00:14:39.159 --> 00:14:45.679
and legacy functionality, you had the
ability to do a fresh start. I
186
00:14:45.720 --> 00:14:50.759
guess in many ways, Ryan kind
of decided to do Dino because he understood
187
00:14:50.759 --> 00:14:58.840
that he can't do everything that he
wants to do on the existing Node codebase.
188
00:15:00.919 --> 00:15:05.480
So my question then, is like
one of the primary reasons that people
189
00:15:05.679 --> 00:15:13.080
use Node is because of this compatibility
that it has with all these existing modules
190
00:15:13.159 --> 00:15:20.480
and applications and whatnot, and in
many ways they kind of depend on all
191
00:15:20.600 --> 00:15:28.960
this like not necessarily specified behavior that's
built into node, not necessarily documented,
192
00:15:28.080 --> 00:15:33.320
you know, like they depend on
the bugs. So the question is you
193
00:15:33.919 --> 00:15:37.759
kind of I find uside correctly,
you kind of need to compete with that.
194
00:15:37.840 --> 00:15:39.519
I mean, sure, if I'm
starting a new project from scratch,
195
00:15:39.600 --> 00:15:43.600
then maybe I pick Dino, But
then maybe I'm risking the fact that the
196
00:15:43.639 --> 00:15:48.399
package that I really want to use
is not available for Dino. So how
197
00:15:48.440 --> 00:15:54.399
do I contend with that? Yeah, it's it's definitely been like the major
198
00:15:54.519 --> 00:15:56.919
challenge at the core of like how
Dino has evolved. I would say like
199
00:15:56.960 --> 00:16:03.440
over the last five years is like
the gravitational pull of the NPM ecosystem is
200
00:16:03.600 --> 00:16:07.759
pretty strong, and there's just a
lot of tooling and libraries that exists that
201
00:16:07.840 --> 00:16:14.879
exist there that are kind of non
optional in server side JavaScript development today.
202
00:16:15.240 --> 00:16:18.480
So a lot of work on the
Dino team these days goes into our node
203
00:16:18.480 --> 00:16:23.080
compatibility layer, where, yes,
with Dino's design, we do want to
204
00:16:23.279 --> 00:16:29.559
maintain an environment where we do use
ECMAScript modules only, and we don't you
205
00:16:29.600 --> 00:16:33.440
know, support common ass uh you
know as a like outside of this compatibility
206
00:16:33.480 --> 00:16:37.279
layer, and we do want to
favor you know, Web Standard APIs whenever
207
00:16:37.360 --> 00:16:42.960
possible. But the fact that like
the sort of reality is that a lot
208
00:16:44.000 --> 00:16:48.080
of the Node ecosystem is necessary if
you want to be if you would like
209
00:16:48.120 --> 00:16:52.360
to be productive in server side JavaScript
today. So, uh, the node
210
00:16:52.360 --> 00:16:57.759
compatibility layer in Youno allows you to
use just about any package that exists in
211
00:16:59.080 --> 00:17:04.119
NPM, like we have shim APIs
available for most of Node Core, which
212
00:17:04.160 --> 00:17:10.920
then enables a lot of the NPM
ecosystem to function on On Dino, it
213
00:17:11.000 --> 00:17:15.279
is slightly different because the way in
which you'd depend on a package, you
214
00:17:15.319 --> 00:17:18.279
know, could be a little different
in Dino than it was in Node.
215
00:17:18.400 --> 00:17:22.880
But we've also like implemented a lot
of compatibility features. Like you know,
216
00:17:23.519 --> 00:17:29.079
by default in Dino, when you
import a JavaScript file, you have to
217
00:17:29.119 --> 00:17:33.880
include the extension of that file.
And that's for a couple of reasons.
218
00:17:33.000 --> 00:17:36.599
Number, like in the browser,
if you're importing a file, like you
219
00:17:36.680 --> 00:17:41.599
always include the extension of the file. So that's kind of where that design
220
00:17:41.640 --> 00:17:45.519
pattern came from. It's also slightly
more efficient because you know, if you
221
00:17:45.640 --> 00:17:49.400
leave off the file extension, then
the run time has to do a bunch
222
00:17:49.440 --> 00:17:53.200
of checking to see, like are
you actually trying to import a tsx file
223
00:17:53.240 --> 00:17:56.559
a ts file like a JS file
like, and there's a lot of sort
224
00:17:56.559 --> 00:18:03.839
of overhead that comes along with that. Dino provides a mode that is cheekily
225
00:18:03.960 --> 00:18:07.799
probably named sloppy imports, which is
like an option that you can pass into
226
00:18:07.839 --> 00:18:12.759
the run time which is tolerant of
more Node style imports that leave off the
227
00:18:12.920 --> 00:18:18.079
extension. And with a combination of
some of these compatibility features, you can
228
00:18:18.119 --> 00:18:22.519
take a lot of code that was
originally written for noe js and run it
229
00:18:22.599 --> 00:18:27.559
in Dino without really having to change
much of anything. And the big push
230
00:18:27.599 --> 00:18:32.279
for us for Dono two point zero
for this year is like getting to the
231
00:18:32.319 --> 00:18:37.640
point where we feel like the most
vast majority of the most important Node packages
232
00:18:37.559 --> 00:18:41.519
just work in Dino, and I
don't know if we'll ever Like our goal
233
00:18:41.559 --> 00:18:47.039
isn't explicit to get to like being
a drop in replacement for node necessarily,
234
00:18:47.480 --> 00:18:49.720
but we want next js to work
on Dino, Like we want, you
235
00:18:49.720 --> 00:18:52.920
know, all the web frameworks that
you would want to use from the noe
236
00:18:52.960 --> 00:18:59.119
ecosystem to work really well on Dino
as well. So that's probably our biggest
237
00:18:59.160 --> 00:19:04.720
like engineering objective like over the next
several months is just continuing to improve like
238
00:19:04.799 --> 00:19:11.680
the set of compatibility features that we
have for some of those undocumented features.
239
00:19:11.759 --> 00:19:17.359
Like you know, when you NPM
install a module to node modules, you
240
00:19:17.400 --> 00:19:21.359
know, the NPM clients have certain
behavior as far as like how those modules
241
00:19:21.359 --> 00:19:26.799
are unpacked, which then other modules
depend on. Like I think, like
242
00:19:26.799 --> 00:19:30.519
if you install tailwind, it expects
like post CSS or something to be to
243
00:19:30.599 --> 00:19:34.680
be have been already installed, and
it actually introspects the contents of the node
244
00:19:34.680 --> 00:19:41.480
modules folder to do some things to
use that dependency. The note ecosystem is
245
00:19:41.480 --> 00:19:45.720
just kind of full of these little
nooks and crannies and like strange behaviors that
246
00:19:45.799 --> 00:19:48.680
have been built on top of that. We're you know, trying to find
247
00:19:48.680 --> 00:19:55.279
the best way as possible to like
support those while still providing like the DX
248
00:19:55.279 --> 00:19:59.359
that we want to provide through.
You know that this kind of reminds me
249
00:19:59.400 --> 00:20:03.039
of It kind of reminds me of
the Windows world. A lot of our
250
00:20:03.079 --> 00:20:06.720
listeners might be too young to remember
that, but for a long time when
251
00:20:06.720 --> 00:20:14.039
Windows was like the primary platform for
which software was being written, Windows itself
252
00:20:14.119 --> 00:20:18.039
had all these bugs going from version
to version, and they literally had to
253
00:20:18.680 --> 00:20:22.240
you know, when they created a
new version of Windows, maybe even using
254
00:20:22.240 --> 00:20:27.880
a different technology. They often had
to actually emulate buggy behavior just in order
255
00:20:27.920 --> 00:20:33.960
to make sure that older software continued
to run, because you know, if
256
00:20:33.319 --> 00:20:37.880
if you upgraded your Windows, then
all of a sudden your favorite game stopped
257
00:20:37.880 --> 00:20:41.720
working, you would blame Microsoft,
not the game, not the game creator.
258
00:20:41.799 --> 00:20:45.000
Yeah. I was gonna say,
I had to run tie Fighter in
259
00:20:45.119 --> 00:20:48.839
Windows ninety five compatibility mode for a
long time until you know, I found
260
00:20:48.880 --> 00:20:55.839
like a more modern or that I
could use otherwise. So, but I
261
00:20:55.880 --> 00:20:59.119
do have to ask, I mean, if you're putting in all this effort,
262
00:20:59.599 --> 00:21:04.880
and it's seems like a huge amount
of effort into emulating Node on top
263
00:21:04.920 --> 00:21:11.920
of Dino as it were, to
an extent, then like, why do
264
00:21:11.960 --> 00:21:15.599
I want to go with emulation?
Why shouldn't I just pick the original?
265
00:21:15.680 --> 00:21:22.400
What's the main benefit for me,
as a back end JavaScript developer or a
266
00:21:22.480 --> 00:21:29.359
full stack JavaScript developer of using Dino
over Node, especially if I do assume
267
00:21:29.440 --> 00:21:33.359
that I want to be using you
know, all this functionality that exists and
268
00:21:33.440 --> 00:21:36.720
not write everything from scratch. Yeah. So, I mean, I think
269
00:21:36.720 --> 00:21:41.599
there's a couple of reasons. The
first one is probably just reducing kind of
270
00:21:41.640 --> 00:21:47.200
the startup costs and complexity of your
project, where like you do have typescript
271
00:21:47.200 --> 00:21:51.359
built in by default, you have
the Testerlinter format or all of those tools
272
00:21:51.400 --> 00:21:56.119
available out of the box. So
the developer experience of like not having to
273
00:21:56.200 --> 00:22:00.880
manage those things and being able to
keep your code a little leaner and not
274
00:22:02.160 --> 00:22:08.160
have quite so many third party dependencies
is potentially somewhat attractive. Also, like
275
00:22:08.240 --> 00:22:11.759
a lot of the libraries that you
use in Node today probably are just like
276
00:22:11.799 --> 00:22:15.759
a little bit faster on Dino.
So like if an express server that you
277
00:22:15.799 --> 00:22:19.400
wrote a Node is just going to
be probably a little bit faster in Dino
278
00:22:19.440 --> 00:22:22.759
than it is in Uh than it
is running on Node. And kind of
279
00:22:23.519 --> 00:22:27.200
there's a lot of you know,
contextual things there for like which you know
280
00:22:27.279 --> 00:22:33.799
packages and what set of maybe middlewares
you're using. But uh a uh,
281
00:22:33.160 --> 00:22:37.279
I just actually saw a post like
over the weekend about you know, there's
282
00:22:37.319 --> 00:22:42.279
a hdpre framework called oak, which
is like a middleware framework sort of inspired
283
00:22:42.319 --> 00:22:48.279
by Coha, and the author tested
it across you know, BUN and Node
284
00:22:48.319 --> 00:22:53.240
and Dino, uh to kind of
see what the performance characteristics were and know
285
00:22:53.480 --> 00:22:56.920
and Dino and Bun were you know, about the same Bun was actually ran
286
00:22:57.079 --> 00:23:02.759
ran HDP requests slightly fast. There
is like a maybe ten percent increase in
287
00:23:02.880 --> 00:23:07.000
overall throughput, but both were like
twice as fast as Node. So I
288
00:23:07.000 --> 00:23:11.200
think there's kind of some things that
you get for free by switching to switching
289
00:23:11.240 --> 00:23:17.279
to DNA as well, and you
were able to keep or maintain this performance
290
00:23:17.400 --> 00:23:22.319
benefit even when adding the backward compatibility
with node. I mean, that would
291
00:23:22.319 --> 00:23:27.000
seem to be the challenge. I
would imagine that with node improving performance in
292
00:23:27.079 --> 00:23:33.839
a lot of places kind of runs
smack dab into the problem of maintaining backward
293
00:23:33.920 --> 00:23:41.839
compatibility. Yeah, I mean there's
there's certainly challenges with that, But I
294
00:23:41.880 --> 00:23:48.039
mean, the the shim APIs that
we've created for like the underlying HDDP node
295
00:23:48.079 --> 00:23:52.359
core APIs utilize the same sort of
opter earthly they get to benefit from the
296
00:23:52.400 --> 00:23:59.240
same optimizations we've made in Dino to
make HDP requests handling fast. So those
297
00:23:59.279 --> 00:24:04.599
shim api do tend to perform uh
pretty well. So like we uh you
298
00:24:04.640 --> 00:24:10.039
know, have been doing some testing
with web frameworks like Astro, say,
299
00:24:10.400 --> 00:24:15.359
and just using the sort of node
adapter for Astro, which which enables like
300
00:24:15.400 --> 00:24:19.799
server side rendering of uh you know
pages in that framework. Uh, those
301
00:24:19.880 --> 00:24:26.279
Node APIs actually run slightly faster on
Dino for server side rendering than they do
302
00:24:26.480 --> 00:24:29.759
in in Node. And I think
it's just because of you know, the
303
00:24:29.880 --> 00:24:34.119
underlying infrastructure being you know, slight
like being slightly more performant, not necessarily
304
00:24:34.119 --> 00:24:40.200
because do you know, for you
know, is intrinsically always faster than uh
305
00:24:40.400 --> 00:24:42.400
Node. It's just that, you
know, and it's not like, you
306
00:24:42.400 --> 00:24:48.799
know, Node couldn't be this fast
potentially see as certainly uh, you know,
307
00:24:48.920 --> 00:24:52.519
just as fast as Rust or c
C plus plus or whatever. But
308
00:24:52.759 --> 00:24:56.839
yeah, it's just the uh,
A lot of work has gone into optimizing
309
00:24:56.880 --> 00:25:06.440
the HDP interfaces. I think it's
also legitimate, I would say for the
310
00:25:06.519 --> 00:25:11.400
performance improvements to be Let's put it
differently, it's okay for the shims to
311
00:25:11.519 --> 00:25:17.319
run slower if the code that doesn't
need the shims can run faster, if
312
00:25:17.359 --> 00:25:19.720
you understand what I'm trying to say, So, as long as I don't
313
00:25:19.839 --> 00:25:26.960
need some weird note functionality for backward
compatibility the standard stuff, if that runs
314
00:25:26.000 --> 00:25:32.319
faster, I'm happy with that,
even if the shims themselves like pay a
315
00:25:32.319 --> 00:25:38.960
certain price. But you wanted to
ask something about the built in Typescript support
316
00:25:40.000 --> 00:25:45.640
that you mentioned before. So I
actually posted a link in our chat to
317
00:25:45.759 --> 00:25:51.960
a great quote from Matteo Colina,
who is really deep in the node world,
318
00:25:52.039 --> 00:25:55.480
by the way, is one of
the maintainers I think of note and
319
00:25:55.559 --> 00:26:02.079
he wrote some tweet recently which was
really am using Anie opening to an extent,
320
00:26:02.519 --> 00:26:07.599
which is typescript does not exist.
There is a multiverse of Typescript implementations
321
00:26:07.599 --> 00:26:15.480
depending on the permutation of the configs. And he added also to that this
322
00:26:15.680 --> 00:26:19.000
kind of weirdness are the key reasons
why I'm still skeptical about the typescript.
323
00:26:19.440 --> 00:26:23.559
Now, I'm not skeptical about typescript, but I definitely appreciate what he said.
324
00:26:25.000 --> 00:26:30.160
The fact that the different values that
you put in your ts config file
325
00:26:30.240 --> 00:26:37.519
can significantly impact the functionality the behavior
of typescript, or put another way,
326
00:26:38.119 --> 00:26:42.680
kind of means that typescript is less
than of a language standard and more of
327
00:26:42.680 --> 00:26:49.359
a utility that you can configure in
a sense. So my question is how
328
00:26:49.400 --> 00:26:55.039
does DNO deal with that? I
mean, is it using the same ts
329
00:26:55.079 --> 00:27:02.680
config as typescript as TSC or something
else. How does that work? I
330
00:27:02.680 --> 00:27:06.039
mean, there's a sort of a
I think like what Matteo is saying is
331
00:27:06.079 --> 00:27:11.039
correct, right, Like the like
the configurability of typescript does introduce a lot
332
00:27:11.039 --> 00:27:18.079
of different permutations of how Typescript can
behave one I think benefit in the context
333
00:27:18.119 --> 00:27:22.279
of Dino is that you know,
there is a set of behavior that's sort
334
00:27:22.279 --> 00:27:27.559
of codified and how Typescript runs on
Dino. So there isn't sort of an
335
00:27:27.640 --> 00:27:33.279
unlimited amount of configurability for like compiler
options and stuff like that. There is
336
00:27:33.279 --> 00:27:37.759
certainly is some and there are some
you know of those configure out configuration options
337
00:27:37.759 --> 00:27:45.880
that do still work in Dino,
but the Typescript environment is relatively predictable versus
338
00:27:45.920 --> 00:27:49.400
in in node, where you do
have like kind of full configurability of how
339
00:27:49.559 --> 00:27:53.759
the uh TSK or like how TSC
works at the end of the day.
340
00:27:53.839 --> 00:27:59.680
So yeah, but like the point
stands that, you know, if you
341
00:27:59.799 --> 00:28:03.240
have access to all those compiler options, it makes it very difficult to write
342
00:28:03.279 --> 00:28:07.720
touch script code that you know can
very can predictably run with every set of
343
00:28:07.759 --> 00:28:11.839
compiler options. So am I stuck
then with how you did it then?
344
00:28:14.880 --> 00:28:17.839
To a degree? Right, Like, so there are certain things that are
345
00:28:17.839 --> 00:28:22.039
configurable, there are certain things that
are not so there's probably features of like
346
00:28:22.160 --> 00:28:30.039
ts config that would work in a
node environment that are impossible in Dino just
347
00:28:30.079 --> 00:28:34.079
because we don't support those those options. So it is a constraint that exists
348
00:28:34.119 --> 00:28:38.480
for sure. By the way,
not supporting some ts configure options is actually
349
00:28:38.519 --> 00:28:44.039
a good thing, because I've literally
seen projects that were configured in such a
350
00:28:44.039 --> 00:28:51.599
way that interface definitions weren't each actually
even being used, and the developers didn't
351
00:28:51.599 --> 00:28:59.200
even notice. So like there were
incorrect types and literally types with errors in
352
00:28:59.240 --> 00:29:04.240
them, and the projects seemed to
compile fine because everything that was using like
353
00:29:04.319 --> 00:29:11.240
an unrecognized the imports didn't actually work, and anything that used an interface that
354
00:29:11.359 --> 00:29:17.200
wasn't specified defaulted to any instead.
So they basically had everything as any,
355
00:29:17.599 --> 00:29:22.200
but they thought they were writing typescript
but actually had everything as any, which
356
00:29:22.279 --> 00:29:26.519
is like the worst of all possible
worlds. Yeah, so all the overhead
357
00:29:26.519 --> 00:29:30.519
of using TSC with none of the
actual compile time safety, Yeah, that
358
00:29:30.559 --> 00:29:36.640
seems exactly exactly. So if you're
prevented from being able to do that,
359
00:29:36.759 --> 00:29:40.839
I would definitely count that as a
good thing. But what is the actual
360
00:29:40.920 --> 00:29:47.519
benefit of having the typescript functionality built
into the environment. I mean, let's
361
00:29:47.519 --> 00:29:52.200
put it differently. With Typescript,
I see two main benefits. One is,
362
00:29:52.319 --> 00:29:56.400
while I'm writing the code in the
development environment in let's say VS code,
363
00:29:56.839 --> 00:30:00.720
it does all the type checking for
me, squiggly lines, the completion
364
00:30:02.920 --> 00:30:07.400
stuff like that, and and and
highlights files that has have errors in them
365
00:30:07.440 --> 00:30:15.279
and so forth. The other advantage
is is the actually the actual compilation step
366
00:30:15.279 --> 00:30:18.559
to an extent, because if I
have errors in my you know, type
367
00:30:18.640 --> 00:30:25.519
errors in my code and not a
too funky ts configure settings, then the
368
00:30:25.559 --> 00:30:33.480
built step will actually fail if I
try to build something bad, so because
369
00:30:33.519 --> 00:30:37.960
I'm ignoring squiggly lines and VS code
for some reason. So my question is,
370
00:30:38.480 --> 00:30:42.240
you know, with with dno,
you don't need that built step or
371
00:30:42.279 --> 00:30:47.839
you don't have that built step.
So am I maybe kind of even losing
372
00:30:48.000 --> 00:30:52.319
some benefits of Typescript by working this
way? And alternatively, what are the
373
00:30:52.359 --> 00:30:57.440
advantages of working this way? Actually? So there is still a build step
374
00:30:57.599 --> 00:31:03.200
that happens. Like so there's a
UST based sort of equivalent of TSC which
375
00:31:03.200 --> 00:31:08.200
we would use sort of at run
time to generate the jobscript code because like
376
00:31:08.640 --> 00:31:15.359
Dino runs JavaScript code in VA similar
to how Node does. So we still
377
00:31:15.400 --> 00:31:19.319
do need to transpile typescript before it's
able to run in that environment, because
378
00:31:19.440 --> 00:31:26.319
VA doesn't natively understand typescript, So
there is a sort of build build step
379
00:31:26.359 --> 00:31:30.160
that happens as a result of running
your code on you know, it's just
380
00:31:30.200 --> 00:31:34.839
that it is opaque in that like
to you as a developer, it doesn't
381
00:31:34.880 --> 00:31:38.440
seem like you need to handle that, even though it is happening for you
382
00:31:40.240 --> 00:31:47.319
behind the scenes. I think the
advantage of having typescript built in largely comes
383
00:31:47.400 --> 00:31:51.960
from how you get to manage your
source code. So you know, you
384
00:31:52.039 --> 00:31:56.559
can you know, version controlled typescript, and you can you know, in
385
00:31:56.559 --> 00:32:00.480
the case of uh, you know
JSR, you can publish typescript directly to
386
00:32:00.559 --> 00:32:05.160
the registry. Other typescript developers don't
have to rely on your transpile code.
387
00:32:05.200 --> 00:32:09.759
They could actually import typescript source code
that you have written into their project should
388
00:32:09.759 --> 00:32:14.559
they should they need to. So
being able to just actually manage your your
389
00:32:14.599 --> 00:32:19.759
code base as typescript without having to
think about transporlation as a part of that
390
00:32:20.519 --> 00:32:23.000
ends up being ends up being kind
of nice in a lot of a lot
391
00:32:23.039 --> 00:32:29.920
of different contexts. So it's basically
reducing friction in the development process. Yeah,
392
00:32:29.960 --> 00:32:34.599
yeah, kind of friction, kind
of the overhead of that transportation process.
393
00:32:34.640 --> 00:32:37.720
Like you do, you kind of
don't have to consider it within your
394
00:32:37.720 --> 00:32:39.720
workflow. So side note, really
quick, Am I the only one that
395
00:32:39.759 --> 00:32:45.839
thinks of vegetable juice when I hear
V eight? There was a time I
396
00:32:45.839 --> 00:32:51.799
think I've gotten yeah? Or yeah, I think you know I should have
397
00:32:51.839 --> 00:32:54.640
had a V eight commercials for those
who are too young to remember that anyway,
398
00:32:55.880 --> 00:32:59.599
Yeah, but it's time. Sift
is not the only thing that you
399
00:32:59.640 --> 00:33:04.039
built. I think you mentioned it
that you've also got like a testing framework
400
00:33:04.119 --> 00:33:07.319
built in, You've got a linter
built in. Can you elaborate about these
401
00:33:07.359 --> 00:33:12.880
a little bit? Yeah? Sure, so yeah, so Dino has like
402
00:33:13.599 --> 00:33:15.920
a test command that's built in.
If you run like Dino help after you
403
00:33:15.960 --> 00:33:20.559
install Youno, you can get a
sense of like what all these command line
404
00:33:20.599 --> 00:33:24.359
tools are. But yeah, it
was really about, like there's a lot
405
00:33:24.359 --> 00:33:29.119
of decisions that you make when you're
bootstrapping a node project. They aren't really
406
00:33:29.200 --> 00:33:34.119
that important, like which test framework
you use, possibly not that important,
407
00:33:34.200 --> 00:33:37.480
which linter you use, and what
your linter settings are or what your format
408
00:33:37.559 --> 00:33:40.920
or settings are probably also not important, Like you can kind of bike shed
409
00:33:42.079 --> 00:33:45.880
on these things, if that's if
that is your preference. But also I
410
00:33:45.960 --> 00:33:50.599
just think that, you know,
accepting a set of defaults tends to be
411
00:33:50.720 --> 00:33:53.079
kind of nice. One thing that
I've really noticed is as I've gone between
412
00:33:53.200 --> 00:33:59.559
different Dino projects, because the testing
framework is the same, because the winter
413
00:33:59.599 --> 00:34:02.359
settings are the same and the formatter
settings are the same, Like, it's
414
00:34:02.440 --> 00:34:07.400
much less jarring to kind of go
from one Deno project to the next,
415
00:34:07.440 --> 00:34:10.920
because like the lay of the land
is pretty similar. So like having this
416
00:34:12.559 --> 00:34:16.199
sort of similarity is useful to you
as a developer because it takes like kind
417
00:34:16.199 --> 00:34:20.800
of trivial decisions, you know,
out of your hands. I'm I mean,
418
00:34:20.840 --> 00:34:23.039
you certainly could use other test frameworks
if you want, but you know,
419
00:34:23.039 --> 00:34:27.199
you don't necessarily have to make those
decisions, and it helps you kind
420
00:34:27.199 --> 00:34:30.239
of go from one project to the
next. I used to use Rubion rails
421
00:34:30.280 --> 00:34:32.960
for a long time, and that
was one thing that was kind of nice
422
00:34:34.039 --> 00:34:37.159
about a lot of those projects was
I knew the models were in this folder,
423
00:34:37.280 --> 00:34:42.880
and like a lot of those conventions
kind of helped me like navigate those
424
00:34:42.920 --> 00:34:45.559
projects, even if I was relatively
new to them. Like rails projects can
425
00:34:45.639 --> 00:34:49.880
be very you know, diverse in
a lot of other ways, but like
426
00:34:49.960 --> 00:34:52.960
some of that similarity is helpful in
terms of like the other tools that are
427
00:34:52.960 --> 00:34:58.199
built in. I mentioned Dino compile, which you know, you can point
428
00:34:58.280 --> 00:35:02.239
at a type script source code file
and it generates a binary that can be
429
00:35:02.360 --> 00:35:07.000
run cross platform. So like it's
a good way to kind of compartmentalize like
430
00:35:07.039 --> 00:35:10.360
a web server, say into just
a binary that you can run on you
431
00:35:10.400 --> 00:35:15.760
know, an arbitrary server somewhere.
Or if you're making a command line utility,
432
00:35:15.760 --> 00:35:19.840
it's a really easy way to create
like a cross platform command line utility.
433
00:35:19.960 --> 00:35:27.079
So t which is the package manager
that is was replacing Homebrew, or
434
00:35:27.159 --> 00:35:30.519
like the original author of Homebrew used
Dino to create Tea, which is kind
435
00:35:30.519 --> 00:35:36.000
of his sort of next generation version
of that package manager. And he used
436
00:35:36.000 --> 00:35:42.360
Dino for this reason actually because he
wanted to write typescript, wasn't necessarily interested
437
00:35:42.559 --> 00:35:47.239
in you know, having that transportation
step, and the ability of Dino to
438
00:35:47.400 --> 00:35:53.960
package up a cross platform executable was
convenient there as well. So Dino compiles
439
00:35:54.000 --> 00:36:00.119
super useful. Certainly a few other
nicely. So there's a Dino doc which
440
00:36:00.159 --> 00:36:02.639
is also a built in utility and
you can point it at a typescript file
441
00:36:04.440 --> 00:36:08.239
or a dot D dot t S
file and you'll kind of introspect those files
442
00:36:08.239 --> 00:36:14.920
and generate HTML documentation for your you
know, for your type script source or
443
00:36:14.920 --> 00:36:17.840
from your type configuration. So yeah, so there ends up being kind of
444
00:36:17.840 --> 00:36:22.440
a lot in the box, which
is which is pretty nice. By the
445
00:36:22.519 --> 00:36:28.679
way, does your typescript implementation also
support jastock I yes, it does,
446
00:36:29.119 --> 00:36:30.800
so, yeah, that's that's kind
of where it's pulling a lot of that.
447
00:36:31.039 --> 00:36:36.679
It'll pull documentation content from jas dot
comments if they if they exist,
448
00:36:37.079 --> 00:36:39.519
and a lot and it can guess
a lot just from type information as well.
449
00:36:40.079 --> 00:36:46.599
AJ will be happy. So I'm
old enough to remember the Unix days
450
00:36:47.079 --> 00:36:52.440
that the whole point was one of
the big selling points was that a lot
451
00:36:52.519 --> 00:36:58.800
of those built commands that are were
built into other operating systems in the Unix
452
00:36:58.800 --> 00:37:07.000
world will implement it as separate executables
or and ran as distinct userland processes,
453
00:37:07.239 --> 00:37:13.039
and weren't really built into Unix itself. But now it seems like with you
454
00:37:13.119 --> 00:37:19.519
and with bun that everything is kind
of being built into the main to that
455
00:37:19.719 --> 00:37:24.880
single executable like Dino with the one
command line switch does one thing, with
456
00:37:24.960 --> 00:37:30.519
a different command line switch does some
other thing. What's the motivation? What's
457
00:37:30.559 --> 00:37:35.800
the advantage of bundling all this functionality, you know, some of which could
458
00:37:35.840 --> 00:37:39.159
definitely be like distinct and standalone.
I mean, like the test runner now,
459
00:37:39.360 --> 00:37:44.960
like why what's the benefit of having
it built into that same executable and
460
00:37:45.039 --> 00:37:51.559
not being split off into a separate
executable file. I think like it's kind
461
00:37:51.559 --> 00:37:59.119
of you know, you're deciding where
and when to manage complexity within your project.
462
00:37:59.320 --> 00:38:01.760
Like if you are using uh,
you know, some kind of utility
463
00:38:01.760 --> 00:38:07.639
and user land. The complexity that
comes along with that is keeping that dependency
464
00:38:07.719 --> 00:38:12.360
up to date and whatever plumbing needs
to happen to kind of pipe the input
465
00:38:12.440 --> 00:38:16.000
and output from like one utility into
the next, and uh, you know,
466
00:38:16.079 --> 00:38:22.960
the Unix philosophy is definitely one of
the reasons that that like operating system
467
00:38:22.000 --> 00:38:25.679
has been so popular and continues to
be, uh like one of the best
468
00:38:25.679 --> 00:38:32.440
options for especially like technical you know, sort of technical use cases or like
469
00:38:32.519 --> 00:38:38.360
running code on servers that sort of
thing. But the uh, the price
470
00:38:38.400 --> 00:38:44.599
that you pay in like application programming
tool like uh, you know, something
471
00:38:44.639 --> 00:38:46.920
that's a little higher level, like
a DNO or a node or a bun
472
00:38:47.639 --> 00:38:51.760
is that, you know, the
things that you will tend to need over
473
00:38:51.840 --> 00:38:57.239
and over again. You have to
sort of reinvent every single time you create
474
00:38:57.400 --> 00:39:01.920
a new project, and the overhead
of you know, the startup costs and
475
00:39:02.159 --> 00:39:07.480
maintaining you know, a package dot
Jason that has twelve dependencies in it,
476
00:39:08.280 --> 00:39:13.199
none of which are actually have anything
to do with the functionality or a project.
477
00:39:13.199 --> 00:39:15.880
It's just like the tooling that you
need to actually build your code,
478
00:39:16.000 --> 00:39:21.400
test your code, lint your code, that sort of thing. There's a
479
00:39:21.440 --> 00:39:25.559
price that comes with that as well. There's certainly flexibility. But when you
480
00:39:25.599 --> 00:39:30.159
consider the trade offs of like,
Okay, now I have you know,
481
00:39:30.320 --> 00:39:35.199
this this dependency on jest and it
depends on this other thing. And now
482
00:39:35.239 --> 00:39:38.239
when I run you know, in
PAM install, I get these these conflicts
483
00:39:38.239 --> 00:39:42.440
that I have to kind of work
my way through and then I have to
484
00:39:42.519 --> 00:39:46.639
update, upgrade this dependency, et
cetera. So like taking dependencies out of
485
00:39:46.679 --> 00:39:54.239
the mix reduces the like maintenance complexity
in a pretty meaningful way that I think
486
00:39:54.360 --> 00:40:00.159
is kind of worth the trade off
in at least in this instance. But
487
00:40:00.280 --> 00:40:02.440
you know, there's certainly arguments to
be made the other way that you know,
488
00:40:02.480 --> 00:40:07.440
a lot of these utilities certainly could
be user land tools and evolve separately,
489
00:40:07.960 --> 00:40:13.360
but because they're kind of core to
any application that's non trivial, including
490
00:40:13.400 --> 00:40:17.079
them as part of the platform tends
to be a trade off that that helps.
491
00:40:17.840 --> 00:40:22.840
So if I'm using Dino, then
I likely won't install prettier and es
492
00:40:23.239 --> 00:40:28.280
lint and ts s lint and stuff
like that, or just use whatever is
493
00:40:28.400 --> 00:40:32.320
built in. Yep, that is
the intent that you wouldn't necessarily have to
494
00:40:32.440 --> 00:40:37.280
bring those tools in unless you're using
Dino in the context of an existing Node
495
00:40:37.320 --> 00:40:40.760
project, in which case you might
still you know, have those tools around.
496
00:40:40.840 --> 00:40:44.800
But yeah, and a Dino project, the expectation is you won't need
497
00:40:44.840 --> 00:40:51.280
to have those things. Cool.
I'm kind of curious. I'm going to
498
00:40:51.360 --> 00:40:55.400
change gears on a little bit.
How did you get into Dino, right?
499
00:40:55.440 --> 00:41:00.719
What's your story here? Yes,
so, I've been you know,
500
00:41:00.719 --> 00:41:05.400
a no Jazz user since like I
think the first code I wrote was for
501
00:41:05.719 --> 00:41:09.559
zero point eight of Node, and
at that time I was working at a
502
00:41:09.599 --> 00:41:15.360
company called Twilio, which is like
an API provider like messaging, telephany stuff
503
00:41:15.360 --> 00:41:19.440
like that, and Node was pretty
new and I was like, oh,
504
00:41:19.480 --> 00:41:22.480
Twillia, we should have totally have
like a client library for this node thing.
505
00:41:22.559 --> 00:41:23.440
I think, I think this,
I think it has legs. I
506
00:41:23.480 --> 00:41:28.880
think it's going to go somewhere.
So I wrote like an HGP client wrapper
507
00:41:28.960 --> 00:41:34.360
for like the Twilio API in Node
back in those days and the thing,
508
00:41:34.840 --> 00:41:37.440
and I kind of fell in love
with it because like, finally this my
509
00:41:37.559 --> 00:41:43.920
investment in JavaScript. I could now
use JavaScript a program every kind of thing,
510
00:41:44.079 --> 00:41:49.199
like from servers to front end robots, everything in between. So using
511
00:41:49.280 --> 00:41:52.599
JavaScript is kind of the lingua franc
of web development. Has kind of kept
512
00:41:52.639 --> 00:41:55.679
me involved in server side JavaScript for
a long time. But I think,
513
00:41:55.760 --> 00:42:00.880
like like a lot of Node users, like over time, you started to
514
00:42:00.960 --> 00:42:05.840
get the feeling that Node had jumped
the shark a little bit, where it's
515
00:42:05.920 --> 00:42:08.280
just like I look at a standard
Node project and I look at all these
516
00:42:08.320 --> 00:42:15.039
configuration files that I have without having
even having like written any code like there.
517
00:42:15.079 --> 00:42:20.000
There was certainly a certain amount of
discontent with how much complexity it kind
518
00:42:20.000 --> 00:42:25.440
of crept into the ecosystem. So
the prospect of having this this set of
519
00:42:27.000 --> 00:42:31.400
decisions that are kind of trivial made
for me was was pretty compelling, and
520
00:42:31.480 --> 00:42:37.280
so so like the lure of Dino
as a technology kind of started from there
521
00:42:37.360 --> 00:42:42.400
of like having this sense that you
know, complexity had been creeping into Node
522
00:42:42.480 --> 00:42:46.719
and the experience of using Dino it
was something where like once I used it
523
00:42:46.760 --> 00:42:50.280
once, I was like, okay, like I'll probably be a little grumpy,
524
00:42:50.360 --> 00:42:52.480
like if I have to use Node
without Dno again, because like if
525
00:42:52.480 --> 00:42:57.840
I have to configure you know,
TS configure web pack for these purposes again,
526
00:42:58.039 --> 00:43:00.920
I'll probably be a little a little
sad. Or what a minute,
527
00:43:00.960 --> 00:43:04.559
you mentioned web pack. Uh,
maybe you mentioned it before and I kind
528
00:43:04.559 --> 00:43:07.400
of missed it. But does that
mean that Dino also has a built in
529
00:43:07.440 --> 00:43:12.960
bundler? So there was there is
a was a built in bundler that was
530
00:43:13.000 --> 00:43:16.400
deprecated in uh, you know,
a previous version of Dino. It's something
531
00:43:16.400 --> 00:43:20.960
that we're kind of looking at again, but like, yes, build works
532
00:43:21.000 --> 00:43:23.599
pretty well in the Dino ecosystem,
like for that purpose, So it hasn't
533
00:43:23.639 --> 00:43:32.440
been like super high priority. But
the webpack as like a way of running
534
00:43:34.320 --> 00:43:38.440
like built like transpiling server side code
even was something that I had to contend
535
00:43:38.480 --> 00:43:43.760
with at least in my you know
projects that we're using notes, So like
536
00:43:44.079 --> 00:43:46.559
compiling like s CSS say, like
as a part of you know, those
537
00:43:46.559 --> 00:43:52.280
projects. So a lot of those
tools I find I need to use less
538
00:43:52.360 --> 00:43:58.320
in uh in Dino, which show
kind of oh go for a truck.
539
00:43:58.400 --> 00:44:00.880
Sorry, I was gonna pushed us
back to the story just a little bit.
540
00:44:01.679 --> 00:44:05.920
Yeah, So it wasn't any one
particular project. It was just kind
541
00:44:05.960 --> 00:44:12.400
of your workflow that pushed you toward
Dino. It sounds like, I guess
542
00:44:12.400 --> 00:44:15.280
my other question is, and I'm
always curious about this, is right now
543
00:44:15.320 --> 00:44:20.840
you're actually working for the organization that
gives us Dino. How did that come
544
00:44:20.880 --> 00:44:23.360
about? Was it just your involvement
in the project or was there something else?
545
00:44:23.400 --> 00:44:30.880
Did you know someone I've been sort
of around the project for some amount
546
00:44:30.920 --> 00:44:36.920
of time, but they decided they
wanted to like have a formal Devreux program
547
00:44:37.559 --> 00:44:39.960
and I actually wasn't aware of it, but somebody from the team reached out
548
00:44:39.960 --> 00:44:43.519
to me and it was like,
Hey, we're looking at doing a devre
549
00:44:43.679 --> 00:44:45.599
program. Is this something you'd be
interested in? I was like, uh,
550
00:44:45.719 --> 00:44:50.360
yeah, yeah, I totally would
be interested because I had been pretty
551
00:44:50.360 --> 00:44:54.039
stoked about the technology for a while. So it kind of came through some
552
00:44:54.079 --> 00:44:59.880
outreach from the company at the time. Okay, cool, if I'm pulling
553
00:45:00.079 --> 00:45:04.039
us back a little bit towards the
technology side. Uh, it seems that
554
00:45:04.239 --> 00:45:09.679
more and more NODE in the context
of full stack applications will be running in
555
00:45:09.760 --> 00:45:15.360
the context of some sort of meta
framework like it won't you might not be
556
00:45:15.519 --> 00:45:20.519
using node or on its own,
you might be using it with the next
557
00:45:20.559 --> 00:45:28.960
GS or an ASTRO or you know
whatever. And so my question is,
558
00:45:29.480 --> 00:45:36.800
how does Dino fit into this kind
of brave new world of meta frameworks that
559
00:45:36.960 --> 00:45:43.599
are full stack? Does it just
work out of the box, like when
560
00:45:43.639 --> 00:45:49.679
I when I install next GS,
how you know what? How does you
561
00:45:49.880 --> 00:45:57.719
know fit into that installation process?
So there's kind of a spectrum of how
562
00:45:57.800 --> 00:46:00.480
well do you know works with a
lot of the meta frameworks in the NOE
563
00:46:00.480 --> 00:46:05.519
ecosystem, but even just within if
you're just talking about like first party like
564
00:46:05.639 --> 00:46:09.679
Dino frameworks, you will probably be
using some kind of meta framework along with
565
00:46:09.800 --> 00:46:16.239
Dino. Fresh is kind of the
first party one that the Dino team maintains,
566
00:46:16.840 --> 00:46:22.480
which is sort of designed to run
on edge servers and implements like an
567
00:46:22.480 --> 00:46:28.119
island architecture similar similar to ASTRO.
And there's a lot of other frameworks I'm
568
00:46:28.159 --> 00:46:31.360
doing it in that in that way, but the assumption is that you know,
569
00:46:31.480 --> 00:46:36.440
zero JavaScript is sent to the client
by default, and we push more
570
00:46:36.480 --> 00:46:42.079
rendering to the to the server.
So certainly that's one of the options.
571
00:46:42.119 --> 00:46:45.480
Another meta framework that works really well
in just before you move on to the
572
00:46:45.719 --> 00:46:49.880
to another one. Y correct me
if I'm wrong. I think that Fresh
573
00:46:50.039 --> 00:46:52.840
is kind of built on on pre
Act, right it is. Yeah,
574
00:46:52.920 --> 00:46:58.719
So actually one of the maintainers of
pre Act, Marvin Hagemeister, is a
575
00:46:58.719 --> 00:47:02.960
member of the Dono team now and
as kind of primary maintainer of Fresh as
576
00:47:02.960 --> 00:47:08.920
well. So yeah, great,
definitely core technology there. Yeah, and
577
00:47:09.000 --> 00:47:13.320
then if for other I mean,
there's certainly other meta frameworks that you can
578
00:47:13.440 --> 00:47:16.639
use in Dino. The other like
notable one i'd point out is Hono,
579
00:47:16.800 --> 00:47:22.119
which is maintained by the cloud Flare
team. Actually is sort of like the
580
00:47:22.159 --> 00:47:28.159
spiritual successor I would say to like
Express and Sinatra from the Ruby world,
581
00:47:29.039 --> 00:47:31.920
where I've found Hono to scale up
like pretty nicely, So it can start
582
00:47:31.960 --> 00:47:37.519
from like single file web servers,
and you know, it actually scales up
583
00:47:37.559 --> 00:47:44.239
to reasonably complex use cases pretty well. So Hono and and Fresh are probably
584
00:47:44.280 --> 00:47:47.960
two of the best options that exist
just that work natively in Dino, but
585
00:47:49.000 --> 00:47:52.760
from the no ecosystem that that's like
one of the big challenges that we're trying
586
00:47:52.800 --> 00:47:57.480
to address with Dino two is getting
more of those meta frameworks to work really
587
00:47:57.519 --> 00:48:00.519
well in in Dino. Some of
the work pretty well today. So like
588
00:48:00.559 --> 00:48:05.920
if you worked a lot of the
frameworks that use VET as a build to
589
00:48:06.239 --> 00:48:09.880
in under the covers, so like
Astro would be one of them, speltcarts,
590
00:48:10.639 --> 00:48:15.800
yeah, noxt would be would be
another. Those frameworks tend to work
591
00:48:15.840 --> 00:48:21.840
pretty well in Dino because VET works
quite well for the most part in in
592
00:48:21.920 --> 00:48:27.559
Dino. So a lot of those
build steps work mostly out of the box.
593
00:48:28.400 --> 00:48:31.119
Like there's some edge cases depending on
like which parts of the ecosystem you're
594
00:48:31.119 --> 00:48:35.440
trying to leverage, there might be
plugins that may or may not work.
595
00:48:35.519 --> 00:48:39.440
But yeah, like the the node
adapter, So Astro has this concept of
596
00:48:39.480 --> 00:48:45.840
adapters which allow you know, server
side rendering in different environments like in cloud,
597
00:48:45.840 --> 00:48:49.360
fliter workers or a node or whatever
it would happen to be. And
598
00:48:50.159 --> 00:48:53.840
there is a Dino Astro adapter which
is a little bit out of repair,
599
00:48:54.559 --> 00:48:59.360
and that's largely largely my fault.
I haven't had a chance to update the
600
00:48:59.480 --> 00:49:04.119
adapter, but the Node adapter for
Astro works works great, and you can
601
00:49:04.199 --> 00:49:09.039
use that today. There's a spel
Kit adapter for Node that works great in
602
00:49:09.119 --> 00:49:15.320
Dino today. There's also like a
community maintained spell Kit adapter that is natively
603
00:49:15.400 --> 00:49:20.000
Dino that works really well. Next
is in a kind of a similar position.
604
00:49:20.119 --> 00:49:22.880
So a lot of those those types
of frameworks do work really well.
605
00:49:23.599 --> 00:49:28.639
Next JS is kind of a different
beast though, and it kind of leverages
606
00:49:28.679 --> 00:49:32.800
a lot of behavior in Node that
we have not been able to model like
607
00:49:32.920 --> 00:49:37.760
one to one in such a way
where like next is a good experience specifically,
608
00:49:37.159 --> 00:49:42.760
but that is an obsession that currently
exists on the Dino team is to
609
00:49:42.760 --> 00:49:46.320
figure out how to make a next
run really well as well. So certainly
610
00:49:46.960 --> 00:49:52.360
a goal. Yeah, that's kind
of important. I mean, not putting
611
00:49:52.360 --> 00:49:55.639
down any of the other frameworks,
but just numbers wise. Next, yes
612
00:49:55.800 --> 00:50:00.360
is more or less like as big
as all the other meta frameworks come buying,
613
00:50:00.519 --> 00:50:06.320
So so yeah, definitely not lost
on the crew here at Dino for
614
00:50:06.360 --> 00:50:12.239
sure is the necessity to have an
acceptable experience there, So I think we'll
615
00:50:12.239 --> 00:50:15.119
get there. But that that is
like a big project for us right now,
616
00:50:15.159 --> 00:50:19.760
and something that we're kind of gating
our two point zero launch on is
617
00:50:19.800 --> 00:50:25.079
like how well we're we feel that
we support those crucial metaphrameworks from note say,
618
00:50:25.079 --> 00:50:31.840
it's the next big thing, right
Dan well played, Steve well played.
619
00:50:32.320 --> 00:50:37.639
Yeah, and especially given that that
works next anyway. Yeah, and
620
00:50:37.039 --> 00:50:42.519
especially given that I work at the
company called Next Insurance that has nothing to
621
00:50:42.559 --> 00:50:47.920
do except that you actually except that
we actually do use it. Uh,
622
00:50:49.840 --> 00:50:52.360
you know. But anyway, the
time for the next question yet, I
623
00:50:52.400 --> 00:50:59.639
mean, I think we're starting we're
starting to approach the end of our show,
624
00:50:59.679 --> 00:51:01.880
and it seems like we're not really
going to be able to cover JSR
625
00:51:01.960 --> 00:51:06.440
this time, so we probably will
need to invite you over again to talk
626
00:51:06.480 --> 00:51:09.400
about it. Yeah. One thing
that I want to to kind of ask
627
00:51:09.440 --> 00:51:15.079
you about before we wrap up is
something that you kind of alluded to multiple
628
00:51:15.119 --> 00:51:19.639
times during the conversation, and that's
the edge computing story. I think there
629
00:51:19.800 --> 00:51:22.800
is, like, this is one
of your strengths, I believe, the
630
00:51:22.840 --> 00:51:28.320
ability to run on the edge.
How does that how do you differ with
631
00:51:28.480 --> 00:51:31.400
in node in that regard? Do
you differ from node? What are the
632
00:51:31.480 --> 00:51:37.079
advantages of running Dino in that scenario. What of the advantages of the edge
633
00:51:37.079 --> 00:51:40.119
in general, So go for it. Yeah, sure, I can try
634
00:51:40.159 --> 00:51:45.639
to yeah, unpack that a little
bit. So the one thing that is
635
00:51:45.039 --> 00:51:51.800
useful about how DINO works is a
lot of the core functionality and Dino is
636
00:51:51.840 --> 00:51:55.679
based on like Web standard APIs that
are available in the browser. And that
637
00:51:55.760 --> 00:52:01.480
becomes important because when you're running JavaScript
on the server on the edge, you
638
00:52:01.519 --> 00:52:07.360
are running it in a vight isolate, which you want to be able to
639
00:52:07.400 --> 00:52:09.519
sort of spin up and tear down
very quickly. And that's kind of one
640
00:52:09.559 --> 00:52:15.840
of the primary advantages of running JavaScript
on the edge is that instead of you
641
00:52:15.880 --> 00:52:19.079
know, a virtual machine that needs
to be sort of spun up and spun
642
00:52:19.199 --> 00:52:22.360
down like with a with a lambda
say, or like some or like another
643
00:52:22.400 --> 00:52:30.800
container hosting UH solution, a jabscript
environment can UH and can manage a pool
644
00:52:30.840 --> 00:52:35.519
of vight isolates similar to like a
browser tab in your in your browser,
645
00:52:36.000 --> 00:52:39.280
which are very sort of cheap and
easy to create and UH and tear down.
646
00:52:39.840 --> 00:52:45.320
So the cold start times for those
isolates can be really uh, really
647
00:52:45.440 --> 00:52:49.559
nice in a lot of scenarios.
And the fact that you know can run
648
00:52:49.599 --> 00:52:54.079
really well in a lightweight, UH
JavaScript environment like that one is one of
649
00:52:54.119 --> 00:53:00.119
the advantages that sort of makes it
work well in that scenario. So Denote
650
00:53:00.639 --> 00:53:06.440
is being used in uh sort of
edge edge functions in a few different contexts.
651
00:53:07.119 --> 00:53:12.559
So like if you use Netlify edge
functions that actually runs on Dino and
652
00:53:12.599 --> 00:53:16.000
Dino's cloud infrastructure sort of behind the
scenes. UH. For a long time,
653
00:53:16.239 --> 00:53:21.360
super Bases edge functions also ran on
our cloud infrastructure. They've since like
654
00:53:21.440 --> 00:53:25.920
taken Dino and created their own edge
infrastructure based on Dino that they're building on
655
00:53:27.039 --> 00:53:29.880
as well, which is awesome they've
done. They've been doing some really cool
656
00:53:29.880 --> 00:53:35.519
work there with the open source run
time. So yeah, so there's I
657
00:53:35.559 --> 00:53:38.679
think it's the relationship between like Dino
being able to run really well in a
658
00:53:38.719 --> 00:53:43.400
browser like environment and the fact that
you need to be able to run those
659
00:53:43.480 --> 00:53:50.559
lightweight V eight isolates on the edge
maybe makes it ideally suited for those environments.
660
00:53:52.239 --> 00:53:57.719
And then I think like the the
advantage generally of doing you know,
661
00:53:58.079 --> 00:54:02.039
processing on the server on the edge
is uh is latency. So if you
662
00:54:02.079 --> 00:54:07.639
can do compute tasks and you know
servers that are geographically close to your users,
663
00:54:08.360 --> 00:54:13.559
that's gonna result in you know,
faster round trips. There can be
664
00:54:13.599 --> 00:54:20.760
like data residency requirements that can be
satisfied potentially through where your code executes.
665
00:54:22.000 --> 00:54:27.400
There's other like types of functionality that
can be UH that is maybe optimally done
666
00:54:27.639 --> 00:54:32.039
on the edge, like whether it's
like manipulating headers for an HDP request or
667
00:54:32.199 --> 00:54:37.800
like doing image processing. There there's
scenarios in which you know, being able
668
00:54:37.840 --> 00:54:44.199
to execute that logic close to users
is is important. Or if you are
669
00:54:44.280 --> 00:54:49.800
doing UH have like an application architecture
that leans heavily on server side rendering,
670
00:54:50.360 --> 00:54:53.440
doing that server side rendering on edge
servers can be can be beneficial as well.
671
00:54:53.480 --> 00:54:58.599
So not every request to generate dynamic
HTML has to go to like a
672
00:54:58.679 --> 00:55:01.599
data center in Virginia. Yeah,
you can do that maybe all closer to
673
00:55:01.599 --> 00:55:06.320
where your users are. The one
thing that you really need to be careful
674
00:55:06.360 --> 00:55:10.400
about is the latency of your access
to the data, because if you're running
675
00:55:10.440 --> 00:55:15.679
compute on the edge but your data
is still back at the data center,
676
00:55:15.360 --> 00:55:22.840
you might actually end up hurting performance
rather than improving it because you use significant
677
00:55:22.920 --> 00:55:27.760
you may significantly increase the latency of
data access. So you really need to
678
00:55:27.920 --> 00:55:32.840
think about that aspect of your solution
or implementation. Yeah, for sure.
679
00:55:32.960 --> 00:55:38.719
I think it's you're starting to see
like more database vendors and those types of
680
00:55:38.719 --> 00:55:44.719
services popping up where they're sort of
natively designed to be access from edge servers,
681
00:55:44.960 --> 00:55:47.519
which is which is cool, but
it is certainly uh, you know,
682
00:55:47.599 --> 00:55:52.559
one of the architectural concerns that you
have to pick through. Now,
683
00:55:52.679 --> 00:55:58.400
one more question that I have is
this. So it's it's Dido dot com,
684
00:55:58.480 --> 00:56:01.719
which means that you're an actual company. You're not just an open source
685
00:56:01.880 --> 00:56:09.119
project, right, So what's how
do you plan to be like, you
686
00:56:09.159 --> 00:56:15.239
know, to make money to be
to make sure that the project survives because
687
00:56:15.280 --> 00:56:21.519
and the company doesn't go under,
Like what's what's the what's the value proposition
688
00:56:21.639 --> 00:56:25.920
in terms of you know, generating
generating funds. Yeah, so it's,
689
00:56:27.199 --> 00:56:31.559
uh, the place where we found
success so far is around like that edge
690
00:56:31.559 --> 00:56:37.159
computing infrastructure. So the one of
the paid offerings that do you know the
691
00:56:37.199 --> 00:56:43.039
company has today is something called sub
hosting, which is a way to like
692
00:56:43.079 --> 00:56:47.719
sort of take untrusted code and execute
it within like a cloud environment. So
693
00:56:47.840 --> 00:56:52.320
like I used to work at Tulio, and Tulio has this thing called Tulio
694
00:56:52.400 --> 00:56:57.199
Functions which is like you can give
Twilio a chunk of JavaScript code and it'll
695
00:56:57.280 --> 00:57:00.559
run that JavaScript code whenever you get
an incoming tech message or phone call or
696
00:57:00.559 --> 00:57:06.400
whatever. And there's actually a lot
of SaaS platforms or developer tool platforms that
697
00:57:06.599 --> 00:57:12.360
want to offer this functionality where we'll
execute some code for you when this integration
698
00:57:12.480 --> 00:57:16.360
event or this other event happens somewhere
in our system. And Dino has a
699
00:57:16.360 --> 00:57:22.039
platform for very quickly building that out
kind of based on this edge computing infrastructure
700
00:57:22.079 --> 00:57:27.719
that we created for Dino deploy,
which is a like an edge function hosting
701
00:57:27.719 --> 00:57:31.800
platform which is sort of generally available
to anyone to you know, you can
702
00:57:31.880 --> 00:57:37.000
run full web applications on it or
specifically you know, edge functions. So
703
00:57:37.519 --> 00:57:42.519
that I think, like the cloud
infrastructure is where a lot of the like
704
00:57:42.639 --> 00:57:46.039
revenue growth is going to be in
the future. But like the open source
705
00:57:46.119 --> 00:57:51.840
run time and also JSR, which
we'll talk about next time, are both
706
00:57:51.920 --> 00:57:57.320
like free and open source and will
be that way sort of indefinitely. And
707
00:57:57.360 --> 00:58:02.480
we think like those two things being
successful as open source projects will be a
708
00:58:02.920 --> 00:58:07.800
headwind for some of like the cloud
based stuff that we think will support the
709
00:58:07.840 --> 00:58:14.239
company. So just to make understand. Yeah, just to make sure that
710
00:58:14.280 --> 00:58:19.400
I understand in a sense, you're
kind of competing with cloud further, cloud
711
00:58:19.440 --> 00:58:24.880
Flare workers, like providing an alternative
to their solution. Yeah, the so
712
00:58:24.960 --> 00:58:30.039
the edge hosting infrastructure is kind of
in the similar similar space to workers.
713
00:58:30.880 --> 00:58:36.880
The sub hosting API that I talked
about for running on trusted code also is
714
00:58:36.960 --> 00:58:40.320
kind of in the same space.
Like cloud Flare has a like an enterprise
715
00:58:40.400 --> 00:58:44.800
offering in that realm. I don't
know if it's self serviced yet, but
716
00:58:44.840 --> 00:58:49.559
there's like a workers for enterprise or
workers for Platforms or something. I think
717
00:58:49.559 --> 00:58:55.000
it's called that does a similar thing. So that's probably the nearest competitive solution.
718
00:58:55.599 --> 00:58:59.239
And I think like the like Dino
and cloud Flare are kind of the
719
00:58:59.280 --> 00:59:04.360
two ways you can do edge compute
these days, like workers and deploy are
720
00:59:04.440 --> 00:59:07.800
kind of the only game in time
in town, so like versal edge functions,
721
00:59:07.800 --> 00:59:12.119
say, like us as workers under
the hood today. So yeah,
722
00:59:12.119 --> 00:59:19.079
so it is kind of similar to
that that solution cool, yeah, yeah,
723
00:59:19.199 --> 00:59:23.400
very cool. Yep. If you
could tell us here within like two
724
00:59:23.480 --> 00:59:27.679
minutes, because I do have a
hard stop at ten thirty mountain time,
725
00:59:28.519 --> 00:59:34.639
two seconds or two minutes what's coming
next in Dino. Yeah, So,
726
00:59:35.199 --> 00:59:38.800
as I kind of have alluded to, like, no compatibility is a huge
727
00:59:39.480 --> 00:59:44.639
focus for the team right now.
So increasing the amount of the note ecosystem
728
00:59:44.719 --> 00:59:52.280
that runs with no configuration within Dino
is kind of the biggest engineering goal in
729
00:59:52.320 --> 00:59:58.760
front of us for the Dino run
time itself. The other other bits that
730
00:59:59.159 --> 01:00:04.159
are coming out are you know,
continued you know, improvement of integration with
731
01:00:04.360 --> 01:00:09.880
JSR and tooling around my publishing to
the JSR registry and making JSR like work
732
01:00:09.920 --> 01:00:15.039
really well across every run time from
you know BUN to d NO to NOD
733
01:00:15.159 --> 01:00:17.920
to cloud flare, workers and browsers
and everything in between. So I think
734
01:00:17.960 --> 01:00:22.519
no compatibility and JSR are going to
be the continued uh you know focus for
735
01:00:22.599 --> 01:00:27.440
us. Awesome, all right,
well, let's go ahead and do our
736
01:00:27.440 --> 01:00:30.320
picks and then we'll wrap up.
Uh Steve, what are your picks?
737
01:00:31.199 --> 01:00:35.599
Oh, We're going to start with
the high point first, Okay, Uh,
738
01:00:36.159 --> 01:00:38.440
so real quick before I get to
the real high point, uh,
739
01:00:38.639 --> 01:00:45.840
blog posts. Interesting when I saw
on acher News today regarding the classic and
740
01:00:45.000 --> 01:00:51.599
long running debate of tabs versus spaces, and the title of the blog post
741
01:00:51.679 --> 01:00:54.719
is new data shows tabs are more
popular than spaces, but spaces users are
742
01:00:54.719 --> 01:01:02.920
happier and and so what it is
is there's a company that surveyed the Lundu
743
01:01:04.199 --> 01:01:08.320
Journal l U N d U k
E and surveyed seventy two hundred IT professionals
744
01:01:08.320 --> 01:01:14.639
and computer nerds, and they asked
all kinds of questions about what they use,
745
01:01:14.679 --> 01:01:19.280
and then tried to associate tabs users
versus spaces users with other things such
746
01:01:19.280 --> 01:01:22.719
as which text editors do they use, what os is do they use,
747
01:01:22.119 --> 01:01:28.559
what web browsers do they use?
And is there an in correlation with age
748
01:01:29.280 --> 01:01:32.639
and politics and so on and so
forth. It's really sort of entertaining.
749
01:01:35.199 --> 01:01:39.199
So I found it quite interesting.
I just put a link in our chat
750
01:01:39.440 --> 01:01:45.079
about the white Space programming language.
Are you familiar with it? Well,
751
01:01:45.079 --> 01:01:52.199
I know what like. White Space
is an actual programming language that just uses
752
01:01:52.280 --> 01:01:57.400
white space characters for programming. So
it uses all the instructions are coded as
753
01:01:57.440 --> 01:02:00.519
space is, you know, spaces, tabs, new lines, stuff like
754
01:02:00.559 --> 01:02:06.880
that. And the advantage is that
you can write your code within the file
755
01:02:07.039 --> 01:02:12.800
of some other programming languages code,
so you can have like two programs in
756
01:02:12.880 --> 01:02:19.000
the same source file and you know
it might be interesting if Dino had built
757
01:02:19.000 --> 01:02:22.519
in support for the white space programming
language. They'll get right on that,
758
01:02:22.639 --> 01:02:27.360
right, Yeah, yeah, exactly, we'll file that away as a high
759
01:02:27.400 --> 01:02:30.320
priority issue for sure. Yeah,
I'm going to guess that with if you're
760
01:02:30.320 --> 01:02:32.119
writing with white spaces, you always
have to use the dart background, right
761
01:02:35.440 --> 01:02:39.239
for sure? Right, okay,
And now for the dad jokes of the
762
01:02:39.280 --> 01:02:44.679
week. So you know, in
the past years, I've done, you
763
01:02:44.719 --> 01:02:47.519
know, a lot of interviewing of
job candidates, and I was and it's
764
01:02:47.559 --> 01:02:52.000
usually me asking the questions. But
this recent guy I was, I was
765
01:02:52.079 --> 01:02:55.159
interviewing and we were talking about money, and he said, well, what
766
01:02:55.199 --> 01:02:59.079
does a competitive salary even mean?
I said, well, it just means
767
01:02:59.079 --> 01:03:06.719
that your salaries can be against your
bills. Ye mm, now this day,
768
01:03:06.840 --> 01:03:09.320
these days, it's not it's it's
not as amusing. Let's put it
769
01:03:10.159 --> 01:03:16.400
as it was, right, the
bills are winning. Do you know that
770
01:03:16.559 --> 01:03:22.239
alligators can live up to live to
be up to seventy years old. That's
771
01:03:22.280 --> 01:03:27.880
why there's a very an increased chance
that they will see you later. All
772
01:03:27.960 --> 01:03:29.639
Right, I like that one.
That was a good one. Actually you
773
01:03:29.679 --> 01:03:32.679
later, alligator? Yeah, And
then uh, some deep thoughts for the
774
01:03:32.719 --> 01:03:38.000
day if any and anybody remembers Jack
Handy from Saturday Night Live. So what
775
01:03:38.159 --> 01:03:44.719
happens if you get scared to death
twice? M hm m hm m hm.
776
01:03:45.199 --> 01:03:50.199
Uh is the s or the C
silent in scent? Mm hmm?
777
01:03:51.159 --> 01:03:54.280
And then finally the same and similar? Are they the same or are they
778
01:03:54.320 --> 01:04:01.440
similar? It's it's like that old
saying that in theory, theory and practice
779
01:04:01.480 --> 01:04:06.880
are the same thing, but in
practice they aren't, right exactly, those
780
01:04:06.920 --> 01:04:10.960
are my picks of the week.
All right, you want to put that
781
01:04:11.119 --> 01:04:15.519
link in to that article in the
comments, and that way we can I
782
01:04:15.639 --> 01:04:17.320
will find that. Yes, all
right, Dan, what are your picks?
783
01:04:19.280 --> 01:04:23.760
Not a lot of picks? This
time? We've started watching a new
784
01:04:24.440 --> 01:04:29.559
TV series on Netflix. It's a
really new one. It's called The Gentleman.
785
01:04:30.239 --> 01:04:35.360
It's an action comedy television series created
by Guy Ritchie. And you know,
786
01:04:35.559 --> 01:04:39.400
with Guy Ritchie, it's it can
be hit or missed, but when
787
01:04:39.400 --> 01:04:43.559
it's a hit, it's a hit. So he created this kind of spin
788
01:04:43.639 --> 01:04:48.920
off from his ninth from his twenty
nineteen film that had the same name,
789
01:04:49.639 --> 01:04:56.679
So it's kind of the same sort
of settings and characters, and so far
790
01:04:56.760 --> 01:05:00.559
we're enjoying it quite a lot too. We really only watch on the one,
791
01:05:00.719 --> 01:05:03.239
the first episode, but so far, so good. Uh. It's
792
01:05:03.440 --> 01:05:09.719
like this uh, this guy that
turns out that he's a duke. He
793
01:05:09.840 --> 01:05:15.880
inherited the title and the state from
his dad, and it turns out that
794
01:05:15.599 --> 01:05:20.280
it's actually the state that his dad
actually rented out the state to the mob
795
01:05:20.800 --> 01:05:27.440
to to pack weed there that they
have like this huge weed factory on there,
796
01:05:27.559 --> 01:05:31.559
and he now has to deal with
all these Mob characters and whatnot.
797
01:05:31.719 --> 01:05:36.519
And you know, it's and you
know, if you've seen Guy Guy Richie's
798
01:05:36.599 --> 01:05:41.559
movies, you know, you know
kind of the setting and how the characters,
799
01:05:42.039 --> 01:05:45.360
the sort of characters that you encounter
there, and you know, so
800
01:05:45.519 --> 01:05:48.360
it's so far, so good.
We are really enjoying it so far.
801
01:05:50.239 --> 01:05:55.599
And I guess, oh, one
more thing is we are I'm kind of
802
01:05:55.719 --> 01:06:00.280
clearing up my my own like personal
library yet at home, like actual books.
803
01:06:00.840 --> 01:06:04.320
Like we've gone to the point that
we had like three rows of books
804
01:06:04.400 --> 01:06:06.920
in the libraries, one behind the
other, and it was kind of,
805
01:06:08.039 --> 01:06:12.519
you know, things are starting to
fall off the shelves. So I'm really
806
01:06:12.599 --> 01:06:16.679
getting rid of various books that I
don't need anymore. And it's interesting to
807
01:06:16.800 --> 01:06:20.079
go, like to go through the
books and decide what which ones you want
808
01:06:20.119 --> 01:06:26.320
to keep in which one you know
you'll give away to a library or whatever.
809
01:06:27.239 --> 01:06:30.960
And I'm thinking of maybe, like
I think, like a few years
810
01:06:31.079 --> 01:06:35.760
back, I did one of some
of my picks, who are about these
811
01:06:35.960 --> 01:06:43.639
old science fiction and fantasy books that
people don't remember anymore. Some of them
812
01:06:43.679 --> 01:06:47.119
are really excellent. Now that I'm
seeing those books again, maybe I'll revisit
813
01:06:47.239 --> 01:06:51.039
that as well. I'm just not
prepared yet. So if people, if
814
01:06:51.239 --> 01:06:58.639
if you guys or listeners are interested
in some excellent, you know, sci
815
01:06:58.760 --> 01:07:01.880
fi books or fantasy books that you
probably haven't heard of before, then let
816
01:07:01.960 --> 01:07:05.800
me know and I'll do that.
And those are my picks for today.
817
01:07:08.360 --> 01:07:11.360
Awesome, all right, I'm gonna
jump in with picks. Now. Y'all
818
01:07:11.440 --> 01:07:15.039
know that I do board games as
part of my picks, so I'll start
819
01:07:15.079 --> 01:07:17.199
out with that. A couple of
weeks ago, I went to a board
820
01:07:17.239 --> 01:07:21.960
game convention with a friend of mine
and we played a game called Apery.
821
01:07:24.159 --> 01:07:28.320
Now, if you're familiar with the
term apiary, it is about bees.
822
01:07:29.199 --> 01:07:31.159
Now, these aren't just any bees. These are space bees, which is
823
01:07:31.320 --> 01:07:38.400
kind of fun, and so the
space bees are out there trying to build
824
01:07:38.480 --> 01:07:43.960
and explore, and so what you
wind up doing is you're building around the
825
01:07:44.039 --> 01:07:48.760
space that your spaceship is on to
be able to do more stuff. Now,
826
01:07:50.599 --> 01:07:55.719
this has a board game weight of
two point ninety six, so it's
827
01:07:55.760 --> 01:07:59.760
a little bit on the complicated end
of games. It was a lot of
828
01:07:59.760 --> 01:08:03.800
fun, and there were some things
that I really liked about it. One
829
01:08:03.840 --> 01:08:08.599
of them is is it kind of
has that worker placement element that you see
830
01:08:08.599 --> 01:08:11.280
in a lot of other games where
you have the little people that you put
831
01:08:11.320 --> 01:08:15.560
out, except this one is actually
a bee, and whenever you bring the
832
01:08:16.000 --> 01:08:21.079
bee worker back, it actually increases
in power, and then once it gets
833
01:08:21.119 --> 01:08:25.840
to four power, when you bring
it back, it hibernates and goes back
834
01:08:25.880 --> 01:08:30.239
to one power. And so there's
a mechanic where you're playing with putting the
835
01:08:30.319 --> 01:08:34.000
bees out, and only level four
bees can do specific work, and so
836
01:08:34.840 --> 01:08:41.279
you're kind of balancing between building up
your ship and the capabilities and bonuses you
837
01:08:41.359 --> 01:08:46.199
get from that and getting the bees
back so that you can do other things.
838
01:08:47.199 --> 01:08:51.800
You can also bump other bees off
of spaces which again sends them back
839
01:08:51.840 --> 01:08:56.439
to your hive and you know,
levels them up, and so you're you're
840
01:08:56.520 --> 01:08:59.680
trying to weigh out how much advantage
you give to other players. When you
841
01:08:59.760 --> 01:09:01.600
do that, it's a lot of
fun, a lot of a lot of
842
01:09:01.680 --> 01:09:06.920
fun. And you you build out
the different spaces with different types of hex
843
01:09:08.199 --> 01:09:13.640
squares or hex spaces, which also
makes sense it's a B game. So
844
01:09:13.760 --> 01:09:17.680
yeah, so I'm gonna pick Apary. It came out last year. It
845
01:09:17.800 --> 01:09:21.199
was one of the hottest games.
It was one of the hardest games to
846
01:09:21.359 --> 01:09:29.760
get on and play at the at
the Board Game Convention because they had uh
847
01:09:30.479 --> 01:09:32.239
was it six I think it was
eight. They had eight hot games you
848
01:09:32.279 --> 01:09:35.720
could go try out and so and
this was one of them, and it
849
01:09:35.880 --> 01:09:39.600
was one of the harder games to
get on. Uh. The other one
850
01:09:39.720 --> 01:09:44.319
was The White Castle, and I'll
probably pick that next week. But yeah,
851
01:09:44.359 --> 01:09:46.159
I really really enjoyed it. Challengers
was another one of those games that
852
01:09:46.199 --> 01:09:50.880
I picked last time. So anyway, APR is my board game pick.
853
01:09:54.600 --> 01:09:58.520
I also and this is a pick
that I may see if I can get
854
01:09:58.600 --> 01:10:02.520
somebody on the podcasts to talk about. But I found that I needed to
855
01:10:02.600 --> 01:10:09.960
automate some stuff off of a website, essentially just to give a little bit
856
01:10:10.000 --> 01:10:14.640
of context. Speaker offered us a
deal if we moved our all of our
857
01:10:15.359 --> 01:10:18.239
podcasts over there. But the problem
is is that when when they imported the
858
01:10:19.520 --> 01:10:27.119
RSS feed, what wound up happening
was they they set up their own pages
859
01:10:27.159 --> 01:10:30.600
for each of our episodes, and
then instead of leaving the link to our
860
01:10:30.880 --> 01:10:33.239
website, they linked to theirs.
And I told them that that was a
861
01:10:33.359 --> 01:10:35.560
no go, right. I was
like, look, it has to link
862
01:10:35.600 --> 01:10:40.119
to our website or nothing. And
so I still kind of want to move
863
01:10:40.159 --> 01:10:44.600
over because they have a lot better
tools for putting the podcast sponsorships in,
864
01:10:44.760 --> 01:10:46.600
and you know, they have a
lot better number tools, and I can
865
01:10:46.680 --> 01:10:51.399
add all of the all of my
co hosts on all the shows as collaborators
866
01:10:51.439 --> 01:10:54.840
on the podcast so they can go
look up the numbers on their own and
867
01:10:54.920 --> 01:10:59.159
things like that. So there are
definite payoffs for this. But I need
868
01:10:59.239 --> 01:11:03.600
to fix that one thing. And
so I tried using Mechanized because I mostly
869
01:11:03.680 --> 01:11:10.640
work in Ruby. But the problem
is is that their page is client side
870
01:11:10.640 --> 01:11:14.880
rendered and Mechanized doesn't plain ice with
those, so it's using react or something.
871
01:11:14.920 --> 01:11:18.600
I didn't really look too hard to
figure that out, but Puppeteer in
872
01:11:18.880 --> 01:11:25.119
JavaScript does, and so I've been
fiddling with that a bit and figuring out
873
01:11:25.199 --> 01:11:30.960
how to Basically, I need it
to download the RSS feed and then which
874
01:11:31.039 --> 01:11:36.199
is just an XML file right,
have it parse out the location and then
875
01:11:36.880 --> 01:11:43.399
navigate the website because they don't have
an API to stick that URL in.
876
01:11:43.840 --> 01:11:45.560
And if I get that figured out, then I can migrate the shows over,
877
01:11:46.159 --> 01:11:49.520
so unless they find me a solution
before then. But anyway, so
878
01:11:49.520 --> 01:11:54.720
I'm gonna pick Puppeteers. Pretty cool, Kevin, what are your picks?
879
01:11:55.680 --> 01:12:00.000
Nice? So from the category of
Netflix shows, I've been watching A House
880
01:12:00.039 --> 01:12:06.600
of Ninja's recently, which is about
a family of ninjas who kind of gave
881
01:12:06.720 --> 01:12:12.319
up their shnobi lifestyle, are trying
to live as a normal family in Japan,
882
01:12:12.479 --> 01:12:15.239
but end up getting kind of sucked
back into the world of you know,
883
01:12:15.520 --> 01:12:20.600
Ninja intrigue, which it's an important
show with subtitles. It is dubbed,
884
01:12:20.640 --> 01:12:25.119
but the dove is pretty bad,
so I would recommend going. I
885
01:12:25.279 --> 01:12:29.680
never watched the dubbed things. If
I can help it. No, Yeah,
886
01:12:29.800 --> 01:12:33.079
the dove is not great, but
the dad jokes from earlier reminded me
887
01:12:33.359 --> 01:12:38.319
of a story about a king once
who loved grass. He loved the smell
888
01:12:38.359 --> 01:12:42.439
of grass, everything about it.
So he summoned his royal builder to his
889
01:12:42.680 --> 01:12:45.119
castle and said, I want you
to rebuild my castle in grass. And
890
01:12:45.239 --> 01:12:48.279
the builder was very skeptical, but
she said, okay, I'll rebuild your
891
01:12:48.399 --> 01:12:55.119
castle in grass. So she created
this massive castle all made out of grass.
892
01:12:55.159 --> 01:12:58.800
The king loved it, and you
know, she stored all of the
893
01:12:58.840 --> 01:13:02.159
old stuff from the prior castle,
like up above the main throne room.
894
01:13:02.760 --> 01:13:06.119
But the first day that the king
was holding court in his grass castle,
895
01:13:08.279 --> 01:13:13.000
he was actually crushed by his previous
throne, which fell through the grass ceiling
896
01:13:13.079 --> 01:13:16.039
because grass is not very good at
bearing weight. And the moral of the
897
01:13:16.079 --> 01:13:25.560
story, of course, is that
people in grasshouses shouldn't stow thrones. Oh
898
01:13:25.840 --> 01:13:29.600
OK, so good, thank you. I always love it when the guests
899
01:13:29.640 --> 01:13:32.720
bring the jokes. So good.
Yeah, all right, I'm sure people
900
01:13:32.720 --> 01:13:36.680
want to great, great, grateful, But yeah, people want to connect
901
01:13:36.720 --> 01:13:40.880
with you. Where do they find
you on the Internet. I'm at Kevin
902
01:13:40.880 --> 01:13:45.199
winnery on Twitter or just k winnery
on GitHub. Would love it if you
903
01:13:45.239 --> 01:13:49.560
would hang out on the Dino discord
as well. It's discord dot gg slash
904
01:13:49.640 --> 01:13:53.920
Dino, so feel free to join
us there. But yeah, those are
905
01:13:53.960 --> 01:13:59.000
probably the big ones. Awesome,
all right, we're up here, so
906
01:13:59.159 --> 01:14:02.279
we really just need to bring Kevin
over again to talk about JSR. That's
907
01:14:02.520 --> 01:14:05.880
uh I think so. Yeah,
I would love to chat about that more.
908
01:14:06.560 --> 01:14:10.479
Yeah, please do it, all
right, folks, still, next
909
01:14:10.520 --> 01:14:14.720
time, max out m hm
1
00:00:06.320 --> 00:00:10.759
Hey, welcome to another episode of
JavaScript Jabber. This week on our panel
2
00:00:10.800 --> 00:00:15.119
we have Steve Edwards and tell you
Jay's not here. I'll do him.
3
00:00:15.400 --> 00:00:20.879
Yo yo yo from very cold and
rainy Portland, which is not out of
4
00:00:20.879 --> 00:00:26.359
the ordinary for this time of year. Dang peer hey from Tel Aviv where
5
00:00:26.399 --> 00:00:30.280
it's still well actually fal Saba,
which is also in Israel. It's still
6
00:00:30.359 --> 00:00:34.320
light outside, which explains why I'm
in Farsabah because I'm still at the office.
7
00:00:34.359 --> 00:00:37.079
As you might be able to tell
from my background if you're watching the
8
00:00:37.920 --> 00:00:42.560
stream or the recorded video, it's
you know, it's daylight savings in the
9
00:00:42.679 --> 00:00:45.600
US and not yet in Israel,
which makes it even earlier for me.
10
00:00:46.320 --> 00:00:50.479
So so yeah, I must say
that is a very distinctive white wall and
11
00:00:50.920 --> 00:00:55.880
whiteboard there with nothing written on it. It stands out. Yeah, somebody
12
00:00:55.920 --> 00:00:58.880
cleaned out the whiteboard, which is
a good thing because it means that there
13
00:00:58.880 --> 00:01:06.680
are no trade secret right awesome.
I'm Charles max Wood from Top End Devs
14
00:01:06.719 --> 00:01:08.840
and I just want to say hi
to all thirty seven people watching us on
15
00:01:10.200 --> 00:01:14.000
x or Twitter, whatever you're calling
it. And we have a special guest
16
00:01:14.000 --> 00:01:15.560
this week that it's Kevin Winnery Kevin, do you want to say hello and
17
00:01:15.599 --> 00:01:19.599
introduce yourself. Yeah, that'd be
great. How's it going, folks.
18
00:01:19.680 --> 00:01:23.439
I'm Kevin. I'm a part of
the Dino team, and I'm coming to
19
00:01:23.519 --> 00:01:26.760
you from Minneapolis, which is not
cold actually as it usually is. It's
20
00:01:26.799 --> 00:01:30.680
actually unseasonably warm for March in Minneapolis, but we'll take it. We can
21
00:01:30.680 --> 00:01:37.280
get a little bit more time outside
without a cod awesome. All right,
22
00:01:37.319 --> 00:01:41.079
Well, we brought you on to
talk a bit about Dino, and I
23
00:01:41.159 --> 00:01:44.599
have to say I was a little
surprised to find that we haven't had an
24
00:01:44.640 --> 00:01:49.319
episode where we talked specifically about Dino. I think we've talked about isn't there
25
00:01:49.319 --> 00:01:55.000
a web framework or something that we
talked about. We mentioned Fresh. I
26
00:01:55.079 --> 00:01:59.359
think we mentioned Fresh, and we
said that we wanted to bring somebody to
27
00:01:59.400 --> 00:02:02.400
talk about Fresh. But I don't
think we actually had an episode about Fresh
28
00:02:02.439 --> 00:02:07.519
either, So maybe we'll take that
this opportunity to also talk about Fresh.
29
00:02:07.959 --> 00:02:12.360
Yeah, for sure, Fresh.
I might have been confused with I know
30
00:02:12.400 --> 00:02:15.439
we did an episode on Bun,
so that may be. Yeah. It
31
00:02:15.479 --> 00:02:19.680
was a great episode, by the
way, even though I didn't participate,
32
00:02:22.000 --> 00:02:24.800
despite the fact that there was no
effect, despite the fact. Yeah,
33
00:02:24.840 --> 00:02:30.520
it was just uh a j And
what's what's the name of the guy who's
34
00:02:30.599 --> 00:02:36.000
doing BUN forget? I forgot his
name. Probably Jared, I would imagine
35
00:02:36.080 --> 00:02:38.919
Jared. Yeah it was Jared.
Yeah it was Jared. I'm pretty sure
36
00:02:38.039 --> 00:02:42.120
it was a great episode. Yeah, Jared, I'm highly recommend it.
37
00:02:42.199 --> 00:02:49.400
Yes, they AJ took the opportunity
to really dive into the nitty gritty details
38
00:02:49.479 --> 00:02:53.680
of what it means to build an
engine. That's kind of how he operates.
39
00:02:53.719 --> 00:02:58.199
But it makes the episodes fun,
so it works. Let's let's jump
40
00:02:58.199 --> 00:03:02.000
in though, and quickly introduce.
I know that probably most of our listeners
41
00:03:02.240 --> 00:03:07.000
have some idea what it is,
but we always have new people. And
42
00:03:07.039 --> 00:03:09.800
by new people, I mean like
new to programming or new to JavaScript who
43
00:03:09.840 --> 00:03:14.439
may not know. So let's give
them a baseline and we'll move up from
44
00:03:14.479 --> 00:03:19.919
there. Yeah sounds great. So
Dino as a JavaScript run time similar to
45
00:03:20.520 --> 00:03:27.240
no JS or BUN and it was
originally created by Ryan Dahl, who was
46
00:03:27.280 --> 00:03:32.759
the author of no JS about ten
going on fifteen years ago now, and
47
00:03:34.199 --> 00:03:38.280
it sort of came out of wanting
to address some problems and some issues that
48
00:03:38.840 --> 00:03:44.719
Ryan had with no JS originally and
some things that kind of felt could have
49
00:03:44.759 --> 00:03:47.879
been done slightly better, so differently
in the JavaScript run time, kind of
50
00:03:47.919 --> 00:03:55.759
built in the modern era. So
Dino has support for Typescript natively, so
51
00:03:55.800 --> 00:04:01.199
instead of just JavaScript code, you
can use typescript code without any third party
52
00:04:01.199 --> 00:04:05.400
tools or a build step, and
for those that are brand new, Typescript
53
00:04:05.479 --> 00:04:10.520
is a compile the JavaScript language which
is strongly typed, kind of similar to
54
00:04:10.599 --> 00:04:14.360
a Java or a c sharp,
and it can help by kind of surfacing
55
00:04:14.400 --> 00:04:18.879
compile time errors and provide type checking
and kind of makes the editing experience a
56
00:04:18.879 --> 00:04:24.720
little bit more on rails in JavaScript, where you could have a predictable interface
57
00:04:25.079 --> 00:04:30.120
that has great ide support and things
like that. Dino also tries very hard
58
00:04:30.160 --> 00:04:35.120
to be as browser like a programming
environment as possible. One thing about no
59
00:04:35.240 --> 00:04:40.560
JS that, as it was originally
created, a lot of the Web standard
60
00:04:40.680 --> 00:04:45.160
APIs that we enjoy in the browser
today didn't exist, so there wasn't really
61
00:04:45.199 --> 00:04:49.759
a module system for creating reusable code. So no js had common js,
62
00:04:49.800 --> 00:04:57.920
which is a older module format that
has since been superseded by ecmscript modules.
63
00:04:58.480 --> 00:05:00.279
There were, you know, no
file system. There is no built in
64
00:05:00.519 --> 00:05:04.519
HGP request API like the fetch API
that we have in the browser today.
65
00:05:04.839 --> 00:05:12.560
So Dono wherever possible tries to implement
browser APIs to expose functionality instead of inventing
66
00:05:12.639 --> 00:05:18.240
kind of new APIs whenever possible.
And another thing with the NOE ecosystem as
67
00:05:18.240 --> 00:05:21.759
it exists today is a lot of
the tooling that you need to be productive,
68
00:05:23.480 --> 00:05:28.160
like a linter, a format,
or a test runner, lots of
69
00:05:28.199 --> 00:05:31.439
these different tools that where you know, in a note project you're usually installing
70
00:05:31.720 --> 00:05:35.839
you know, a dozen or more
dependencies before you even get started, a
71
00:05:35.920 --> 00:05:41.040
lot of those things have kind of
been rolled into the Dino run time itself,
72
00:05:41.120 --> 00:05:44.319
so there's a format or built in, a linter built in. There's
73
00:05:44.360 --> 00:05:50.360
even utility to compile your denote program
into a cross platform executable. So a
74
00:05:50.360 --> 00:05:54.680
lot of the sort of key developer
tools that you'll you'll tend to need in
75
00:05:54.720 --> 00:05:59.879
every project are included out of the
box in Dino. Another thing that DONA
76
00:06:00.480 --> 00:06:04.839
does that is unique to jobscript grun
times is providing kind of granular controls over
77
00:06:04.959 --> 00:06:10.560
the execution environment of your code.
So by default, your code doesn't actually
78
00:06:10.560 --> 00:06:15.199
have access to the file system,
or the system environment or the network you
79
00:06:15.279 --> 00:06:18.639
as the developer kind of have to
opt into letting your code have access to
80
00:06:18.680 --> 00:06:23.759
those things. So say you're running
in a secure CI environment and you don't
81
00:06:23.800 --> 00:06:27.439
want you know, your code and
any you know, dependencies that you're bringing
82
00:06:27.480 --> 00:06:32.120
in to have access to environment variable, say you can execute your code with
83
00:06:32.319 --> 00:06:40.759
the least number of privileges possible within
the underlying execution environment. So that run
84
00:06:40.839 --> 00:06:45.600
time security by default is also something
that's unique to Deno. So, yeah,
85
00:06:45.600 --> 00:06:47.480
it's a jobscript run time. It's
built on Rust in Tokyo. It's
86
00:06:47.560 --> 00:06:54.959
quite fast, especially sort of in
comparison to similar like HGP handling operations that
87
00:06:55.639 --> 00:07:00.600
exist in Note And yeah, we
hope provides just a really nice developer experience
88
00:07:00.720 --> 00:07:03.199
that's a little more you know,
batteries included than something that you might have
89
00:07:03.319 --> 00:07:09.000
in Node today. I have to
ask because you just mentioned that, what
90
00:07:09.160 --> 00:07:13.360
is Tokyo. I'm familiar with Rust
obviously, but I'm not familiar with Tokyo.
91
00:07:13.399 --> 00:07:18.639
What is that? Tokyo is a
RUSS library for doing asynchronous IO operations.
92
00:07:19.120 --> 00:07:25.000
So in Node they have libuv which
kind of provides a similar set of
93
00:07:25.040 --> 00:07:29.920
functionality, and Tokyo is is the
library to do to provide a similar set
94
00:07:29.959 --> 00:07:35.560
of functionality and rust interesting. Uh, and so listening to your description,
95
00:07:35.879 --> 00:07:42.000
I think it might be best summed
up as Dino is Node done right.
96
00:07:44.160 --> 00:07:47.399
I mean, certainly it's was kind
of envisioned in that way of like,
97
00:07:48.000 --> 00:07:53.720
you know, if if we were
to recreate node and kind of with the
98
00:07:53.759 --> 00:07:57.319
context that we have today, Dino
is kind of the attempt at doing that.
99
00:07:57.720 --> 00:08:00.319
I don't know if i'd call it
that indicates that Node was done wrong.
100
00:08:00.399 --> 00:08:03.959
I think it's maybe a better description, say, node is done with
101
00:08:05.120 --> 00:08:07.480
what was available at the time,
and now there's a lot of other things
102
00:08:07.519 --> 00:08:11.040
available and better way to do things, so let's use those. Yeahs is
103
00:08:11.040 --> 00:08:13.439
a long time in tech, you
know, lots of things to learn.
104
00:08:13.560 --> 00:08:18.439
Yeah, And it's not just that, I mean Node kind of paved the
105
00:08:18.480 --> 00:08:22.560
way. So a lot of things, you know, were created in an
106
00:08:22.639 --> 00:08:26.959
ad hoc kind of a way,
and you know, you don't always have
107
00:08:28.120 --> 00:08:31.320
all the context and all the information, and by the time you have a
108
00:08:31.360 --> 00:08:35.600
better understanding of what it is that
you actually want to do or the way
109
00:08:35.639 --> 00:08:41.600
that it should be done, people
are already using whatever you've created, and
110
00:08:41.759 --> 00:08:46.279
much like the web itself, there
are no vackseats. Yeah. Absolutely like
111
00:08:46.879 --> 00:08:52.480
the successive node and NPM just has
like enshrined a lot of those patterns that
112
00:08:52.519 --> 00:08:56.519
we kind of take for granted in
doing super side jobscript today. Yeah,
113
00:08:56.519 --> 00:08:58.279
and common jass is one of those
examples, right, Like there wasn't a
114
00:08:58.320 --> 00:09:03.840
Web standard module API in you know
twenty you know what it was, It
115
00:09:03.840 --> 00:09:07.879
would have been like twenty ten twenty
when like node was still originally being created,
116
00:09:09.480 --> 00:09:11.879
and so common jass was one of
the ideas that was floating around that
117
00:09:11.919 --> 00:09:16.960
they implemented. And yeah, it's
just we've kind of standardized in certain directions
118
00:09:18.120 --> 00:09:20.799
or like we've learned things or you
know, created new technology that didn't exist
119
00:09:20.799 --> 00:09:26.120
in those days. By the way, I think the no go for it,
120
00:09:26.240 --> 00:09:28.960
I was going to say, I
think the no vaccines is really the
121
00:09:30.000 --> 00:09:35.000
best way of putting it where.
Yeah, it's not that node couldn't innovate
122
00:09:35.039 --> 00:09:37.720
in the ways that Dino is.
It's more that, yeah, they had
123
00:09:37.759 --> 00:09:41.240
all of this stuff that you know, had kind of been built onto it
124
00:09:41.279 --> 00:09:46.879
over time that people relied on.
And yeah, I mean we see this
125
00:09:46.919 --> 00:09:52.080
in all kinds of stuff, including
the ECMAScript standard. Right, they don't
126
00:09:52.480 --> 00:09:56.480
they don't kill stuff off, at
least not very often, and so you
127
00:09:56.480 --> 00:09:58.240
know, you have these people that
rely on this stuff, and yeah,
128
00:09:58.240 --> 00:10:01.320
you can't pull it back, and
so the only way to move forward kind
129
00:10:01.320 --> 00:10:05.000
of like what Angler did way back
in the day, right, moving from
130
00:10:05.000 --> 00:10:09.399
one to two, except they just
kept the name and confused a bunch of
131
00:10:09.399 --> 00:10:11.919
people and it cost some issues for
them. But yeah, it's the same
132
00:10:11.960 --> 00:10:15.159
idea where it's Okay, we need
to move forward in these ways, but
133
00:10:15.240 --> 00:10:20.559
we can't do it without breaking compatibility
in the background. I think another great
134
00:10:20.600 --> 00:10:24.799
example of that is the use of
promises and the sync of weight. If
135
00:10:24.840 --> 00:10:28.720
you look at the nod APIs,
you know most of them were created,
136
00:10:30.240 --> 00:10:35.159
at least the fundamental ones were created
before promises were a thing, and certainly
137
00:10:35.200 --> 00:10:41.759
before the JavaScript language had built in
a sinker weight. So it uses different
138
00:10:41.799 --> 00:10:48.799
patterns, uses patterns like calledbacks and
stuff like that. And with Dino,
139
00:10:48.919 --> 00:10:54.039
I believe much of the APIs,
especially because it is trying to use modern
140
00:10:54.120 --> 00:11:01.879
web APIs whenever possible, a lot
of these APIs are promise based fetch yeah,
141
00:11:01.960 --> 00:11:05.519
yeah, I mean, and since
like note of course, like a
142
00:11:05.519 --> 00:11:09.360
lot of the core APIs also provide
a promise based interface that's sort of been
143
00:11:09.399 --> 00:11:13.600
grafted over the top of the callback
based interfaces. But yeah, I mean
144
00:11:13.720 --> 00:11:18.919
a lot of those, you know, the the Web standard APIs like fetch
145
00:11:18.519 --> 00:11:26.279
are you available? The UH and
ECMAScript language features that do appear in node
146
00:11:26.320 --> 00:11:28.879
and they and they will filter their
way into UH, you know, into
147
00:11:28.919 --> 00:11:33.120
note over time too, will usually
show up in DINO first, like for
148
00:11:33.600 --> 00:11:37.000
for example, like top level async
a weight is something that you can do
149
00:11:37.159 --> 00:11:41.600
in DINO, which I think is
behind a flag and Node. I'd have
150
00:11:41.639 --> 00:11:46.919
to actually double check. I'm not
sure if it's available with a flag or
151
00:11:46.960 --> 00:11:50.559
in some other context. But yeah, so like these for of bleeding edge
152
00:11:50.759 --> 00:11:56.159
Ecmoscript language features will tend to make
their way into Deno a little a little
153
00:11:56.159 --> 00:12:03.919
faster as well. Now, one
of the things that NOE or Dino sorry
154
00:12:03.000 --> 00:12:07.799
created when it came about, By
the way, just if everybody, if
155
00:12:07.919 --> 00:12:13.960
our listeners aren't didn't notice, aren't
aware, Dino is literally spelled backwards,
156
00:12:13.039 --> 00:12:18.919
right, that's the point of the
name. Yes, that that is kind
157
00:12:18.960 --> 00:12:20.679
of where it came from. It's
actually like if you were to sort the
158
00:12:20.759 --> 00:12:28.080
characters in note on that is how
you get do you oh cool? So
159
00:12:28.159 --> 00:12:31.159
one of the things that you also
introduced in Dino, as I recall,
160
00:12:31.320 --> 00:12:39.559
is like a quote unquote standard library, a collection of JavaScript or typescript utility
161
00:12:39.639 --> 00:12:46.000
functions and objects and classes and whatnot
that can be used in the code and
162
00:12:46.200 --> 00:12:48.480
if. One of the things,
by the way, that I find kind
163
00:12:48.480 --> 00:12:54.919
of unfortunate is that it seems that
this standard library did not make its way
164
00:12:54.000 --> 00:13:00.840
out of Dino into the JavaScript community
at large. I would have loved to
165
00:13:00.879 --> 00:13:05.960
see a lot of this functionality just
generally available everywhere. Yeah. So the
166
00:13:05.440 --> 00:13:13.000
Yeah, the Deno Standard Library,
at least until recently, was largely mostly
167
00:13:13.080 --> 00:13:16.600
usable in Dino. There are ways
to use it outside of the context of
168
00:13:16.639 --> 00:13:20.759
Dino. With the event of JSR, which is a registry, I don't
169
00:13:20.799 --> 00:13:24.000
know if we'll get into it,
you know, in this sort of conversation.
170
00:13:24.480 --> 00:13:28.639
Uh, the standard library has been
published on JSR now as well,
171
00:13:28.679 --> 00:13:33.720
and since JSR modules can be used
in any runtime environment, the Deno standard
172
00:13:33.759 --> 00:13:37.679
Library is now you know, kind
of available in Node or you know,
173
00:13:37.720 --> 00:13:41.720
in your es build code for that
you create for the browser, or in
174
00:13:41.799 --> 00:13:45.480
bun so a lot of that stuff
kind of has been freed from a Dino
175
00:13:45.559 --> 00:13:50.480
specific packaging. That's excellent. I
really hope that something like that library can
176
00:13:50.559 --> 00:13:58.000
become more than a quote unquote standard
library and actual standard library for JavaScript slash,
177
00:13:58.039 --> 00:14:03.240
acmascript, slash s typescript, that
would be awesome. It just provides
178
00:14:03.279 --> 00:14:07.519
a lot of useful functionality that a
lot of people end up recreating themselves on
179
00:14:07.600 --> 00:14:13.320
as a one off basis. Yeah, yeah, for sure. Hopefully that
180
00:14:13.360 --> 00:14:16.000
will start to make its way out
a little bit as the you know,
181
00:14:16.039 --> 00:14:20.960
as people start you know, adopting
adopting JSR for other purposes to you.
182
00:14:22.320 --> 00:14:26.399
Now, you mentioned that one of
the reasons that Dino can do all this
183
00:14:26.480 --> 00:14:31.600
stuff and kind of you know,
introduced all these innovations is the fact that,
184
00:14:31.919 --> 00:14:39.120
unlike Node that has to contend with
all the legacy packages and legacy code
185
00:14:39.159 --> 00:14:45.679
and legacy functionality, you had the
ability to do a fresh start. I
186
00:14:45.720 --> 00:14:50.759
guess in many ways, Ryan kind
of decided to do Dino because he understood
187
00:14:50.759 --> 00:14:58.840
that he can't do everything that he
wants to do on the existing Node codebase.
188
00:15:00.919 --> 00:15:05.480
So my question then, is like
one of the primary reasons that people
189
00:15:05.679 --> 00:15:13.080
use Node is because of this compatibility
that it has with all these existing modules
190
00:15:13.159 --> 00:15:20.480
and applications and whatnot, and in
many ways they kind of depend on all
191
00:15:20.600 --> 00:15:28.960
this like not necessarily specified behavior that's
built into node, not necessarily documented,
192
00:15:28.080 --> 00:15:33.320
you know, like they depend on
the bugs. So the question is you
193
00:15:33.919 --> 00:15:37.759
kind of I find uside correctly,
you kind of need to compete with that.
194
00:15:37.840 --> 00:15:39.519
I mean, sure, if I'm
starting a new project from scratch,
195
00:15:39.600 --> 00:15:43.600
then maybe I pick Dino, But
then maybe I'm risking the fact that the
196
00:15:43.639 --> 00:15:48.399
package that I really want to use
is not available for Dino. So how
197
00:15:48.440 --> 00:15:54.399
do I contend with that? Yeah, it's it's definitely been like the major
198
00:15:54.519 --> 00:15:56.919
challenge at the core of like how
Dino has evolved. I would say like
199
00:15:56.960 --> 00:16:03.440
over the last five years is like
the gravitational pull of the NPM ecosystem is
200
00:16:03.600 --> 00:16:07.759
pretty strong, and there's just a
lot of tooling and libraries that exists that
201
00:16:07.840 --> 00:16:14.879
exist there that are kind of non
optional in server side JavaScript development today.
202
00:16:15.240 --> 00:16:18.480
So a lot of work on the
Dino team these days goes into our node
203
00:16:18.480 --> 00:16:23.080
compatibility layer, where, yes,
with Dino's design, we do want to
204
00:16:23.279 --> 00:16:29.559
maintain an environment where we do use
ECMAScript modules only, and we don't you
205
00:16:29.600 --> 00:16:33.440
know, support common ass uh you
know as a like outside of this compatibility
206
00:16:33.480 --> 00:16:37.279
layer, and we do want to
favor you know, Web Standard APIs whenever
207
00:16:37.360 --> 00:16:42.960
possible. But the fact that like
the sort of reality is that a lot
208
00:16:44.000 --> 00:16:48.080
of the Node ecosystem is necessary if
you want to be if you would like
209
00:16:48.120 --> 00:16:52.360
to be productive in server side JavaScript
today. So, uh, the node
210
00:16:52.360 --> 00:16:57.759
compatibility layer in Youno allows you to
use just about any package that exists in
211
00:16:59.080 --> 00:17:04.119
NPM, like we have shim APIs
available for most of Node Core, which
212
00:17:04.160 --> 00:17:10.920
then enables a lot of the NPM
ecosystem to function on On Dino, it
213
00:17:11.000 --> 00:17:15.279
is slightly different because the way in
which you'd depend on a package, you
214
00:17:15.319 --> 00:17:18.279
know, could be a little different
in Dino than it was in Node.
215
00:17:18.400 --> 00:17:22.880
But we've also like implemented a lot
of compatibility features. Like you know,
216
00:17:23.519 --> 00:17:29.079
by default in Dino, when you
import a JavaScript file, you have to
217
00:17:29.119 --> 00:17:33.880
include the extension of that file.
And that's for a couple of reasons.
218
00:17:33.000 --> 00:17:36.599
Number, like in the browser,
if you're importing a file, like you
219
00:17:36.680 --> 00:17:41.599
always include the extension of the file. So that's kind of where that design
220
00:17:41.640 --> 00:17:45.519
pattern came from. It's also slightly
more efficient because you know, if you
221
00:17:45.640 --> 00:17:49.400
leave off the file extension, then
the run time has to do a bunch
222
00:17:49.440 --> 00:17:53.200
of checking to see, like are
you actually trying to import a tsx file
223
00:17:53.240 --> 00:17:56.559
a ts file like a JS file
like, and there's a lot of sort
224
00:17:56.559 --> 00:18:03.839
of overhead that comes along with that. Dino provides a mode that is cheekily
225
00:18:03.960 --> 00:18:07.799
probably named sloppy imports, which is
like an option that you can pass into
226
00:18:07.839 --> 00:18:12.759
the run time which is tolerant of
more Node style imports that leave off the
227
00:18:12.920 --> 00:18:18.079
extension. And with a combination of
some of these compatibility features, you can
228
00:18:18.119 --> 00:18:22.519
take a lot of code that was
originally written for noe js and run it
229
00:18:22.599 --> 00:18:27.559
in Dino without really having to change
much of anything. And the big push
230
00:18:27.599 --> 00:18:32.279
for us for Dono two point zero
for this year is like getting to the
231
00:18:32.319 --> 00:18:37.640
point where we feel like the most
vast majority of the most important Node packages
232
00:18:37.559 --> 00:18:41.519
just work in Dino, and I
don't know if we'll ever Like our goal
233
00:18:41.559 --> 00:18:47.039
isn't explicit to get to like being
a drop in replacement for node necessarily,
234
00:18:47.480 --> 00:18:49.720
but we want next js to work
on Dino, Like we want, you
235
00:18:49.720 --> 00:18:52.920
know, all the web frameworks that
you would want to use from the noe
236
00:18:52.960 --> 00:18:59.119
ecosystem to work really well on Dino
as well. So that's probably our biggest
237
00:18:59.160 --> 00:19:04.720
like engineering objective like over the next
several months is just continuing to improve like
238
00:19:04.799 --> 00:19:11.680
the set of compatibility features that we
have for some of those undocumented features.
239
00:19:11.759 --> 00:19:17.359
Like you know, when you NPM
install a module to node modules, you
240
00:19:17.400 --> 00:19:21.359
know, the NPM clients have certain
behavior as far as like how those modules
241
00:19:21.359 --> 00:19:26.799
are unpacked, which then other modules
depend on. Like I think, like
242
00:19:26.799 --> 00:19:30.519
if you install tailwind, it expects
like post CSS or something to be to
243
00:19:30.599 --> 00:19:34.680
be have been already installed, and
it actually introspects the contents of the node
244
00:19:34.680 --> 00:19:41.480
modules folder to do some things to
use that dependency. The note ecosystem is
245
00:19:41.480 --> 00:19:45.720
just kind of full of these little
nooks and crannies and like strange behaviors that
246
00:19:45.799 --> 00:19:48.680
have been built on top of that. We're you know, trying to find
247
00:19:48.680 --> 00:19:55.279
the best way as possible to like
support those while still providing like the DX
248
00:19:55.279 --> 00:19:59.359
that we want to provide through.
You know that this kind of reminds me
249
00:19:59.400 --> 00:20:03.039
of It kind of reminds me of
the Windows world. A lot of our
250
00:20:03.079 --> 00:20:06.720
listeners might be too young to remember
that, but for a long time when
251
00:20:06.720 --> 00:20:14.039
Windows was like the primary platform for
which software was being written, Windows itself
252
00:20:14.119 --> 00:20:18.039
had all these bugs going from version
to version, and they literally had to
253
00:20:18.680 --> 00:20:22.240
you know, when they created a
new version of Windows, maybe even using
254
00:20:22.240 --> 00:20:27.880
a different technology. They often had
to actually emulate buggy behavior just in order
255
00:20:27.920 --> 00:20:33.960
to make sure that older software continued
to run, because you know, if
256
00:20:33.319 --> 00:20:37.880
if you upgraded your Windows, then
all of a sudden your favorite game stopped
257
00:20:37.880 --> 00:20:41.720
working, you would blame Microsoft,
not the game, not the game creator.
258
00:20:41.799 --> 00:20:45.000
Yeah. I was gonna say,
I had to run tie Fighter in
259
00:20:45.119 --> 00:20:48.839
Windows ninety five compatibility mode for a
long time until you know, I found
260
00:20:48.880 --> 00:20:55.839
like a more modern or that I
could use otherwise. So, but I
261
00:20:55.880 --> 00:20:59.119
do have to ask, I mean, if you're putting in all this effort,
262
00:20:59.599 --> 00:21:04.880
and it's seems like a huge amount
of effort into emulating Node on top
263
00:21:04.920 --> 00:21:11.920
of Dino as it were, to
an extent, then like, why do
264
00:21:11.960 --> 00:21:15.599
I want to go with emulation?
Why shouldn't I just pick the original?
265
00:21:15.680 --> 00:21:22.400
What's the main benefit for me,
as a back end JavaScript developer or a
266
00:21:22.480 --> 00:21:29.359
full stack JavaScript developer of using Dino
over Node, especially if I do assume
267
00:21:29.440 --> 00:21:33.359
that I want to be using you
know, all this functionality that exists and
268
00:21:33.440 --> 00:21:36.720
not write everything from scratch. Yeah. So, I mean, I think
269
00:21:36.720 --> 00:21:41.599
there's a couple of reasons. The
first one is probably just reducing kind of
270
00:21:41.640 --> 00:21:47.200
the startup costs and complexity of your
project, where like you do have typescript
271
00:21:47.200 --> 00:21:51.359
built in by default, you have
the Testerlinter format or all of those tools
272
00:21:51.400 --> 00:21:56.119
available out of the box. So
the developer experience of like not having to
273
00:21:56.200 --> 00:22:00.880
manage those things and being able to
keep your code a little leaner and not
274
00:22:02.160 --> 00:22:08.160
have quite so many third party dependencies
is potentially somewhat attractive. Also, like
275
00:22:08.240 --> 00:22:11.759
a lot of the libraries that you
use in Node today probably are just like
276
00:22:11.799 --> 00:22:15.759
a little bit faster on Dino.
So like if an express server that you
277
00:22:15.799 --> 00:22:19.400
wrote a Node is just going to
be probably a little bit faster in Dino
278
00:22:19.440 --> 00:22:22.759
than it is in Uh than it
is running on Node. And kind of
279
00:22:23.519 --> 00:22:27.200
there's a lot of you know,
contextual things there for like which you know
280
00:22:27.279 --> 00:22:33.799
packages and what set of maybe middlewares
you're using. But uh a uh,
281
00:22:33.160 --> 00:22:37.279
I just actually saw a post like
over the weekend about you know, there's
282
00:22:37.319 --> 00:22:42.279
a hdpre framework called oak, which
is like a middleware framework sort of inspired
283
00:22:42.319 --> 00:22:48.279
by Coha, and the author tested
it across you know, BUN and Node
284
00:22:48.319 --> 00:22:53.240
and Dino, uh to kind of
see what the performance characteristics were and know
285
00:22:53.480 --> 00:22:56.920
and Dino and Bun were you know, about the same Bun was actually ran
286
00:22:57.079 --> 00:23:02.759
ran HDP requests slightly fast. There
is like a maybe ten percent increase in
287
00:23:02.880 --> 00:23:07.000
overall throughput, but both were like
twice as fast as Node. So I
288
00:23:07.000 --> 00:23:11.200
think there's kind of some things that
you get for free by switching to switching
289
00:23:11.240 --> 00:23:17.279
to DNA as well, and you
were able to keep or maintain this performance
290
00:23:17.400 --> 00:23:22.319
benefit even when adding the backward compatibility
with node. I mean, that would
291
00:23:22.319 --> 00:23:27.000
seem to be the challenge. I
would imagine that with node improving performance in
292
00:23:27.079 --> 00:23:33.839
a lot of places kind of runs
smack dab into the problem of maintaining backward
293
00:23:33.920 --> 00:23:41.839
compatibility. Yeah, I mean there's
there's certainly challenges with that, But I
294
00:23:41.880 --> 00:23:48.039
mean, the the shim APIs that
we've created for like the underlying HDDP node
295
00:23:48.079 --> 00:23:52.359
core APIs utilize the same sort of
opter earthly they get to benefit from the
296
00:23:52.400 --> 00:23:59.240
same optimizations we've made in Dino to
make HDP requests handling fast. So those
297
00:23:59.279 --> 00:24:04.599
shim api do tend to perform uh
pretty well. So like we uh you
298
00:24:04.640 --> 00:24:10.039
know, have been doing some testing
with web frameworks like Astro, say,
299
00:24:10.400 --> 00:24:15.359
and just using the sort of node
adapter for Astro, which which enables like
300
00:24:15.400 --> 00:24:19.799
server side rendering of uh you know
pages in that framework. Uh, those
301
00:24:19.880 --> 00:24:26.279
Node APIs actually run slightly faster on
Dino for server side rendering than they do
302
00:24:26.480 --> 00:24:29.759
in in Node. And I think
it's just because of you know, the
303
00:24:29.880 --> 00:24:34.119
underlying infrastructure being you know, slight
like being slightly more performant, not necessarily
304
00:24:34.119 --> 00:24:40.200
because do you know, for you
know, is intrinsically always faster than uh
305
00:24:40.400 --> 00:24:42.400
Node. It's just that, you
know, and it's not like, you
306
00:24:42.400 --> 00:24:48.799
know, Node couldn't be this fast
potentially see as certainly uh, you know,
307
00:24:48.920 --> 00:24:52.519
just as fast as Rust or c
C plus plus or whatever. But
308
00:24:52.759 --> 00:24:56.839
yeah, it's just the uh,
A lot of work has gone into optimizing
309
00:24:56.880 --> 00:25:06.440
the HDP interfaces. I think it's
also legitimate, I would say for the
310
00:25:06.519 --> 00:25:11.400
performance improvements to be Let's put it
differently, it's okay for the shims to
311
00:25:11.519 --> 00:25:17.319
run slower if the code that doesn't
need the shims can run faster, if
312
00:25:17.359 --> 00:25:19.720
you understand what I'm trying to say, So, as long as I don't
313
00:25:19.839 --> 00:25:26.960
need some weird note functionality for backward
compatibility the standard stuff, if that runs
314
00:25:26.000 --> 00:25:32.319
faster, I'm happy with that,
even if the shims themselves like pay a
315
00:25:32.319 --> 00:25:38.960
certain price. But you wanted to
ask something about the built in Typescript support
316
00:25:40.000 --> 00:25:45.640
that you mentioned before. So I
actually posted a link in our chat to
317
00:25:45.759 --> 00:25:51.960
a great quote from Matteo Colina,
who is really deep in the node world,
318
00:25:52.039 --> 00:25:55.480
by the way, is one of
the maintainers I think of note and
319
00:25:55.559 --> 00:26:02.079
he wrote some tweet recently which was
really am using Anie opening to an extent,
320
00:26:02.519 --> 00:26:07.599
which is typescript does not exist.
There is a multiverse of Typescript implementations
321
00:26:07.599 --> 00:26:15.480
depending on the permutation of the configs. And he added also to that this
322
00:26:15.680 --> 00:26:19.000
kind of weirdness are the key reasons
why I'm still skeptical about the typescript.
323
00:26:19.440 --> 00:26:23.559
Now, I'm not skeptical about typescript, but I definitely appreciate what he said.
324
00:26:25.000 --> 00:26:30.160
The fact that the different values that
you put in your ts config file
325
00:26:30.240 --> 00:26:37.519
can significantly impact the functionality the behavior
of typescript, or put another way,
326
00:26:38.119 --> 00:26:42.680
kind of means that typescript is less
than of a language standard and more of
327
00:26:42.680 --> 00:26:49.359
a utility that you can configure in
a sense. So my question is how
328
00:26:49.400 --> 00:26:55.039
does DNO deal with that? I
mean, is it using the same ts
329
00:26:55.079 --> 00:27:02.680
config as typescript as TSC or something
else. How does that work? I
330
00:27:02.680 --> 00:27:06.039
mean, there's a sort of a
I think like what Matteo is saying is
331
00:27:06.079 --> 00:27:11.039
correct, right, Like the like
the configurability of typescript does introduce a lot
332
00:27:11.039 --> 00:27:18.079
of different permutations of how Typescript can
behave one I think benefit in the context
333
00:27:18.119 --> 00:27:22.279
of Dino is that you know,
there is a set of behavior that's sort
334
00:27:22.279 --> 00:27:27.559
of codified and how Typescript runs on
Dino. So there isn't sort of an
335
00:27:27.640 --> 00:27:33.279
unlimited amount of configurability for like compiler
options and stuff like that. There is
336
00:27:33.279 --> 00:27:37.759
certainly is some and there are some
you know of those configure out configuration options
337
00:27:37.759 --> 00:27:45.880
that do still work in Dino,
but the Typescript environment is relatively predictable versus
338
00:27:45.920 --> 00:27:49.400
in in node, where you do
have like kind of full configurability of how
339
00:27:49.559 --> 00:27:53.759
the uh TSK or like how TSC
works at the end of the day.
340
00:27:53.839 --> 00:27:59.680
So yeah, but like the point
stands that, you know, if you
341
00:27:59.799 --> 00:28:03.240
have access to all those compiler options, it makes it very difficult to write
342
00:28:03.279 --> 00:28:07.720
touch script code that you know can
very can predictably run with every set of
343
00:28:07.759 --> 00:28:11.839
compiler options. So am I stuck
then with how you did it then?
344
00:28:14.880 --> 00:28:17.839
To a degree? Right, Like, so there are certain things that are
345
00:28:17.839 --> 00:28:22.039
configurable, there are certain things that
are not so there's probably features of like
346
00:28:22.160 --> 00:28:30.039
ts config that would work in a
node environment that are impossible in Dino just
347
00:28:30.079 --> 00:28:34.079
because we don't support those those options. So it is a constraint that exists
348
00:28:34.119 --> 00:28:38.480
for sure. By the way,
not supporting some ts configure options is actually
349
00:28:38.519 --> 00:28:44.039
a good thing, because I've literally
seen projects that were configured in such a
350
00:28:44.039 --> 00:28:51.599
way that interface definitions weren't each actually
even being used, and the developers didn't
351
00:28:51.599 --> 00:28:59.200
even notice. So like there were
incorrect types and literally types with errors in
352
00:28:59.240 --> 00:29:04.240
them, and the projects seemed to
compile fine because everything that was using like
353
00:29:04.319 --> 00:29:11.240
an unrecognized the imports didn't actually work, and anything that used an interface that
354
00:29:11.359 --> 00:29:17.200
wasn't specified defaulted to any instead.
So they basically had everything as any,
355
00:29:17.599 --> 00:29:22.200
but they thought they were writing typescript
but actually had everything as any, which
356
00:29:22.279 --> 00:29:26.519
is like the worst of all possible
worlds. Yeah, so all the overhead
357
00:29:26.519 --> 00:29:30.519
of using TSC with none of the
actual compile time safety, Yeah, that
358
00:29:30.559 --> 00:29:36.640
seems exactly exactly. So if you're
prevented from being able to do that,
359
00:29:36.759 --> 00:29:40.839
I would definitely count that as a
good thing. But what is the actual
360
00:29:40.920 --> 00:29:47.519
benefit of having the typescript functionality built
into the environment. I mean, let's
361
00:29:47.519 --> 00:29:52.200
put it differently. With Typescript,
I see two main benefits. One is,
362
00:29:52.319 --> 00:29:56.400
while I'm writing the code in the
development environment in let's say VS code,
363
00:29:56.839 --> 00:30:00.720
it does all the type checking for
me, squiggly lines, the completion
364
00:30:02.920 --> 00:30:07.400
stuff like that, and and and
highlights files that has have errors in them
365
00:30:07.440 --> 00:30:15.279
and so forth. The other advantage
is is the actually the actual compilation step
366
00:30:15.279 --> 00:30:18.559
to an extent, because if I
have errors in my you know, type
367
00:30:18.640 --> 00:30:25.519
errors in my code and not a
too funky ts configure settings, then the
368
00:30:25.559 --> 00:30:33.480
built step will actually fail if I
try to build something bad, so because
369
00:30:33.519 --> 00:30:37.960
I'm ignoring squiggly lines and VS code
for some reason. So my question is,
370
00:30:38.480 --> 00:30:42.240
you know, with with dno,
you don't need that built step or
371
00:30:42.279 --> 00:30:47.839
you don't have that built step.
So am I maybe kind of even losing
372
00:30:48.000 --> 00:30:52.319
some benefits of Typescript by working this
way? And alternatively, what are the
373
00:30:52.359 --> 00:30:57.440
advantages of working this way? Actually? So there is still a build step
374
00:30:57.599 --> 00:31:03.200
that happens. Like so there's a
UST based sort of equivalent of TSC which
375
00:31:03.200 --> 00:31:08.200
we would use sort of at run
time to generate the jobscript code because like
376
00:31:08.640 --> 00:31:15.359
Dino runs JavaScript code in VA similar
to how Node does. So we still
377
00:31:15.400 --> 00:31:19.319
do need to transpile typescript before it's
able to run in that environment, because
378
00:31:19.440 --> 00:31:26.319
VA doesn't natively understand typescript, So
there is a sort of build build step
379
00:31:26.359 --> 00:31:30.160
that happens as a result of running
your code on you know, it's just
380
00:31:30.200 --> 00:31:34.839
that it is opaque in that like
to you as a developer, it doesn't
381
00:31:34.880 --> 00:31:38.440
seem like you need to handle that, even though it is happening for you
382
00:31:40.240 --> 00:31:47.319
behind the scenes. I think the
advantage of having typescript built in largely comes
383
00:31:47.400 --> 00:31:51.960
from how you get to manage your
source code. So you know, you
384
00:31:52.039 --> 00:31:56.559
can you know, version controlled typescript, and you can you know, in
385
00:31:56.559 --> 00:32:00.480
the case of uh, you know
JSR, you can publish typescript directly to
386
00:32:00.559 --> 00:32:05.160
the registry. Other typescript developers don't
have to rely on your transpile code.
387
00:32:05.200 --> 00:32:09.759
They could actually import typescript source code
that you have written into their project should
388
00:32:09.759 --> 00:32:14.559
they should they need to. So
being able to just actually manage your your
389
00:32:14.599 --> 00:32:19.759
code base as typescript without having to
think about transporlation as a part of that
390
00:32:20.519 --> 00:32:23.000
ends up being ends up being kind
of nice in a lot of a lot
391
00:32:23.039 --> 00:32:29.920
of different contexts. So it's basically
reducing friction in the development process. Yeah,
392
00:32:29.960 --> 00:32:34.599
yeah, kind of friction, kind
of the overhead of that transportation process.
393
00:32:34.640 --> 00:32:37.720
Like you do, you kind of
don't have to consider it within your
394
00:32:37.720 --> 00:32:39.720
workflow. So side note, really
quick, Am I the only one that
395
00:32:39.759 --> 00:32:45.839
thinks of vegetable juice when I hear
V eight? There was a time I
396
00:32:45.839 --> 00:32:51.799
think I've gotten yeah? Or yeah, I think you know I should have
397
00:32:51.839 --> 00:32:54.640
had a V eight commercials for those
who are too young to remember that anyway,
398
00:32:55.880 --> 00:32:59.599
Yeah, but it's time. Sift
is not the only thing that you
399
00:32:59.640 --> 00:33:04.039
built. I think you mentioned it
that you've also got like a testing framework
400
00:33:04.119 --> 00:33:07.319
built in, You've got a linter
built in. Can you elaborate about these
401
00:33:07.359 --> 00:33:12.880
a little bit? Yeah? Sure, so yeah, so Dino has like
402
00:33:13.599 --> 00:33:15.920
a test command that's built in.
If you run like Dino help after you
403
00:33:15.960 --> 00:33:20.559
install Youno, you can get a
sense of like what all these command line
404
00:33:20.599 --> 00:33:24.359
tools are. But yeah, it
was really about, like there's a lot
405
00:33:24.359 --> 00:33:29.119
of decisions that you make when you're
bootstrapping a node project. They aren't really
406
00:33:29.200 --> 00:33:34.119
that important, like which test framework
you use, possibly not that important,
407
00:33:34.200 --> 00:33:37.480
which linter you use, and what
your linter settings are or what your format
408
00:33:37.559 --> 00:33:40.920
or settings are probably also not important, Like you can kind of bike shed
409
00:33:42.079 --> 00:33:45.880
on these things, if that's if
that is your preference. But also I
410
00:33:45.960 --> 00:33:50.599
just think that, you know,
accepting a set of defaults tends to be
411
00:33:50.720 --> 00:33:53.079
kind of nice. One thing that
I've really noticed is as I've gone between
412
00:33:53.200 --> 00:33:59.559
different Dino projects, because the testing
framework is the same, because the winter
413
00:33:59.599 --> 00:34:02.359
settings are the same and the formatter
settings are the same, Like, it's
414
00:34:02.440 --> 00:34:07.400
much less jarring to kind of go
from one Deno project to the next,
415
00:34:07.440 --> 00:34:10.920
because like the lay of the land
is pretty similar. So like having this
416
00:34:12.559 --> 00:34:16.199
sort of similarity is useful to you
as a developer because it takes like kind
417
00:34:16.199 --> 00:34:20.800
of trivial decisions, you know,
out of your hands. I'm I mean,
418
00:34:20.840 --> 00:34:23.039
you certainly could use other test frameworks
if you want, but you know,
419
00:34:23.039 --> 00:34:27.199
you don't necessarily have to make those
decisions, and it helps you kind
420
00:34:27.199 --> 00:34:30.239
of go from one project to the
next. I used to use Rubion rails
421
00:34:30.280 --> 00:34:32.960
for a long time, and that
was one thing that was kind of nice
422
00:34:34.039 --> 00:34:37.159
about a lot of those projects was
I knew the models were in this folder,
423
00:34:37.280 --> 00:34:42.880
and like a lot of those conventions
kind of helped me like navigate those
424
00:34:42.920 --> 00:34:45.559
projects, even if I was relatively
new to them. Like rails projects can
425
00:34:45.639 --> 00:34:49.880
be very you know, diverse in
a lot of other ways, but like
426
00:34:49.960 --> 00:34:52.960
some of that similarity is helpful in
terms of like the other tools that are
427
00:34:52.960 --> 00:34:58.199
built in. I mentioned Dino compile, which you know, you can point
428
00:34:58.280 --> 00:35:02.239
at a type script source code file
and it generates a binary that can be
429
00:35:02.360 --> 00:35:07.000
run cross platform. So like it's
a good way to kind of compartmentalize like
430
00:35:07.039 --> 00:35:10.360
a web server, say into just
a binary that you can run on you
431
00:35:10.400 --> 00:35:15.760
know, an arbitrary server somewhere.
Or if you're making a command line utility,
432
00:35:15.760 --> 00:35:19.840
it's a really easy way to create
like a cross platform command line utility.
433
00:35:19.960 --> 00:35:27.079
So t which is the package manager
that is was replacing Homebrew, or
434
00:35:27.159 --> 00:35:30.519
like the original author of Homebrew used
Dino to create Tea, which is kind
435
00:35:30.519 --> 00:35:36.000
of his sort of next generation version
of that package manager. And he used
436
00:35:36.000 --> 00:35:42.360
Dino for this reason actually because he
wanted to write typescript, wasn't necessarily interested
437
00:35:42.559 --> 00:35:47.239
in you know, having that transportation
step, and the ability of Dino to
438
00:35:47.400 --> 00:35:53.960
package up a cross platform executable was
convenient there as well. So Dino compiles
439
00:35:54.000 --> 00:36:00.119
super useful. Certainly a few other
nicely. So there's a Dino doc which
440
00:36:00.159 --> 00:36:02.639
is also a built in utility and
you can point it at a typescript file
441
00:36:04.440 --> 00:36:08.239
or a dot D dot t S
file and you'll kind of introspect those files
442
00:36:08.239 --> 00:36:14.920
and generate HTML documentation for your you
know, for your type script source or
443
00:36:14.920 --> 00:36:17.840
from your type configuration. So yeah, so there ends up being kind of
444
00:36:17.840 --> 00:36:22.440
a lot in the box, which
is which is pretty nice. By the
445
00:36:22.519 --> 00:36:28.679
way, does your typescript implementation also
support jastock I yes, it does,
446
00:36:29.119 --> 00:36:30.800
so, yeah, that's that's kind
of where it's pulling a lot of that.
447
00:36:31.039 --> 00:36:36.679
It'll pull documentation content from jas dot
comments if they if they exist,
448
00:36:37.079 --> 00:36:39.519
and a lot and it can guess
a lot just from type information as well.
449
00:36:40.079 --> 00:36:46.599
AJ will be happy. So I'm
old enough to remember the Unix days
450
00:36:47.079 --> 00:36:52.440
that the whole point was one of
the big selling points was that a lot
451
00:36:52.519 --> 00:36:58.800
of those built commands that are were
built into other operating systems in the Unix
452
00:36:58.800 --> 00:37:07.000
world will implement it as separate executables
or and ran as distinct userland processes,
453
00:37:07.239 --> 00:37:13.039
and weren't really built into Unix itself. But now it seems like with you
454
00:37:13.119 --> 00:37:19.519
and with bun that everything is kind
of being built into the main to that
455
00:37:19.719 --> 00:37:24.880
single executable like Dino with the one
command line switch does one thing, with
456
00:37:24.960 --> 00:37:30.519
a different command line switch does some
other thing. What's the motivation? What's
457
00:37:30.559 --> 00:37:35.800
the advantage of bundling all this functionality, you know, some of which could
458
00:37:35.840 --> 00:37:39.159
definitely be like distinct and standalone.
I mean, like the test runner now,
459
00:37:39.360 --> 00:37:44.960
like why what's the benefit of having
it built into that same executable and
460
00:37:45.039 --> 00:37:51.559
not being split off into a separate
executable file. I think like it's kind
461
00:37:51.559 --> 00:37:59.119
of you know, you're deciding where
and when to manage complexity within your project.
462
00:37:59.320 --> 00:38:01.760
Like if you are using uh,
you know, some kind of utility
463
00:38:01.760 --> 00:38:07.639
and user land. The complexity that
comes along with that is keeping that dependency
464
00:38:07.719 --> 00:38:12.360
up to date and whatever plumbing needs
to happen to kind of pipe the input
465
00:38:12.440 --> 00:38:16.000
and output from like one utility into
the next, and uh, you know,
466
00:38:16.079 --> 00:38:22.960
the Unix philosophy is definitely one of
the reasons that that like operating system
467
00:38:22.000 --> 00:38:25.679
has been so popular and continues to
be, uh like one of the best
468
00:38:25.679 --> 00:38:32.440
options for especially like technical you know, sort of technical use cases or like
469
00:38:32.519 --> 00:38:38.360
running code on servers that sort of
thing. But the uh, the price
470
00:38:38.400 --> 00:38:44.599
that you pay in like application programming
tool like uh, you know, something
471
00:38:44.639 --> 00:38:46.920
that's a little higher level, like
a DNO or a node or a bun
472
00:38:47.639 --> 00:38:51.760
is that, you know, the
things that you will tend to need over
473
00:38:51.840 --> 00:38:57.239
and over again. You have to
sort of reinvent every single time you create
474
00:38:57.400 --> 00:39:01.920
a new project, and the overhead
of you know, the startup costs and
475
00:39:02.159 --> 00:39:07.480
maintaining you know, a package dot
Jason that has twelve dependencies in it,
476
00:39:08.280 --> 00:39:13.199
none of which are actually have anything
to do with the functionality or a project.
477
00:39:13.199 --> 00:39:15.880
It's just like the tooling that you
need to actually build your code,
478
00:39:16.000 --> 00:39:21.400
test your code, lint your code, that sort of thing. There's a
479
00:39:21.440 --> 00:39:25.559
price that comes with that as well. There's certainly flexibility. But when you
480
00:39:25.599 --> 00:39:30.159
consider the trade offs of like,
Okay, now I have you know,
481
00:39:30.320 --> 00:39:35.199
this this dependency on jest and it
depends on this other thing. And now
482
00:39:35.239 --> 00:39:38.239
when I run you know, in
PAM install, I get these these conflicts
483
00:39:38.239 --> 00:39:42.440
that I have to kind of work
my way through and then I have to
484
00:39:42.519 --> 00:39:46.639
update, upgrade this dependency, et
cetera. So like taking dependencies out of
485
00:39:46.679 --> 00:39:54.239
the mix reduces the like maintenance complexity
in a pretty meaningful way that I think
486
00:39:54.360 --> 00:40:00.159
is kind of worth the trade off
in at least in this instance. But
487
00:40:00.280 --> 00:40:02.440
you know, there's certainly arguments to
be made the other way that you know,
488
00:40:02.480 --> 00:40:07.440
a lot of these utilities certainly could
be user land tools and evolve separately,
489
00:40:07.960 --> 00:40:13.360
but because they're kind of core to
any application that's non trivial, including
490
00:40:13.400 --> 00:40:17.079
them as part of the platform tends
to be a trade off that that helps.
491
00:40:17.840 --> 00:40:22.840
So if I'm using Dino, then
I likely won't install prettier and es
492
00:40:23.239 --> 00:40:28.280
lint and ts s lint and stuff
like that, or just use whatever is
493
00:40:28.400 --> 00:40:32.320
built in. Yep, that is
the intent that you wouldn't necessarily have to
494
00:40:32.440 --> 00:40:37.280
bring those tools in unless you're using
Dino in the context of an existing Node
495
00:40:37.320 --> 00:40:40.760
project, in which case you might
still you know, have those tools around.
496
00:40:40.840 --> 00:40:44.800
But yeah, and a Dino project, the expectation is you won't need
497
00:40:44.840 --> 00:40:51.280
to have those things. Cool.
I'm kind of curious. I'm going to
498
00:40:51.360 --> 00:40:55.400
change gears on a little bit.
How did you get into Dino, right?
499
00:40:55.440 --> 00:41:00.719
What's your story here? Yes,
so, I've been you know,
500
00:41:00.719 --> 00:41:05.400
a no Jazz user since like I
think the first code I wrote was for
501
00:41:05.719 --> 00:41:09.559
zero point eight of Node, and
at that time I was working at a
502
00:41:09.599 --> 00:41:15.360
company called Twilio, which is like
an API provider like messaging, telephany stuff
503
00:41:15.360 --> 00:41:19.440
like that, and Node was pretty
new and I was like, oh,
504
00:41:19.480 --> 00:41:22.480
Twillia, we should have totally have
like a client library for this node thing.
505
00:41:22.559 --> 00:41:23.440
I think, I think this,
I think it has legs. I
506
00:41:23.480 --> 00:41:28.880
think it's going to go somewhere.
So I wrote like an HGP client wrapper
507
00:41:28.960 --> 00:41:34.360
for like the Twilio API in Node
back in those days and the thing,
508
00:41:34.840 --> 00:41:37.440
and I kind of fell in love
with it because like, finally this my
509
00:41:37.559 --> 00:41:43.920
investment in JavaScript. I could now
use JavaScript a program every kind of thing,
510
00:41:44.079 --> 00:41:49.199
like from servers to front end robots, everything in between. So using
511
00:41:49.280 --> 00:41:52.599
JavaScript is kind of the lingua franc
of web development. Has kind of kept
512
00:41:52.639 --> 00:41:55.679
me involved in server side JavaScript for
a long time. But I think,
513
00:41:55.760 --> 00:42:00.880
like like a lot of Node users, like over time, you started to
514
00:42:00.960 --> 00:42:05.840
get the feeling that Node had jumped
the shark a little bit, where it's
515
00:42:05.920 --> 00:42:08.280
just like I look at a standard
Node project and I look at all these
516
00:42:08.320 --> 00:42:15.039
configuration files that I have without having
even having like written any code like there.
517
00:42:15.079 --> 00:42:20.000
There was certainly a certain amount of
discontent with how much complexity it kind
518
00:42:20.000 --> 00:42:25.440
of crept into the ecosystem. So
the prospect of having this this set of
519
00:42:27.000 --> 00:42:31.400
decisions that are kind of trivial made
for me was was pretty compelling, and
520
00:42:31.480 --> 00:42:37.280
so so like the lure of Dino
as a technology kind of started from there
521
00:42:37.360 --> 00:42:42.400
of like having this sense that you
know, complexity had been creeping into Node
522
00:42:42.480 --> 00:42:46.719
and the experience of using Dino it
was something where like once I used it
523
00:42:46.760 --> 00:42:50.280
once, I was like, okay, like I'll probably be a little grumpy,
524
00:42:50.360 --> 00:42:52.480
like if I have to use Node
without Dno again, because like if
525
00:42:52.480 --> 00:42:57.840
I have to configure you know,
TS configure web pack for these purposes again,
526
00:42:58.039 --> 00:43:00.920
I'll probably be a little a little
sad. Or what a minute,
527
00:43:00.960 --> 00:43:04.559
you mentioned web pack. Uh,
maybe you mentioned it before and I kind
528
00:43:04.559 --> 00:43:07.400
of missed it. But does that
mean that Dino also has a built in
529
00:43:07.440 --> 00:43:12.960
bundler? So there was there is
a was a built in bundler that was
530
00:43:13.000 --> 00:43:16.400
deprecated in uh, you know,
a previous version of Dino. It's something
531
00:43:16.400 --> 00:43:20.960
that we're kind of looking at again, but like, yes, build works
532
00:43:21.000 --> 00:43:23.599
pretty well in the Dino ecosystem,
like for that purpose, So it hasn't
533
00:43:23.639 --> 00:43:32.440
been like super high priority. But
the webpack as like a way of running
534
00:43:34.320 --> 00:43:38.440
like built like transpiling server side code
even was something that I had to contend
535
00:43:38.480 --> 00:43:43.760
with at least in my you know
projects that we're using notes, So like
536
00:43:44.079 --> 00:43:46.559
compiling like s CSS say, like
as a part of you know, those
537
00:43:46.559 --> 00:43:52.280
projects. So a lot of those
tools I find I need to use less
538
00:43:52.360 --> 00:43:58.320
in uh in Dino, which show
kind of oh go for a truck.
539
00:43:58.400 --> 00:44:00.880
Sorry, I was gonna pushed us
back to the story just a little bit.
540
00:44:01.679 --> 00:44:05.920
Yeah, So it wasn't any one
particular project. It was just kind
541
00:44:05.960 --> 00:44:12.400
of your workflow that pushed you toward
Dino. It sounds like, I guess
542
00:44:12.400 --> 00:44:15.280
my other question is, and I'm
always curious about this, is right now
543
00:44:15.320 --> 00:44:20.840
you're actually working for the organization that
gives us Dino. How did that come
544
00:44:20.880 --> 00:44:23.360
about? Was it just your involvement
in the project or was there something else?
545
00:44:23.400 --> 00:44:30.880
Did you know someone I've been sort
of around the project for some amount
546
00:44:30.920 --> 00:44:36.920
of time, but they decided they
wanted to like have a formal Devreux program
547
00:44:37.559 --> 00:44:39.960
and I actually wasn't aware of it, but somebody from the team reached out
548
00:44:39.960 --> 00:44:43.519
to me and it was like,
Hey, we're looking at doing a devre
549
00:44:43.679 --> 00:44:45.599
program. Is this something you'd be
interested in? I was like, uh,
550
00:44:45.719 --> 00:44:50.360
yeah, yeah, I totally would
be interested because I had been pretty
551
00:44:50.360 --> 00:44:54.039
stoked about the technology for a while. So it kind of came through some
552
00:44:54.079 --> 00:44:59.880
outreach from the company at the time. Okay, cool, if I'm pulling
553
00:45:00.079 --> 00:45:04.039
us back a little bit towards the
technology side. Uh, it seems that
554
00:45:04.239 --> 00:45:09.679
more and more NODE in the context
of full stack applications will be running in
555
00:45:09.760 --> 00:45:15.360
the context of some sort of meta
framework like it won't you might not be
556
00:45:15.519 --> 00:45:20.519
using node or on its own,
you might be using it with the next
557
00:45:20.559 --> 00:45:28.960
GS or an ASTRO or you know
whatever. And so my question is,
558
00:45:29.480 --> 00:45:36.800
how does Dino fit into this kind
of brave new world of meta frameworks that
559
00:45:36.960 --> 00:45:43.599
are full stack? Does it just
work out of the box, like when
560
00:45:43.639 --> 00:45:49.679
I when I install next GS,
how you know what? How does you
561
00:45:49.880 --> 00:45:57.719
know fit into that installation process?
So there's kind of a spectrum of how
562
00:45:57.800 --> 00:46:00.480
well do you know works with a
lot of the meta frameworks in the NOE
563
00:46:00.480 --> 00:46:05.519
ecosystem, but even just within if
you're just talking about like first party like
564
00:46:05.639 --> 00:46:09.679
Dino frameworks, you will probably be
using some kind of meta framework along with
565
00:46:09.800 --> 00:46:16.239
Dino. Fresh is kind of the
first party one that the Dino team maintains,
566
00:46:16.840 --> 00:46:22.480
which is sort of designed to run
on edge servers and implements like an
567
00:46:22.480 --> 00:46:28.119
island architecture similar similar to ASTRO.
And there's a lot of other frameworks I'm
568
00:46:28.159 --> 00:46:31.360
doing it in that in that way, but the assumption is that you know,
569
00:46:31.480 --> 00:46:36.440
zero JavaScript is sent to the client
by default, and we push more
570
00:46:36.480 --> 00:46:42.079
rendering to the to the server.
So certainly that's one of the options.
571
00:46:42.119 --> 00:46:45.480
Another meta framework that works really well
in just before you move on to the
572
00:46:45.719 --> 00:46:49.880
to another one. Y correct me
if I'm wrong. I think that Fresh
573
00:46:50.039 --> 00:46:52.840
is kind of built on on pre
Act, right it is. Yeah,
574
00:46:52.920 --> 00:46:58.719
So actually one of the maintainers of
pre Act, Marvin Hagemeister, is a
575
00:46:58.719 --> 00:47:02.960
member of the Dono team now and
as kind of primary maintainer of Fresh as
576
00:47:02.960 --> 00:47:08.920
well. So yeah, great,
definitely core technology there. Yeah, and
577
00:47:09.000 --> 00:47:13.320
then if for other I mean,
there's certainly other meta frameworks that you can
578
00:47:13.440 --> 00:47:16.639
use in Dino. The other like
notable one i'd point out is Hono,
579
00:47:16.800 --> 00:47:22.119
which is maintained by the cloud Flare
team. Actually is sort of like the
580
00:47:22.159 --> 00:47:28.159
spiritual successor I would say to like
Express and Sinatra from the Ruby world,
581
00:47:29.039 --> 00:47:31.920
where I've found Hono to scale up
like pretty nicely, So it can start
582
00:47:31.960 --> 00:47:37.519
from like single file web servers,
and you know, it actually scales up
583
00:47:37.559 --> 00:47:44.239
to reasonably complex use cases pretty well. So Hono and and Fresh are probably
584
00:47:44.280 --> 00:47:47.960
two of the best options that exist
just that work natively in Dino, but
585
00:47:49.000 --> 00:47:52.760
from the no ecosystem that that's like
one of the big challenges that we're trying
586
00:47:52.800 --> 00:47:57.480
to address with Dino two is getting
more of those meta frameworks to work really
587
00:47:57.519 --> 00:48:00.519
well in in Dino. Some of
the work pretty well today. So like
588
00:48:00.559 --> 00:48:05.920
if you worked a lot of the
frameworks that use VET as a build to
589
00:48:06.239 --> 00:48:09.880
in under the covers, so like
Astro would be one of them, speltcarts,
590
00:48:10.639 --> 00:48:15.800
yeah, noxt would be would be
another. Those frameworks tend to work
591
00:48:15.840 --> 00:48:21.840
pretty well in Dino because VET works
quite well for the most part in in
592
00:48:21.920 --> 00:48:27.559
Dino. So a lot of those
build steps work mostly out of the box.
593
00:48:28.400 --> 00:48:31.119
Like there's some edge cases depending on
like which parts of the ecosystem you're
594
00:48:31.119 --> 00:48:35.440
trying to leverage, there might be
plugins that may or may not work.
595
00:48:35.519 --> 00:48:39.440
But yeah, like the the node
adapter, So Astro has this concept of
596
00:48:39.480 --> 00:48:45.840
adapters which allow you know, server
side rendering in different environments like in cloud,
597
00:48:45.840 --> 00:48:49.360
fliter workers or a node or whatever
it would happen to be. And
598
00:48:50.159 --> 00:48:53.840
there is a Dino Astro adapter which
is a little bit out of repair,
599
00:48:54.559 --> 00:48:59.360
and that's largely largely my fault.
I haven't had a chance to update the
600
00:48:59.480 --> 00:49:04.119
adapter, but the Node adapter for
Astro works works great, and you can
601
00:49:04.199 --> 00:49:09.039
use that today. There's a spel
Kit adapter for Node that works great in
602
00:49:09.119 --> 00:49:15.320
Dino today. There's also like a
community maintained spell Kit adapter that is natively
603
00:49:15.400 --> 00:49:20.000
Dino that works really well. Next
is in a kind of a similar position.
604
00:49:20.119 --> 00:49:22.880
So a lot of those those types
of frameworks do work really well.
605
00:49:23.599 --> 00:49:28.639
Next JS is kind of a different
beast though, and it kind of leverages
606
00:49:28.679 --> 00:49:32.800
a lot of behavior in Node that
we have not been able to model like
607
00:49:32.920 --> 00:49:37.760
one to one in such a way
where like next is a good experience specifically,
608
00:49:37.159 --> 00:49:42.760
but that is an obsession that currently
exists on the Dino team is to
609
00:49:42.760 --> 00:49:46.320
figure out how to make a next
run really well as well. So certainly
610
00:49:46.960 --> 00:49:52.360
a goal. Yeah, that's kind
of important. I mean, not putting
611
00:49:52.360 --> 00:49:55.639
down any of the other frameworks,
but just numbers wise. Next, yes
612
00:49:55.800 --> 00:50:00.360
is more or less like as big
as all the other meta frameworks come buying,
613
00:50:00.519 --> 00:50:06.320
So so yeah, definitely not lost
on the crew here at Dino for
614
00:50:06.360 --> 00:50:12.239
sure is the necessity to have an
acceptable experience there, So I think we'll
615
00:50:12.239 --> 00:50:15.119
get there. But that that is
like a big project for us right now,
616
00:50:15.159 --> 00:50:19.760
and something that we're kind of gating
our two point zero launch on is
617
00:50:19.800 --> 00:50:25.079
like how well we're we feel that
we support those crucial metaphrameworks from note say,
618
00:50:25.079 --> 00:50:31.840
it's the next big thing, right
Dan well played, Steve well played.
619
00:50:32.320 --> 00:50:37.639
Yeah, and especially given that that
works next anyway. Yeah, and
620
00:50:37.039 --> 00:50:42.519
especially given that I work at the
company called Next Insurance that has nothing to
621
00:50:42.559 --> 00:50:47.920
do except that you actually except that
we actually do use it. Uh,
622
00:50:49.840 --> 00:50:52.360
you know. But anyway, the
time for the next question yet, I
623
00:50:52.400 --> 00:50:59.639
mean, I think we're starting we're
starting to approach the end of our show,
624
00:50:59.679 --> 00:51:01.880
and it seems like we're not really
going to be able to cover JSR
625
00:51:01.960 --> 00:51:06.440
this time, so we probably will
need to invite you over again to talk
626
00:51:06.480 --> 00:51:09.400
about it. Yeah. One thing
that I want to to kind of ask
627
00:51:09.440 --> 00:51:15.079
you about before we wrap up is
something that you kind of alluded to multiple
628
00:51:15.119 --> 00:51:19.639
times during the conversation, and that's
the edge computing story. I think there
629
00:51:19.800 --> 00:51:22.800
is, like, this is one
of your strengths, I believe, the
630
00:51:22.840 --> 00:51:28.320
ability to run on the edge.
How does that how do you differ with
631
00:51:28.480 --> 00:51:31.400
in node in that regard? Do
you differ from node? What are the
632
00:51:31.480 --> 00:51:37.079
advantages of running Dino in that scenario. What of the advantages of the edge
633
00:51:37.079 --> 00:51:40.119
in general, So go for it. Yeah, sure, I can try
634
00:51:40.159 --> 00:51:45.639
to yeah, unpack that a little
bit. So the one thing that is
635
00:51:45.039 --> 00:51:51.800
useful about how DINO works is a
lot of the core functionality and Dino is
636
00:51:51.840 --> 00:51:55.679
based on like Web standard APIs that
are available in the browser. And that
637
00:51:55.760 --> 00:52:01.480
becomes important because when you're running JavaScript
on the server on the edge, you
638
00:52:01.519 --> 00:52:07.360
are running it in a vight isolate, which you want to be able to
639
00:52:07.400 --> 00:52:09.519
sort of spin up and tear down
very quickly. And that's kind of one
640
00:52:09.559 --> 00:52:15.840
of the primary advantages of running JavaScript
on the edge is that instead of you
641
00:52:15.880 --> 00:52:19.079
know, a virtual machine that needs
to be sort of spun up and spun
642
00:52:19.199 --> 00:52:22.360
down like with a with a lambda
say, or like some or like another
643
00:52:22.400 --> 00:52:30.800
container hosting UH solution, a jabscript
environment can UH and can manage a pool
644
00:52:30.840 --> 00:52:35.519
of vight isolates similar to like a
browser tab in your in your browser,
645
00:52:36.000 --> 00:52:39.280
which are very sort of cheap and
easy to create and UH and tear down.
646
00:52:39.840 --> 00:52:45.320
So the cold start times for those
isolates can be really uh, really
647
00:52:45.440 --> 00:52:49.559
nice in a lot of scenarios.
And the fact that you know can run
648
00:52:49.599 --> 00:52:54.079
really well in a lightweight, UH
JavaScript environment like that one is one of
649
00:52:54.119 --> 00:53:00.119
the advantages that sort of makes it
work well in that scenario. So Denote
650
00:53:00.639 --> 00:53:06.440
is being used in uh sort of
edge edge functions in a few different contexts.
651
00:53:07.119 --> 00:53:12.559
So like if you use Netlify edge
functions that actually runs on Dino and
652
00:53:12.599 --> 00:53:16.000
Dino's cloud infrastructure sort of behind the
scenes. UH. For a long time,
653
00:53:16.239 --> 00:53:21.360
super Bases edge functions also ran on
our cloud infrastructure. They've since like
654
00:53:21.440 --> 00:53:25.920
taken Dino and created their own edge
infrastructure based on Dino that they're building on
655
00:53:27.039 --> 00:53:29.880
as well, which is awesome they've
done. They've been doing some really cool
656
00:53:29.880 --> 00:53:35.519
work there with the open source run
time. So yeah, so there's I
657
00:53:35.559 --> 00:53:38.679
think it's the relationship between like Dino
being able to run really well in a
658
00:53:38.719 --> 00:53:43.400
browser like environment and the fact that
you need to be able to run those
659
00:53:43.480 --> 00:53:50.559
lightweight V eight isolates on the edge
maybe makes it ideally suited for those environments.
660
00:53:52.239 --> 00:53:57.719
And then I think like the the
advantage generally of doing you know,
661
00:53:58.079 --> 00:54:02.039
processing on the server on the edge
is uh is latency. So if you
662
00:54:02.079 --> 00:54:07.639
can do compute tasks and you know
servers that are geographically close to your users,
663
00:54:08.360 --> 00:54:13.559
that's gonna result in you know,
faster round trips. There can be
664
00:54:13.599 --> 00:54:20.760
like data residency requirements that can be
satisfied potentially through where your code executes.
665
00:54:22.000 --> 00:54:27.400
There's other like types of functionality that
can be UH that is maybe optimally done
666
00:54:27.639 --> 00:54:32.039
on the edge, like whether it's
like manipulating headers for an HDP request or
667
00:54:32.199 --> 00:54:37.800
like doing image processing. There there's
scenarios in which you know, being able
668
00:54:37.840 --> 00:54:44.199
to execute that logic close to users
is is important. Or if you are
669
00:54:44.280 --> 00:54:49.800
doing UH have like an application architecture
that leans heavily on server side rendering,
670
00:54:50.360 --> 00:54:53.440
doing that server side rendering on edge
servers can be can be beneficial as well.
671
00:54:53.480 --> 00:54:58.599
So not every request to generate dynamic
HTML has to go to like a
672
00:54:58.679 --> 00:55:01.599
data center in Virginia. Yeah,
you can do that maybe all closer to
673
00:55:01.599 --> 00:55:06.320
where your users are. The one
thing that you really need to be careful
674
00:55:06.360 --> 00:55:10.400
about is the latency of your access
to the data, because if you're running
675
00:55:10.440 --> 00:55:15.679
compute on the edge but your data
is still back at the data center,
676
00:55:15.360 --> 00:55:22.840
you might actually end up hurting performance
rather than improving it because you use significant
677
00:55:22.920 --> 00:55:27.760
you may significantly increase the latency of
data access. So you really need to
678
00:55:27.920 --> 00:55:32.840
think about that aspect of your solution
or implementation. Yeah, for sure.
679
00:55:32.960 --> 00:55:38.719
I think it's you're starting to see
like more database vendors and those types of
680
00:55:38.719 --> 00:55:44.719
services popping up where they're sort of
natively designed to be access from edge servers,
681
00:55:44.960 --> 00:55:47.519
which is which is cool, but
it is certainly uh, you know,
682
00:55:47.599 --> 00:55:52.559
one of the architectural concerns that you
have to pick through. Now,
683
00:55:52.679 --> 00:55:58.400
one more question that I have is
this. So it's it's Dido dot com,
684
00:55:58.480 --> 00:56:01.719
which means that you're an actual company. You're not just an open source
685
00:56:01.880 --> 00:56:09.119
project, right, So what's how
do you plan to be like, you
686
00:56:09.159 --> 00:56:15.239
know, to make money to be
to make sure that the project survives because
687
00:56:15.280 --> 00:56:21.519
and the company doesn't go under,
Like what's what's the what's the value proposition
688
00:56:21.639 --> 00:56:25.920
in terms of you know, generating
generating funds. Yeah, so it's,
689
00:56:27.199 --> 00:56:31.559
uh, the place where we found
success so far is around like that edge
690
00:56:31.559 --> 00:56:37.159
computing infrastructure. So the one of
the paid offerings that do you know the
691
00:56:37.199 --> 00:56:43.039
company has today is something called sub
hosting, which is a way to like
692
00:56:43.079 --> 00:56:47.719
sort of take untrusted code and execute
it within like a cloud environment. So
693
00:56:47.840 --> 00:56:52.320
like I used to work at Tulio, and Tulio has this thing called Tulio
694
00:56:52.400 --> 00:56:57.199
Functions which is like you can give
Twilio a chunk of JavaScript code and it'll
695
00:56:57.280 --> 00:57:00.559
run that JavaScript code whenever you get
an incoming tech message or phone call or
696
00:57:00.559 --> 00:57:06.400
whatever. And there's actually a lot
of SaaS platforms or developer tool platforms that
697
00:57:06.599 --> 00:57:12.360
want to offer this functionality where we'll
execute some code for you when this integration
698
00:57:12.480 --> 00:57:16.360
event or this other event happens somewhere
in our system. And Dino has a
699
00:57:16.360 --> 00:57:22.039
platform for very quickly building that out
kind of based on this edge computing infrastructure
700
00:57:22.079 --> 00:57:27.719
that we created for Dino deploy,
which is a like an edge function hosting
701
00:57:27.719 --> 00:57:31.800
platform which is sort of generally available
to anyone to you know, you can
702
00:57:31.880 --> 00:57:37.000
run full web applications on it or
specifically you know, edge functions. So
703
00:57:37.519 --> 00:57:42.519
that I think, like the cloud
infrastructure is where a lot of the like
704
00:57:42.639 --> 00:57:46.039
revenue growth is going to be in
the future. But like the open source
705
00:57:46.119 --> 00:57:51.840
run time and also JSR, which
we'll talk about next time, are both
706
00:57:51.920 --> 00:57:57.320
like free and open source and will
be that way sort of indefinitely. And
707
00:57:57.360 --> 00:58:02.480
we think like those two things being
successful as open source projects will be a
708
00:58:02.920 --> 00:58:07.800
headwind for some of like the cloud
based stuff that we think will support the
709
00:58:07.840 --> 00:58:14.239
company. So just to make understand. Yeah, just to make sure that
710
00:58:14.280 --> 00:58:19.400
I understand in a sense, you're
kind of competing with cloud further, cloud
711
00:58:19.440 --> 00:58:24.880
Flare workers, like providing an alternative
to their solution. Yeah, the so
712
00:58:24.960 --> 00:58:30.039
the edge hosting infrastructure is kind of
in the similar similar space to workers.
713
00:58:30.880 --> 00:58:36.880
The sub hosting API that I talked
about for running on trusted code also is
714
00:58:36.960 --> 00:58:40.320
kind of in the same space.
Like cloud Flare has a like an enterprise
715
00:58:40.400 --> 00:58:44.800
offering in that realm. I don't
know if it's self serviced yet, but
716
00:58:44.840 --> 00:58:49.559
there's like a workers for enterprise or
workers for Platforms or something. I think
717
00:58:49.559 --> 00:58:55.000
it's called that does a similar thing. So that's probably the nearest competitive solution.
718
00:58:55.599 --> 00:58:59.239
And I think like the like Dino
and cloud Flare are kind of the
719
00:58:59.280 --> 00:59:04.360
two ways you can do edge compute
these days, like workers and deploy are
720
00:59:04.440 --> 00:59:07.800
kind of the only game in time
in town, so like versal edge functions,
721
00:59:07.800 --> 00:59:12.119
say, like us as workers under
the hood today. So yeah,
722
00:59:12.119 --> 00:59:19.079
so it is kind of similar to
that that solution cool, yeah, yeah,
723
00:59:19.199 --> 00:59:23.400
very cool. Yep. If you
could tell us here within like two
724
00:59:23.480 --> 00:59:27.679
minutes, because I do have a
hard stop at ten thirty mountain time,
725
00:59:28.519 --> 00:59:34.639
two seconds or two minutes what's coming
next in Dino. Yeah, So,
726
00:59:35.199 --> 00:59:38.800
as I kind of have alluded to, like, no compatibility is a huge
727
00:59:39.480 --> 00:59:44.639
focus for the team right now.
So increasing the amount of the note ecosystem
728
00:59:44.719 --> 00:59:52.280
that runs with no configuration within Dino
is kind of the biggest engineering goal in
729
00:59:52.320 --> 00:59:58.760
front of us for the Dino run
time itself. The other other bits that
730
00:59:59.159 --> 01:00:04.159
are coming out are you know,
continued you know, improvement of integration with
731
01:00:04.360 --> 01:00:09.880
JSR and tooling around my publishing to
the JSR registry and making JSR like work
732
01:00:09.920 --> 01:00:15.039
really well across every run time from
you know BUN to d NO to NOD
733
01:00:15.159 --> 01:00:17.920
to cloud flare, workers and browsers
and everything in between. So I think
734
01:00:17.960 --> 01:00:22.519
no compatibility and JSR are going to
be the continued uh you know focus for
735
01:00:22.599 --> 01:00:27.440
us. Awesome, all right,
well, let's go ahead and do our
736
01:00:27.440 --> 01:00:30.320
picks and then we'll wrap up.
Uh Steve, what are your picks?
737
01:00:31.199 --> 01:00:35.599
Oh, We're going to start with
the high point first, Okay, Uh,
738
01:00:36.159 --> 01:00:38.440
so real quick before I get to
the real high point, uh,
739
01:00:38.639 --> 01:00:45.840
blog posts. Interesting when I saw
on acher News today regarding the classic and
740
01:00:45.000 --> 01:00:51.599
long running debate of tabs versus spaces, and the title of the blog post
741
01:00:51.679 --> 01:00:54.719
is new data shows tabs are more
popular than spaces, but spaces users are
742
01:00:54.719 --> 01:01:02.920
happier and and so what it is
is there's a company that surveyed the Lundu
743
01:01:04.199 --> 01:01:08.320
Journal l U N d U k
E and surveyed seventy two hundred IT professionals
744
01:01:08.320 --> 01:01:14.639
and computer nerds, and they asked
all kinds of questions about what they use,
745
01:01:14.679 --> 01:01:19.280
and then tried to associate tabs users
versus spaces users with other things such
746
01:01:19.280 --> 01:01:22.719
as which text editors do they use, what os is do they use,
747
01:01:22.119 --> 01:01:28.559
what web browsers do they use?
And is there an in correlation with age
748
01:01:29.280 --> 01:01:32.639
and politics and so on and so
forth. It's really sort of entertaining.
749
01:01:35.199 --> 01:01:39.199
So I found it quite interesting.
I just put a link in our chat
750
01:01:39.440 --> 01:01:45.079
about the white Space programming language.
Are you familiar with it? Well,
751
01:01:45.079 --> 01:01:52.199
I know what like. White Space
is an actual programming language that just uses
752
01:01:52.280 --> 01:01:57.400
white space characters for programming. So
it uses all the instructions are coded as
753
01:01:57.440 --> 01:02:00.519
space is, you know, spaces, tabs, new lines, stuff like
754
01:02:00.559 --> 01:02:06.880
that. And the advantage is that
you can write your code within the file
755
01:02:07.039 --> 01:02:12.800
of some other programming languages code,
so you can have like two programs in
756
01:02:12.880 --> 01:02:19.000
the same source file and you know
it might be interesting if Dino had built
757
01:02:19.000 --> 01:02:22.519
in support for the white space programming
language. They'll get right on that,
758
01:02:22.639 --> 01:02:27.360
right, Yeah, yeah, exactly, we'll file that away as a high
759
01:02:27.400 --> 01:02:30.320
priority issue for sure. Yeah,
I'm going to guess that with if you're
760
01:02:30.320 --> 01:02:32.119
writing with white spaces, you always
have to use the dart background, right
761
01:02:35.440 --> 01:02:39.239
for sure? Right, okay,
And now for the dad jokes of the
762
01:02:39.280 --> 01:02:44.679
week. So you know, in
the past years, I've done, you
763
01:02:44.719 --> 01:02:47.519
know, a lot of interviewing of
job candidates, and I was and it's
764
01:02:47.559 --> 01:02:52.000
usually me asking the questions. But
this recent guy I was, I was
765
01:02:52.079 --> 01:02:55.159
interviewing and we were talking about money, and he said, well, what
766
01:02:55.199 --> 01:02:59.079
does a competitive salary even mean?
I said, well, it just means
767
01:02:59.079 --> 01:03:06.719
that your salaries can be against your
bills. Ye mm, now this day,
768
01:03:06.840 --> 01:03:09.320
these days, it's not it's it's
not as amusing. Let's put it
769
01:03:10.159 --> 01:03:16.400
as it was, right, the
bills are winning. Do you know that
770
01:03:16.559 --> 01:03:22.239
alligators can live up to live to
be up to seventy years old. That's
771
01:03:22.280 --> 01:03:27.880
why there's a very an increased chance
that they will see you later. All
772
01:03:27.960 --> 01:03:29.639
Right, I like that one.
That was a good one. Actually you
773
01:03:29.679 --> 01:03:32.679
later, alligator? Yeah, And
then uh, some deep thoughts for the
774
01:03:32.719 --> 01:03:38.000
day if any and anybody remembers Jack
Handy from Saturday Night Live. So what
775
01:03:38.159 --> 01:03:44.719
happens if you get scared to death
twice? M hm m hm m hm.
776
01:03:45.199 --> 01:03:50.199
Uh is the s or the C
silent in scent? Mm hmm?
777
01:03:51.159 --> 01:03:54.280
And then finally the same and similar? Are they the same or are they
778
01:03:54.320 --> 01:04:01.440
similar? It's it's like that old
saying that in theory, theory and practice
779
01:04:01.480 --> 01:04:06.880
are the same thing, but in
practice they aren't, right exactly, those
780
01:04:06.920 --> 01:04:10.960
are my picks of the week.
All right, you want to put that
781
01:04:11.119 --> 01:04:15.519
link in to that article in the
comments, and that way we can I
782
01:04:15.639 --> 01:04:17.320
will find that. Yes, all
right, Dan, what are your picks?
783
01:04:19.280 --> 01:04:23.760
Not a lot of picks? This
time? We've started watching a new
784
01:04:24.440 --> 01:04:29.559
TV series on Netflix. It's a
really new one. It's called The Gentleman.
785
01:04:30.239 --> 01:04:35.360
It's an action comedy television series created
by Guy Ritchie. And you know,
786
01:04:35.559 --> 01:04:39.400
with Guy Ritchie, it's it can
be hit or missed, but when
787
01:04:39.400 --> 01:04:43.559
it's a hit, it's a hit. So he created this kind of spin
788
01:04:43.639 --> 01:04:48.920
off from his ninth from his twenty
nineteen film that had the same name,
789
01:04:49.639 --> 01:04:56.679
So it's kind of the same sort
of settings and characters, and so far
790
01:04:56.760 --> 01:05:00.559
we're enjoying it quite a lot too. We really only watch on the one,
791
01:05:00.719 --> 01:05:03.239
the first episode, but so far, so good. Uh. It's
792
01:05:03.440 --> 01:05:09.719
like this uh, this guy that
turns out that he's a duke. He
793
01:05:09.840 --> 01:05:15.880
inherited the title and the state from
his dad, and it turns out that
794
01:05:15.599 --> 01:05:20.280
it's actually the state that his dad
actually rented out the state to the mob
795
01:05:20.800 --> 01:05:27.440
to to pack weed there that they
have like this huge weed factory on there,
796
01:05:27.559 --> 01:05:31.559
and he now has to deal with
all these Mob characters and whatnot.
797
01:05:31.719 --> 01:05:36.519
And you know, it's and you
know, if you've seen Guy Guy Richie's
798
01:05:36.599 --> 01:05:41.559
movies, you know, you know
kind of the setting and how the characters,
799
01:05:42.039 --> 01:05:45.360
the sort of characters that you encounter
there, and you know, so
800
01:05:45.519 --> 01:05:48.360
it's so far, so good.
We are really enjoying it so far.
801
01:05:50.239 --> 01:05:55.599
And I guess, oh, one
more thing is we are I'm kind of
802
01:05:55.719 --> 01:06:00.280
clearing up my my own like personal
library yet at home, like actual books.
803
01:06:00.840 --> 01:06:04.320
Like we've gone to the point that
we had like three rows of books
804
01:06:04.400 --> 01:06:06.920
in the libraries, one behind the
other, and it was kind of,
805
01:06:08.039 --> 01:06:12.519
you know, things are starting to
fall off the shelves. So I'm really
806
01:06:12.599 --> 01:06:16.679
getting rid of various books that I
don't need anymore. And it's interesting to
807
01:06:16.800 --> 01:06:20.079
go, like to go through the
books and decide what which ones you want
808
01:06:20.119 --> 01:06:26.320
to keep in which one you know
you'll give away to a library or whatever.
809
01:06:27.239 --> 01:06:30.960
And I'm thinking of maybe, like
I think, like a few years
810
01:06:31.079 --> 01:06:35.760
back, I did one of some
of my picks, who are about these
811
01:06:35.960 --> 01:06:43.639
old science fiction and fantasy books that
people don't remember anymore. Some of them
812
01:06:43.679 --> 01:06:47.119
are really excellent. Now that I'm
seeing those books again, maybe I'll revisit
813
01:06:47.239 --> 01:06:51.039
that as well. I'm just not
prepared yet. So if people, if
814
01:06:51.239 --> 01:06:58.639
if you guys or listeners are interested
in some excellent, you know, sci
815
01:06:58.760 --> 01:07:01.880
fi books or fantasy books that you
probably haven't heard of before, then let
816
01:07:01.960 --> 01:07:05.800
me know and I'll do that.
And those are my picks for today.
817
01:07:08.360 --> 01:07:11.360
Awesome, all right, I'm gonna
jump in with picks. Now. Y'all
818
01:07:11.440 --> 01:07:15.039
know that I do board games as
part of my picks, so I'll start
819
01:07:15.079 --> 01:07:17.199
out with that. A couple of
weeks ago, I went to a board
820
01:07:17.239 --> 01:07:21.960
game convention with a friend of mine
and we played a game called Apery.
821
01:07:24.159 --> 01:07:28.320
Now, if you're familiar with the
term apiary, it is about bees.
822
01:07:29.199 --> 01:07:31.159
Now, these aren't just any bees. These are space bees, which is
823
01:07:31.320 --> 01:07:38.400
kind of fun, and so the
space bees are out there trying to build
824
01:07:38.480 --> 01:07:43.960
and explore, and so what you
wind up doing is you're building around the
825
01:07:44.039 --> 01:07:48.760
space that your spaceship is on to
be able to do more stuff. Now,
826
01:07:50.599 --> 01:07:55.719
this has a board game weight of
two point ninety six, so it's
827
01:07:55.760 --> 01:07:59.760
a little bit on the complicated end
of games. It was a lot of
828
01:07:59.760 --> 01:08:03.800
fun, and there were some things
that I really liked about it. One
829
01:08:03.840 --> 01:08:08.599
of them is is it kind of
has that worker placement element that you see
830
01:08:08.599 --> 01:08:11.280
in a lot of other games where
you have the little people that you put
831
01:08:11.320 --> 01:08:15.560
out, except this one is actually
a bee, and whenever you bring the
832
01:08:16.000 --> 01:08:21.079
bee worker back, it actually increases
in power, and then once it gets
833
01:08:21.119 --> 01:08:25.840
to four power, when you bring
it back, it hibernates and goes back
834
01:08:25.880 --> 01:08:30.239
to one power. And so there's
a mechanic where you're playing with putting the
835
01:08:30.319 --> 01:08:34.000
bees out, and only level four
bees can do specific work, and so
836
01:08:34.840 --> 01:08:41.279
you're kind of balancing between building up
your ship and the capabilities and bonuses you
837
01:08:41.359 --> 01:08:46.199
get from that and getting the bees
back so that you can do other things.
838
01:08:47.199 --> 01:08:51.800
You can also bump other bees off
of spaces which again sends them back
839
01:08:51.840 --> 01:08:56.439
to your hive and you know,
levels them up, and so you're you're
840
01:08:56.520 --> 01:08:59.680
trying to weigh out how much advantage
you give to other players. When you
841
01:08:59.760 --> 01:09:01.600
do that, it's a lot of
fun, a lot of a lot of
842
01:09:01.680 --> 01:09:06.920
fun. And you you build out
the different spaces with different types of hex
843
01:09:08.199 --> 01:09:13.640
squares or hex spaces, which also
makes sense it's a B game. So
844
01:09:13.760 --> 01:09:17.680
yeah, so I'm gonna pick Apary. It came out last year. It
845
01:09:17.800 --> 01:09:21.199
was one of the hottest games.
It was one of the hardest games to
846
01:09:21.359 --> 01:09:29.760
get on and play at the at
the Board Game Convention because they had uh
847
01:09:30.479 --> 01:09:32.239
was it six I think it was
eight. They had eight hot games you
848
01:09:32.279 --> 01:09:35.720
could go try out and so and
this was one of them, and it
849
01:09:35.880 --> 01:09:39.600
was one of the harder games to
get on. Uh. The other one
850
01:09:39.720 --> 01:09:44.319
was The White Castle, and I'll
probably pick that next week. But yeah,
851
01:09:44.359 --> 01:09:46.159
I really really enjoyed it. Challengers
was another one of those games that
852
01:09:46.199 --> 01:09:50.880
I picked last time. So anyway, APR is my board game pick.
853
01:09:54.600 --> 01:09:58.520
I also and this is a pick
that I may see if I can get
854
01:09:58.600 --> 01:10:02.520
somebody on the podcasts to talk about. But I found that I needed to
855
01:10:02.600 --> 01:10:09.960
automate some stuff off of a website, essentially just to give a little bit
856
01:10:10.000 --> 01:10:14.640
of context. Speaker offered us a
deal if we moved our all of our
857
01:10:15.359 --> 01:10:18.239
podcasts over there. But the problem
is is that when when they imported the
858
01:10:19.520 --> 01:10:27.119
RSS feed, what wound up happening
was they they set up their own pages
859
01:10:27.159 --> 01:10:30.600
for each of our episodes, and
then instead of leaving the link to our
860
01:10:30.880 --> 01:10:33.239
website, they linked to theirs.
And I told them that that was a
861
01:10:33.359 --> 01:10:35.560
no go, right. I was
like, look, it has to link
862
01:10:35.600 --> 01:10:40.119
to our website or nothing. And
so I still kind of want to move
863
01:10:40.159 --> 01:10:44.600
over because they have a lot better
tools for putting the podcast sponsorships in,
864
01:10:44.760 --> 01:10:46.600
and you know, they have a
lot better number tools, and I can
865
01:10:46.680 --> 01:10:51.399
add all of the all of my
co hosts on all the shows as collaborators
866
01:10:51.439 --> 01:10:54.840
on the podcast so they can go
look up the numbers on their own and
867
01:10:54.920 --> 01:10:59.159
things like that. So there are
definite payoffs for this. But I need
868
01:10:59.239 --> 01:11:03.600
to fix that one thing. And
so I tried using Mechanized because I mostly
869
01:11:03.680 --> 01:11:10.640
work in Ruby. But the problem
is is that their page is client side
870
01:11:10.640 --> 01:11:14.880
rendered and Mechanized doesn't plain ice with
those, so it's using react or something.
871
01:11:14.920 --> 01:11:18.600
I didn't really look too hard to
figure that out, but Puppeteer in
872
01:11:18.880 --> 01:11:25.119
JavaScript does, and so I've been
fiddling with that a bit and figuring out
873
01:11:25.199 --> 01:11:30.960
how to Basically, I need it
to download the RSS feed and then which
874
01:11:31.039 --> 01:11:36.199
is just an XML file right,
have it parse out the location and then
875
01:11:36.880 --> 01:11:43.399
navigate the website because they don't have
an API to stick that URL in.
876
01:11:43.840 --> 01:11:45.560
And if I get that figured out, then I can migrate the shows over,
877
01:11:46.159 --> 01:11:49.520
so unless they find me a solution
before then. But anyway, so
878
01:11:49.520 --> 01:11:54.720
I'm gonna pick Puppeteers. Pretty cool, Kevin, what are your picks?
879
01:11:55.680 --> 01:12:00.000
Nice? So from the category of
Netflix shows, I've been watching A House
880
01:12:00.039 --> 01:12:06.600
of Ninja's recently, which is about
a family of ninjas who kind of gave
881
01:12:06.720 --> 01:12:12.319
up their shnobi lifestyle, are trying
to live as a normal family in Japan,
882
01:12:12.479 --> 01:12:15.239
but end up getting kind of sucked
back into the world of you know,
883
01:12:15.520 --> 01:12:20.600
Ninja intrigue, which it's an important
show with subtitles. It is dubbed,
884
01:12:20.640 --> 01:12:25.119
but the dove is pretty bad,
so I would recommend going. I
885
01:12:25.279 --> 01:12:29.680
never watched the dubbed things. If
I can help it. No, Yeah,
886
01:12:29.800 --> 01:12:33.079
the dove is not great, but
the dad jokes from earlier reminded me
887
01:12:33.359 --> 01:12:38.319
of a story about a king once
who loved grass. He loved the smell
888
01:12:38.359 --> 01:12:42.439
of grass, everything about it.
So he summoned his royal builder to his
889
01:12:42.680 --> 01:12:45.119
castle and said, I want you
to rebuild my castle in grass. And
890
01:12:45.239 --> 01:12:48.279
the builder was very skeptical, but
she said, okay, I'll rebuild your
891
01:12:48.399 --> 01:12:55.119
castle in grass. So she created
this massive castle all made out of grass.
892
01:12:55.159 --> 01:12:58.800
The king loved it, and you
know, she stored all of the
893
01:12:58.840 --> 01:13:02.159
old stuff from the prior castle,
like up above the main throne room.
894
01:13:02.760 --> 01:13:06.119
But the first day that the king
was holding court in his grass castle,
895
01:13:08.279 --> 01:13:13.000
he was actually crushed by his previous
throne, which fell through the grass ceiling
896
01:13:13.079 --> 01:13:16.039
because grass is not very good at
bearing weight. And the moral of the
897
01:13:16.079 --> 01:13:25.560
story, of course, is that
people in grasshouses shouldn't stow thrones. Oh
898
01:13:25.840 --> 01:13:29.600
OK, so good, thank you. I always love it when the guests
899
01:13:29.640 --> 01:13:32.720
bring the jokes. So good.
Yeah, all right, I'm sure people
900
01:13:32.720 --> 01:13:36.680
want to great, great, grateful, But yeah, people want to connect
901
01:13:36.720 --> 01:13:40.880
with you. Where do they find
you on the Internet. I'm at Kevin
902
01:13:40.880 --> 01:13:45.199
winnery on Twitter or just k winnery
on GitHub. Would love it if you
903
01:13:45.239 --> 01:13:49.560
would hang out on the Dino discord
as well. It's discord dot gg slash
904
01:13:49.640 --> 01:13:53.920
Dino, so feel free to join
us there. But yeah, those are
905
01:13:53.960 --> 01:13:59.000
probably the big ones. Awesome,
all right, we're up here, so
906
01:13:59.159 --> 01:14:02.279
we really just need to bring Kevin
over again to talk about JSR. That's
907
01:14:02.520 --> 01:14:05.880
uh I think so. Yeah,
I would love to chat about that more.
908
01:14:06.560 --> 01:14:10.479
Yeah, please do it, all
right, folks, still, next
909
01:14:10.520 --> 01:14:14.720
time, max out m hm