WEBVTT

1
00:00:05.400 --> 00:00:09.039
<v Speaker 1>Hey, folks, welcome back to another episode of the JavaScript

2
00:00:09.160 --> 00:00:10.240
<v Speaker 1>Jabber Podcast.

3
00:00:10.679 --> 00:00:12.240
<v Speaker 2>This week, on our panel, we have Dan.

4
00:00:12.119 --> 00:00:16.280
<v Speaker 3>Shapiir Hey from a howt tel Aviv a j.

5
00:00:16.359 --> 00:00:22.760
<v Speaker 4>O'Neil yo yo yo, coming at you live from blistering Utah.

6
00:00:24.239 --> 00:00:25.440
<v Speaker 2>Steve Edwards.

7
00:00:26.839 --> 00:00:29.879
<v Speaker 5>Yo, just one yo for me coming from a formerly

8
00:00:29.920 --> 00:00:31.920
<v Speaker 5>warm but now cooling down Portland.

9
00:00:32.759 --> 00:00:36.960
<v Speaker 1>Yeah, I was just outside AJ. It's not terribly hot yet.

10
00:00:37.159 --> 00:00:41.479
<v Speaker 1>It's gonna be hot this afternoon, but yeah, I'm also

11
00:00:41.520 --> 00:00:42.000
<v Speaker 1>in Utah.

12
00:00:42.079 --> 00:00:45.840
<v Speaker 2>On Charles Maxwood. We're talking to Ryan Dall this week.

13
00:00:45.679 --> 00:00:48.759
<v Speaker 1>And Ryan, I'm just gonna do a little bit of

14
00:00:48.759 --> 00:00:50.240
<v Speaker 1>an intro and then you can tell me all the

15
00:00:50.280 --> 00:00:52.200
<v Speaker 1>cool stuff that you've done that I don't mention.

16
00:00:53.640 --> 00:00:57.600
<v Speaker 2>But you're largely credited with creating.

17
00:00:57.399 --> 00:01:01.000
<v Speaker 1>No JS, I know other people we've been involved in that,

18
00:01:01.200 --> 00:01:04.280
<v Speaker 1>and you've moved on to also then create Dino.

19
00:01:07.079 --> 00:01:08.680
<v Speaker 2>I think those are the kind of the big things

20
00:01:08.719 --> 00:01:09.359
<v Speaker 2>that you're known for.

21
00:01:09.439 --> 00:01:11.799
<v Speaker 1>Are there other things that people ought to be aware

22
00:01:11.840 --> 00:01:12.680
<v Speaker 1>of other.

23
00:01:12.560 --> 00:01:15.640
<v Speaker 2>Than that you're a cool guy?

24
00:01:17.000 --> 00:01:21.920
<v Speaker 6>Because I think those are the flagship things that I've done.

25
00:01:23.439 --> 00:01:29.319
<v Speaker 2>Awesome. So I'm just going to jump in. We're kind

26
00:01:29.319 --> 00:01:29.719
<v Speaker 2>of doing this.

27
00:01:29.760 --> 00:01:31.879
<v Speaker 1>We usually record on Mondays, and we're doing this out

28
00:01:31.879 --> 00:01:33.319
<v Speaker 1>of band just so we could get you in and

29
00:01:34.640 --> 00:01:38.680
<v Speaker 1>let people know about what's going on here. So Dino

30
00:01:38.680 --> 00:01:41.799
<v Speaker 1>two is coming out, and I think that's kind of

31
00:01:41.799 --> 00:01:46.599
<v Speaker 1>where we want to start. And you know, you send

32
00:01:46.680 --> 00:01:48.599
<v Speaker 1>us some material, but I kind of like to just

33
00:01:48.719 --> 00:01:50.359
<v Speaker 1>let you explain some of this.

34
00:01:52.120 --> 00:01:53.000
<v Speaker 2>You had Dino.

35
00:01:54.040 --> 00:01:57.439
<v Speaker 1>And you know, Dino's been out for a while and

36
00:01:57.640 --> 00:02:00.599
<v Speaker 1>I know some people are using it and enjoying using it,

37
00:02:01.159 --> 00:02:04.400
<v Speaker 1>But why did you need a DNO two? Like there

38
00:02:04.560 --> 00:02:06.359
<v Speaker 1>were there things that you weren't able to do in

39
00:02:06.439 --> 00:02:08.919
<v Speaker 1>dn O one that you needed to do or is

40
00:02:08.960 --> 00:02:10.520
<v Speaker 1>it just like faster better?

41
00:02:10.599 --> 00:02:12.520
<v Speaker 2>And I don't know.

42
00:02:14.000 --> 00:02:14.240
<v Speaker 3>Yeah.

43
00:02:14.759 --> 00:02:19.520
<v Speaker 6>I mean, first, there is Node, and I think you

44
00:02:19.560 --> 00:02:24.719
<v Speaker 6>know the idea that JavaScript is this language that everybody

45
00:02:24.759 --> 00:02:29.360
<v Speaker 6>knows and it's got a really great VM via Chrome,

46
00:02:29.879 --> 00:02:35.680
<v Speaker 6>this this V eight VM and JavaScript is is you know,

47
00:02:35.800 --> 00:02:41.479
<v Speaker 6>Node was essentially ide eating on how you could take

48
00:02:41.520 --> 00:02:45.080
<v Speaker 6>this client side programming language and attach it to servers

49
00:02:45.240 --> 00:02:47.759
<v Speaker 6>and the fact that when you click on a button

50
00:02:47.840 --> 00:02:50.360
<v Speaker 6>and get a call back, it's pretty similar to a

51
00:02:50.400 --> 00:02:54.039
<v Speaker 6>web server getting a request and getting a callback, and

52
00:02:54.080 --> 00:02:58.479
<v Speaker 6>that event driven programming is actually a pretty optimal way

53
00:02:58.520 --> 00:03:03.960
<v Speaker 6>to structure servers and uh, Node, I guess it goes

54
00:03:03.960 --> 00:03:12.599
<v Speaker 6>without saying these days is pretty popular. So that's project, uh,

55
00:03:13.560 --> 00:03:17.520
<v Speaker 6>you know, be used by I don't know, essentially every website, right,

56
00:03:18.280 --> 00:03:21.039
<v Speaker 6>I'm certain we're recording this on stream yard dot com.

57
00:03:21.080 --> 00:03:24.039
<v Speaker 6>It probably probably uses node in some form or another.

58
00:03:25.120 --> 00:03:28.439
<v Speaker 6>Almost all websites do it. It is in some some

59
00:03:28.520 --> 00:03:32.919
<v Speaker 6>ways the cornerstone of the Internet. And uh, that is

60
00:03:33.199 --> 00:03:36.960
<v Speaker 6>largely because JavaScript is the default programming language and so

61
00:03:37.080 --> 00:03:40.199
<v Speaker 6>important it is. It is not like Java, it is

62
00:03:40.240 --> 00:03:44.639
<v Speaker 6>not like c It is kind of intrinsic to humanity

63
00:03:44.719 --> 00:03:47.280
<v Speaker 6>because so much of the world has been built on

64
00:03:47.360 --> 00:03:49.199
<v Speaker 6>top of web browsers.

65
00:03:49.280 --> 00:03:49.400
<v Speaker 3>Right.

66
00:03:49.479 --> 00:03:51.879
<v Speaker 6>You access your library through the web browser, you access

67
00:03:51.879 --> 00:03:56.120
<v Speaker 6>your bank through the web browser. And this infrastructure is

68
00:03:56.159 --> 00:04:00.360
<v Speaker 6>not going to change anytime soon. It's its future proof

69
00:04:00.400 --> 00:04:02.560
<v Speaker 6>in a certain way. Like I'm pretty sure we'll be

70
00:04:02.639 --> 00:04:07.039
<v Speaker 6>using a GP and CSS five years from now, if

71
00:04:07.080 --> 00:04:10.800
<v Speaker 6>not ten or twenty years from now. And CSS and

72
00:04:11.199 --> 00:04:15.919
<v Speaker 6>and HGP are not dissimilar to JavaScript. They are protocols

73
00:04:15.919 --> 00:04:19.040
<v Speaker 6>that make up the web, and so JavaScript is kind

74
00:04:19.040 --> 00:04:23.759
<v Speaker 6>of future proof in this way. And that is really

75
00:04:23.800 --> 00:04:26.360
<v Speaker 6>the reason that Node has grown so big. I mean,

76
00:04:26.399 --> 00:04:29.879
<v Speaker 6>note was I think I did a pretty good job

77
00:04:30.240 --> 00:04:33.399
<v Speaker 6>attaching a web server to JavaScript. But you know, ultimately

78
00:04:33.439 --> 00:04:38.839
<v Speaker 6>it's kind of the growth of JavaScript that drove notes success.

79
00:04:39.000 --> 00:04:41.519
<v Speaker 6>But you know, Node.

80
00:04:41.319 --> 00:04:45.439
<v Speaker 3>Has before if I can interrupt, because I have to

81
00:04:45.480 --> 00:04:48.519
<v Speaker 3>ask about this before you move on to what came

82
00:04:48.560 --> 00:04:54.639
<v Speaker 3>after Note. So you basically stated here like two big

83
00:04:54.680 --> 00:04:59.480
<v Speaker 3>motivations for the creation of Node, and I'm kind of

84
00:04:59.519 --> 00:05:03.399
<v Speaker 3>curious if they if any one of these two was

85
00:05:03.399 --> 00:05:07.720
<v Speaker 3>the primary one when you when you like envision initially

86
00:05:07.800 --> 00:05:12.439
<v Speaker 3>envisioned it. One was, as you said, using JavaScript, which

87
00:05:12.560 --> 00:05:16.120
<v Speaker 3>is the cornerstone of the web on the server side.

88
00:05:16.639 --> 00:05:22.040
<v Speaker 3>The other being the event model and and you know,

89
00:05:22.199 --> 00:05:25.560
<v Speaker 3>the event loop and and all this mechanism, which, as

90
00:05:25.600 --> 00:05:28.639
<v Speaker 3>you said, turned out to be such a great match

91
00:05:29.399 --> 00:05:32.759
<v Speaker 3>for uh, for the server side, Like a lot of

92
00:05:32.800 --> 00:05:36.680
<v Speaker 3>people initially didn't expect that, and you had the foresight

93
00:05:36.759 --> 00:05:39.600
<v Speaker 3>to see that that it that it is such a

94
00:05:39.600 --> 00:05:45.079
<v Speaker 3>great match. So I'm curious as to which one of

95
00:05:45.199 --> 00:05:49.040
<v Speaker 3>these two was the primary motivation or they like equal.

96
00:05:51.079 --> 00:05:54.720
<v Speaker 6>It was the realization that those two compliment each other,

97
00:05:55.040 --> 00:05:58.079
<v Speaker 6>that that was the creation of Notes. So a little

98
00:05:58.120 --> 00:06:00.639
<v Speaker 6>bit before Note, like you know, let's let's say two

99
00:06:00.680 --> 00:06:06.240
<v Speaker 6>thousand and eight. Two thousand and seven, I was working

100
00:06:06.279 --> 00:06:09.839
<v Speaker 6>on engine X modules. Engine x is a kind of

101
00:06:09.920 --> 00:06:13.040
<v Speaker 6>native web server that is written in C and is

102
00:06:13.199 --> 00:06:17.519
<v Speaker 6>event driven, and at the time, driving event loops was

103
00:06:17.600 --> 00:06:21.439
<v Speaker 6>kind of an unknown subject, like you had to be

104
00:06:21.519 --> 00:06:23.560
<v Speaker 6>a real expert, you had to really know what you

105
00:06:23.560 --> 00:06:26.360
<v Speaker 6>were doing to kind of drive equal In two thousand

106
00:06:26.399 --> 00:06:31.439
<v Speaker 6>and eight, and I was aware that this was kind

107
00:06:31.439 --> 00:06:34.600
<v Speaker 6>of the optimal way to drive web servers as opposed

108
00:06:34.639 --> 00:06:39.680
<v Speaker 6>to starting a thread per request, and I was enthralled

109
00:06:39.720 --> 00:06:42.920
<v Speaker 6>by this thing and looking for ways to make this

110
00:06:43.040 --> 00:06:46.199
<v Speaker 6>easier and bring this to a larger audience of programmers.

111
00:06:46.279 --> 00:06:49.240
<v Speaker 6>It was like literally like one hundred people who knew

112
00:06:49.279 --> 00:06:52.079
<v Speaker 6>about this, and maybe a bit more than that, but

113
00:06:52.439 --> 00:06:55.000
<v Speaker 6>like you just had to be this like an expert

114
00:06:55.279 --> 00:07:00.279
<v Speaker 6>and part of some subculture to build an event than

115
00:07:00.399 --> 00:07:03.920
<v Speaker 6>web server. And I was looking at different programming languages,

116
00:07:04.000 --> 00:07:08.319
<v Speaker 6>originally Ruby, looking at Haskell for a little bit, looking

117
00:07:08.360 --> 00:07:13.920
<v Speaker 6>at ways to kind of bind to drive web servers

118
00:07:13.959 --> 00:07:16.879
<v Speaker 6>in an event driven way and in a you know,

119
00:07:17.079 --> 00:07:21.519
<v Speaker 6>backed by epole on Lenux and inspired a lot by

120
00:07:22.399 --> 00:07:28.040
<v Speaker 6>twisted Python and event machine and Ruby and the problem

121
00:07:28.560 --> 00:07:31.920
<v Speaker 6>you know, looking at those things deeply found that the

122
00:07:32.279 --> 00:07:35.399
<v Speaker 6>big problem with those systems was that they interacted really

123
00:07:35.439 --> 00:07:39.079
<v Speaker 6>poorly with the rest of the standard library. So if

124
00:07:39.120 --> 00:07:43.439
<v Speaker 6>you take SA event machine in Ruby, you realize that

125
00:07:43.439 --> 00:07:46.879
<v Speaker 6>there's all sorts of blocking operations elsewhere in the Ruby stack.

126
00:07:47.120 --> 00:07:49.680
<v Speaker 6>And and if you take kind of non blocking stuff

127
00:07:49.720 --> 00:07:52.199
<v Speaker 6>and blocking stuff and just try to merge them altogether,

128
00:07:52.759 --> 00:07:56.000
<v Speaker 6>like you just it ends in disaster. Because the trick

129
00:07:56.040 --> 00:07:58.959
<v Speaker 6>with with event driven web servers is you could never

130
00:07:59.079 --> 00:08:02.439
<v Speaker 6>block the event. That's the that's the you know, the

131
00:08:02.439 --> 00:08:04.920
<v Speaker 6>principal thing that you have to do. And so you

132
00:08:04.920 --> 00:08:07.279
<v Speaker 6>have to really build the system from the ground up

133
00:08:07.319 --> 00:08:11.319
<v Speaker 6>to be non blocking, an event driven. And I had

134
00:08:11.319 --> 00:08:14.879
<v Speaker 6>the insight, you know, maybe the singular insight in my

135
00:08:14.959 --> 00:08:20.639
<v Speaker 6>life that oh my god, JavaScript offers the opportunity because

136
00:08:20.680 --> 00:08:23.680
<v Speaker 6>there is no defined standard library, there's no defined way

137
00:08:23.720 --> 00:08:26.639
<v Speaker 6>of interacting with the operating system. Into two thousand and eight,

138
00:08:26.680 --> 00:08:31.920
<v Speaker 6>there was no server side JavaScript. This offers kind of clean,

139
00:08:32.399 --> 00:08:37.840
<v Speaker 6>clean landscape for me to build up a pure event

140
00:08:37.919 --> 00:08:43.600
<v Speaker 6>driven web server and all of the associated libraries that

141
00:08:43.679 --> 00:08:45.519
<v Speaker 6>you need to do that. So if you're making say

142
00:08:45.519 --> 00:08:48.320
<v Speaker 6>an outbounds TCP connection, you also have to drive that

143
00:08:48.399 --> 00:08:50.639
<v Speaker 6>in a non blocking way, or if you're doing a timeout,

144
00:08:50.720 --> 00:08:53.320
<v Speaker 6>you also need to you you cannot block the event

145
00:08:53.320 --> 00:08:56.759
<v Speaker 6>loup when you sleep for for a couple of seconds. Right,

146
00:08:56.799 --> 00:09:01.480
<v Speaker 6>all of this needs to be event driven. And yeah,

147
00:09:01.720 --> 00:09:06.120
<v Speaker 6>so this just works magically with JavaScript and makes all

148
00:09:06.159 --> 00:09:08.600
<v Speaker 6>of this much more accessible to people. So, you know,

149
00:09:08.639 --> 00:09:09.039
<v Speaker 6>I think.

150
00:09:08.919 --> 00:09:10.759
<v Speaker 3>The the broad.

151
00:09:11.960 --> 00:09:15.080
<v Speaker 6>Bent of what I'm trying to do is make and

152
00:09:15.159 --> 00:09:17.679
<v Speaker 6>I think this continues through Dno One and Dino two,

153
00:09:18.960 --> 00:09:22.240
<v Speaker 6>is trying to make programming accessible to people and allowing

154
00:09:22.279 --> 00:09:27.519
<v Speaker 6>them to program pretty deep important infrastructure, you know, driving

155
00:09:28.000 --> 00:09:32.279
<v Speaker 6>event driven web servers and whatnot with just a few

156
00:09:32.320 --> 00:09:35.399
<v Speaker 6>lines of cote and and you know, without necessarily understanding

157
00:09:35.440 --> 00:09:39.279
<v Speaker 6>what is happening at the lower layers with people and

158
00:09:40.360 --> 00:09:43.080
<v Speaker 6>everything else that's going on. I think most Node users

159
00:09:43.120 --> 00:09:45.600
<v Speaker 6>have no idea about any of those those things. And

160
00:09:45.679 --> 00:09:48.320
<v Speaker 6>that's great. It's a it's a clean abstraction.

161
00:09:50.080 --> 00:09:53.960
<v Speaker 1>So I guess what I'm wondering then, is so, so

162
00:09:54.039 --> 00:09:57.399
<v Speaker 1>you popped the hood on d O one and you said,

163
00:09:57.440 --> 00:10:00.320
<v Speaker 1>we're going to change out some of this stuff, right,

164
00:10:00.320 --> 00:10:02.600
<v Speaker 1>We're going to we're going to add some new features

165
00:10:02.639 --> 00:10:06.000
<v Speaker 1>to the to the engine, or I don't know.

166
00:10:06.080 --> 00:10:08.039
<v Speaker 2>This metaphor is going to get real weird in a minute,

167
00:10:08.240 --> 00:10:09.080
<v Speaker 2>I guess.

168
00:10:08.679 --> 00:10:13.399
<v Speaker 1>But so what I'm wondering is, is you know what's

169
00:10:13.519 --> 00:10:15.799
<v Speaker 1>different between Dno one and Dino two that get you

170
00:10:15.879 --> 00:10:17.639
<v Speaker 1>to this thing that you're trying to create.

171
00:10:19.399 --> 00:10:21.679
<v Speaker 6>Yeah, so okay, let me let me take a little

172
00:10:21.799 --> 00:10:26.000
<v Speaker 6>step step back and just introduce Dino a bit. So

173
00:10:26.840 --> 00:10:31.120
<v Speaker 6>around twenty nineteen or so, I've been working on other stuff,

174
00:10:31.159 --> 00:10:33.720
<v Speaker 6>I haven't been working on Node, and kind of came

175
00:10:33.759 --> 00:10:38.639
<v Speaker 6>back to Node and was starting to look at it

176
00:10:38.759 --> 00:10:43.080
<v Speaker 6>deeply and was really kind of disappointed about how I

177
00:10:43.120 --> 00:10:46.759
<v Speaker 6>found the state of note. Obviously I follow it, like

178
00:10:46.960 --> 00:10:50.519
<v Speaker 6>know that it's growing, but you know, it did not

179
00:10:50.679 --> 00:10:54.200
<v Speaker 6>feel like the clean, simple abstraction that I was going for.

180
00:10:54.519 --> 00:10:58.159
<v Speaker 6>You know, when you start adding all of these NPM dependencies,

181
00:10:58.200 --> 00:11:02.639
<v Speaker 6>you have like a two gigabyte modules folder, There's there's

182
00:11:02.679 --> 00:11:07.639
<v Speaker 6>common JS everywhere, there's ECMAScript modules, the HGP client and

183
00:11:07.799 --> 00:11:10.960
<v Speaker 6>Node is different than the HP client and web browsers.

184
00:11:11.320 --> 00:11:16.279
<v Speaker 6>It was just this kerfuffle that, you know, really disappointed

185
00:11:16.320 --> 00:11:19.000
<v Speaker 6>me because this is getting away from the goal of

186
00:11:19.480 --> 00:11:21.320
<v Speaker 6>like you don't need to know what's going on, you

187
00:11:21.360 --> 00:11:23.000
<v Speaker 6>can just sit down and start programming.

188
00:11:23.080 --> 00:11:23.159
<v Speaker 3>Right.

189
00:11:23.279 --> 00:11:26.320
<v Speaker 6>JavaScript is for the children, like it should be should

190
00:11:26.360 --> 00:11:31.120
<v Speaker 6>be easy for people to just start getting programming, start

191
00:11:31.159 --> 00:11:33.720
<v Speaker 6>getting going. Also, on top of all of this, Typescript

192
00:11:33.879 --> 00:11:38.759
<v Speaker 6>was very clearly becoming a thing, and integrating Typescript into

193
00:11:38.759 --> 00:11:41.720
<v Speaker 6>your NOE project required all of this setup and configuration

194
00:11:41.840 --> 00:11:46.200
<v Speaker 6>files and builds, and it's just it starts making it

195
00:11:46.759 --> 00:11:49.559
<v Speaker 6>not very nice to program in. And so started Deno

196
00:11:49.639 --> 00:11:53.879
<v Speaker 6>with with the idea to clean up a lot of

197
00:11:53.919 --> 00:11:56.799
<v Speaker 6>this stuff with a kind of from the ground up

198
00:11:57.519 --> 00:12:00.960
<v Speaker 6>run time implementation, not in C plus plus like I

199
00:12:01.000 --> 00:12:04.679
<v Speaker 6>did with Node, but uh in Rust, a new new

200
00:12:05.159 --> 00:12:09.000
<v Speaker 6>new language, and really focus on making a typescript first,

201
00:12:09.519 --> 00:12:13.440
<v Speaker 6>narrowing the gap between server side JavaScript and web browser JavaScript,

202
00:12:13.559 --> 00:12:18.039
<v Speaker 6>really using web standards, making an emascript module first, making

203
00:12:18.080 --> 00:12:21.440
<v Speaker 6>it batteries included. That is having kind of a tool

204
00:12:21.519 --> 00:12:25.720
<v Speaker 6>full tool chain of programming utilities that you need because

205
00:12:25.799 --> 00:12:28.320
<v Speaker 6>you know, it's not just the execution of JavaScript. You

206
00:12:28.360 --> 00:12:31.519
<v Speaker 6>also need code formatting and linking, and you need an

207
00:12:31.639 --> 00:12:35.279
<v Speaker 6>LSP to connect to your editor, and the list goes

208
00:12:35.320 --> 00:12:37.159
<v Speaker 6>on and on, like you really need a full tool

209
00:12:37.240 --> 00:12:40.759
<v Speaker 6>chain of things. And you know, in my mind that

210
00:12:40.960 --> 00:12:44.080
<v Speaker 6>is the run times obligation to provide those things I

211
00:12:44.120 --> 00:12:47.799
<v Speaker 6>really like how go UH does things. It's it is

212
00:12:47.840 --> 00:12:51.919
<v Speaker 6>a all you need is go and UH. It gives

213
00:12:51.919 --> 00:12:55.039
<v Speaker 6>you everything that you need to get started. On top

214
00:12:55.080 --> 00:12:55.559
<v Speaker 6>of all of.

215
00:12:55.480 --> 00:12:59.720
<v Speaker 3>This, If I can interject again and I apologize for

216
00:13:00.080 --> 00:13:03.679
<v Speaker 3>rupting you, it seems that basically said what you're saying

217
00:13:04.080 --> 00:13:09.200
<v Speaker 3>is that you had this great idea, but in certain

218
00:13:09.240 --> 00:13:11.320
<v Speaker 3>ways it was kind of ahead of its time. You

219
00:13:11.799 --> 00:13:16.600
<v Speaker 3>basically invented and created a lot of the ecosystem, and

220
00:13:16.639 --> 00:13:21.840
<v Speaker 3>as the ecosystem evolved and matured and introduced by four

221
00:13:21.960 --> 00:13:25.320
<v Speaker 3>certain pieces that were missing at the time, Like you know,

222
00:13:27.159 --> 00:13:30.559
<v Speaker 3>acmascript models just weren't available when you created notes, so

223
00:13:30.639 --> 00:13:34.559
<v Speaker 3>you kind of had to invent common JS to create

224
00:13:34.559 --> 00:13:40.120
<v Speaker 3>this module system. So and in a sense you were

225
00:13:40.919 --> 00:13:44.720
<v Speaker 3>kind of stuck with those inventions that you created, even

226
00:13:44.799 --> 00:13:47.879
<v Speaker 3>though over time a lot of them turned out to

227
00:13:48.000 --> 00:13:52.720
<v Speaker 3>be less than ideal. Is that the proper way of

228
00:13:52.759 --> 00:13:57.320
<v Speaker 3>saying it, and like node can't change for the same

229
00:13:57.440 --> 00:14:00.440
<v Speaker 3>reason that browsers can change. I mean, a lot of

230
00:14:00.519 --> 00:14:03.759
<v Speaker 3>us would be happy to go back maybe and change

231
00:14:04.120 --> 00:14:07.879
<v Speaker 3>a lot of the various domain pis, but it's impossible

232
00:14:08.080 --> 00:14:12.720
<v Speaker 3>because backward compatibility trumps everything else. You can't break the web,

233
00:14:13.279 --> 00:14:17.320
<v Speaker 3>and likewise, you can't break the million applications that currently

234
00:14:17.399 --> 00:14:21.559
<v Speaker 3>run on Node. But the big difference is that on

235
00:14:21.600 --> 00:14:25.120
<v Speaker 3>the front end, you know, the browsers are what they are.

236
00:14:25.879 --> 00:14:28.879
<v Speaker 3>On the back end you have the option of using

237
00:14:29.000 --> 00:14:32.799
<v Speaker 3>maybe something else instead of Note. You're not breaking compatibility

238
00:14:32.799 --> 00:14:37.360
<v Speaker 3>if you decide to use something else. So does that

239
00:14:37.480 --> 00:14:41.159
<v Speaker 3>kind of paint the picture of why you kind of

240
00:14:41.240 --> 00:14:46.320
<v Speaker 3>instigated Dino is like you're certain a chance for a

241
00:14:46.440 --> 00:14:49.840
<v Speaker 3>redo or retry something like along these lines of, hey,

242
00:14:49.919 --> 00:14:52.919
<v Speaker 3>I now have promises, I can do a weight stuff

243
00:14:52.960 --> 00:14:53.279
<v Speaker 3>like that.

244
00:14:54.919 --> 00:14:57.840
<v Speaker 6>I think of it in terms of like scaling limits,

245
00:14:57.960 --> 00:15:01.279
<v Speaker 6>like Node just kind of reached this scale that, like

246
00:15:01.919 --> 00:15:05.480
<v Speaker 6>the note has this kind of small core philosophy, Like

247
00:15:05.519 --> 00:15:08.720
<v Speaker 6>the philosophy of Node, you know, just kind of started

248
00:15:08.759 --> 00:15:11.519
<v Speaker 6>breaking down at a certain scale. And I you know,

249
00:15:11.559 --> 00:15:13.600
<v Speaker 6>it's unfair to say it's breaking down. I mean, like

250
00:15:13.960 --> 00:15:16.080
<v Speaker 6>note is the cornerstone of the Internet, right, I mean,

251
00:15:16.080 --> 00:15:19.639
<v Speaker 6>it's it's totally fine, but I think there is still

252
00:15:19.639 --> 00:15:25.399
<v Speaker 6>an opportunity there. JavaScript is going to last many years

253
00:15:25.399 --> 00:15:28.200
<v Speaker 6>from now. We are not at the end state, and

254
00:15:28.440 --> 00:15:31.879
<v Speaker 6>like Node in twenty nineteen, I think it's unfair to

255
00:15:31.960 --> 00:15:34.320
<v Speaker 6>look at it and say like this is it. This

256
00:15:34.399 --> 00:15:37.159
<v Speaker 6>is JavaScript for the rest of time. Like that is

257
00:15:37.200 --> 00:15:39.879
<v Speaker 6>not the case. JavaScript is going to last many, many

258
00:15:39.960 --> 00:15:42.320
<v Speaker 6>years in the future. In some ways, we're just at

259
00:15:42.360 --> 00:15:45.600
<v Speaker 6>the beginning. And I think it is incumbent on us,

260
00:15:45.639 --> 00:15:47.840
<v Speaker 6>if you know, if you care about this, if you're

261
00:15:47.879 --> 00:15:51.159
<v Speaker 6>working in this ecosystem, to try to simplify it, and

262
00:15:51.279 --> 00:15:54.480
<v Speaker 6>I think it can be simplified by addressing these problems

263
00:15:54.480 --> 00:15:58.519
<v Speaker 6>at the run time level. The comment about breaking changes

264
00:15:58.600 --> 00:16:01.200
<v Speaker 6>is important, and I think that's that's one of the

265
00:16:01.240 --> 00:16:04.720
<v Speaker 6>things with Dino two that that we are reevaluating. I mean,

266
00:16:05.279 --> 00:16:09.919
<v Speaker 6>Dino started out with with very much uh, a incompatible

267
00:16:10.200 --> 00:16:14.360
<v Speaker 6>API and set up to node and we have found

268
00:16:14.480 --> 00:16:18.039
<v Speaker 6>that to be problem you know, nice in many ways,

269
00:16:18.080 --> 00:16:20.440
<v Speaker 6>but but kind of problematic at scale.

270
00:16:20.639 --> 00:16:25.120
<v Speaker 1>Yeah, I read a bunch about like the the NPM compatibilities,

271
00:16:25.240 --> 00:16:27.279
<v Speaker 1>and yeah, some of the node compatibilities and some of

272
00:16:27.279 --> 00:16:28.440
<v Speaker 1>the things that we read.

273
00:16:29.200 --> 00:16:29.879
<v Speaker 2>Leading into this.

274
00:16:30.080 --> 00:16:34.519
<v Speaker 1>So how much of that is in Dino two And

275
00:16:34.559 --> 00:16:36.440
<v Speaker 1>how much of that did you just wind up bolting

276
00:16:36.480 --> 00:16:38.080
<v Speaker 1>into Dino one piece at a time.

277
00:16:38.399 --> 00:16:43.000
<v Speaker 6>I mean, uh, Dino Dino two is not like a

278
00:16:43.480 --> 00:16:48.159
<v Speaker 6>hard break or anything. It is just more and more

279
00:16:48.200 --> 00:16:53.120
<v Speaker 6>features kind of uh evolved into into Dino Dino one.

280
00:16:53.240 --> 00:16:55.639
<v Speaker 6>So yeah, I guess that's an important point to make

281
00:16:55.720 --> 00:16:58.559
<v Speaker 6>is that like anybody who's who's written a Dino program

282
00:16:58.600 --> 00:17:00.519
<v Speaker 6>like that is going to continue to work. There's no

283
00:17:00.919 --> 00:17:04.039
<v Speaker 6>there's no breaking changes, so to speak. In Dino two.

284
00:17:05.240 --> 00:17:07.680
<v Speaker 6>What has been happening over the last two years is

285
00:17:07.960 --> 00:17:12.160
<v Speaker 6>we started maybe eighteen months ago, kind of started, uh,

286
00:17:14.799 --> 00:17:19.519
<v Speaker 6>node built in APIs in Deno. The ability to import

287
00:17:19.640 --> 00:17:22.880
<v Speaker 6>node colon fs for example, and be able to read

288
00:17:22.920 --> 00:17:28.039
<v Speaker 6>files from from there, and also NPM support, the ability

289
00:17:28.079 --> 00:17:30.960
<v Speaker 6>to kind of pull in NPM packages kind of been

290
00:17:31.160 --> 00:17:35.160
<v Speaker 6>in a nicer, more elegant way, we think than than

291
00:17:35.279 --> 00:17:37.359
<v Speaker 6>in Node where you you kind of need a separate

292
00:17:37.960 --> 00:17:40.920
<v Speaker 6>package manager and kind of install these things into node

293
00:17:40.960 --> 00:17:44.480
<v Speaker 6>modules and Dino you can just reference NPM modules. You

294
00:17:44.519 --> 00:17:48.039
<v Speaker 6>can do imports in PM colon Chalk or n PM

295
00:17:48.079 --> 00:17:51.000
<v Speaker 6>colon Express, and it just kind of it just kind

296
00:17:51.000 --> 00:17:52.160
<v Speaker 6>of works like a kind.

297
00:17:52.039 --> 00:17:57.200
<v Speaker 3>Of I have to ask about this because I recall

298
00:17:57.359 --> 00:17:59.920
<v Speaker 3>when dn O one came out, what it was just

299
00:18:00.079 --> 00:18:04.799
<v Speaker 3>Dino back then one. When Dino came out, one of

300
00:18:04.839 --> 00:18:10.160
<v Speaker 3>the main selling points and a lot of people kind

301
00:18:10.160 --> 00:18:12.920
<v Speaker 3>of got all in The huff about it was that

302
00:18:12.960 --> 00:18:16.680
<v Speaker 3>it didn't actually have a package manager. It was, as

303
00:18:16.720 --> 00:18:20.000
<v Speaker 3>I recall it was, you want something, you just downloaded

304
00:18:20.000 --> 00:18:23.640
<v Speaker 3>it from the web. It arrives over HTTP, it gets cash,

305
00:18:23.759 --> 00:18:25.839
<v Speaker 3>so you don't need to download each and every time.

306
00:18:26.279 --> 00:18:29.160
<v Speaker 3>But it works just like your browser. You don't need

307
00:18:29.640 --> 00:18:34.079
<v Speaker 3>a package manager. And now all of a sudden turns

308
00:18:34.079 --> 00:18:36.480
<v Speaker 3>out that you actually do need a package manager.

309
00:18:36.640 --> 00:18:45.720
<v Speaker 6>So was your initial package manager? Okay, correct, Yeah, we

310
00:18:46.039 --> 00:18:49.000
<v Speaker 6>started with a So we started with acmascript modules. The

311
00:18:49.200 --> 00:18:52.640
<v Speaker 6>theory being mscript modules is the real module system, not

312
00:18:52.680 --> 00:18:56.039
<v Speaker 6>common JS, and that future JavaScript should be built on

313
00:18:56.079 --> 00:19:02.200
<v Speaker 6>top of Yes, m and the real it is the

314
00:19:02.240 --> 00:19:06.200
<v Speaker 6>real I mean it is literally specified in Oh.

315
00:19:06.119 --> 00:19:09.160
<v Speaker 2>Yeah, I guess to that degree. Yeah yeah.

316
00:19:09.200 --> 00:19:12.599
<v Speaker 6>And you know it's real in the sense that browsers.

317
00:19:12.640 --> 00:19:15.759
<v Speaker 6>You cannot require in a browser, but you can import

318
00:19:15.839 --> 00:19:21.279
<v Speaker 6>in a browser, and you can import h GP specifiers,

319
00:19:21.359 --> 00:19:24.799
<v Speaker 6>you can import hip colon slash slash blah blah blah

320
00:19:25.119 --> 00:19:29.079
<v Speaker 6>uh and kind of link linked to a JavaScript file

321
00:19:29.599 --> 00:19:32.240
<v Speaker 6>in a browser. So it is it is that is

322
00:19:32.279 --> 00:19:36.559
<v Speaker 6>the real module system in JavaScript. And so our our

323
00:19:36.599 --> 00:19:40.279
<v Speaker 6>thinking was, let's expose this to server side JavaScript, and

324
00:19:40.440 --> 00:19:43.599
<v Speaker 6>maybe this is sufficient for maybe this is all you need.

325
00:19:43.680 --> 00:19:49.160
<v Speaker 6>Maybe maybe HI, maybe links is all you need. Uh,

326
00:19:49.519 --> 00:19:52.079
<v Speaker 6>And we went pretty far with this. Our idea was like,

327
00:19:52.119 --> 00:19:54.519
<v Speaker 6>if we build up tooling around this and make this

328
00:19:54.799 --> 00:19:58.880
<v Speaker 6>uh ergonomic enough that we could have kind of a

329
00:19:58.960 --> 00:20:02.960
<v Speaker 6>decentralized module system where anybody can post code on any

330
00:20:02.960 --> 00:20:05.759
<v Speaker 6>website and you can just link it into your projects.

331
00:20:06.680 --> 00:20:09.759
<v Speaker 6>It's pretty great. It's pretty great for small scripts.

332
00:20:11.039 --> 00:20:14.079
<v Speaker 4>Why not get this is because it seemed like Go

333
00:20:14.200 --> 00:20:16.759
<v Speaker 4>had solved this problem better than anyone else has ever

334
00:20:16.839 --> 00:20:19.480
<v Speaker 4>solved it. And I think that Go modules had already

335
00:20:19.480 --> 00:20:23.000
<v Speaker 4>existed by the time that Dino came out, so very

336
00:20:23.079 --> 00:20:28.079
<v Speaker 4>much inspired I go, well, yeah, why not? That's because

337
00:20:29.079 --> 00:20:33.000
<v Speaker 4>the talk I watched it sounded like, mathematically, from a

338
00:20:33.039 --> 00:20:36.240
<v Speaker 4>graph perspective, the ghost system is literally perfect. You cannot

339
00:20:36.279 --> 00:20:38.960
<v Speaker 4>get better. You can get worse, you can make worse

340
00:20:39.000 --> 00:20:40.759
<v Speaker 4>trade offs, but you can't make better trade offs.

341
00:20:42.599 --> 00:20:42.720
<v Speaker 3>Uh.

342
00:20:42.960 --> 00:20:46.359
<v Speaker 6>We again, we stick to the standards. So there is

343
00:20:46.400 --> 00:20:51.240
<v Speaker 6>not a way to import a a GET repository in

344
00:20:51.279 --> 00:20:54.839
<v Speaker 6>the web browser. And so we were reluctant to add

345
00:20:54.880 --> 00:20:58.640
<v Speaker 6>something that that is not something that works in the browser,

346
00:20:58.720 --> 00:21:01.599
<v Speaker 6>because you know, the the axiom that we have is

347
00:21:01.640 --> 00:21:03.680
<v Speaker 6>that we want to narrow the gap between server side

348
00:21:03.720 --> 00:21:07.200
<v Speaker 6>JavaScript and browser JavaScript as much as possible. We want

349
00:21:07.200 --> 00:21:08.920
<v Speaker 6>to have the same APIs, we don't want to have

350
00:21:08.920 --> 00:21:12.759
<v Speaker 6>the same module system. And yeah, you could, you can

351
00:21:12.960 --> 00:21:16.880
<v Speaker 6>add that on there. But I think our original take

352
00:21:16.920 --> 00:21:21.160
<v Speaker 6>with with Dino was let's just stick to HGP specifiers

353
00:21:21.160 --> 00:21:24.200
<v Speaker 6>and see how far we can get with that, and

354
00:21:24.240 --> 00:21:27.319
<v Speaker 6>the yeah, I think we we essentially have the answer

355
00:21:27.400 --> 00:21:30.680
<v Speaker 6>now a couple of years later, which is that it

356
00:21:30.759 --> 00:21:34.480
<v Speaker 6>works for small scripts. It works really really great. If

357
00:21:34.519 --> 00:21:37.720
<v Speaker 6>you're just scripting, you know, hacking together a little build

358
00:21:37.759 --> 00:21:41.240
<v Speaker 6>script or or a little you know, file manipulation tool

359
00:21:41.559 --> 00:21:43.359
<v Speaker 6>or something. You have a single file, you can kind

360
00:21:43.359 --> 00:21:46.359
<v Speaker 6>of throw in some h GPS imports at the top.

361
00:21:46.839 --> 00:21:50.200
<v Speaker 6>You can kind of publish these things. It doesn't work

362
00:21:50.240 --> 00:21:54.519
<v Speaker 6>so well when you start having larger projects, multiple files,

363
00:21:55.039 --> 00:21:58.039
<v Speaker 6>multiple packages. You're you're kind of having these u r

364
00:21:58.200 --> 00:22:01.359
<v Speaker 6>ls kind of strewn all over your co base. They

365
00:22:01.359 --> 00:22:04.559
<v Speaker 6>don't necessary. Of course, a version string can be embedded

366
00:22:04.559 --> 00:22:08.720
<v Speaker 6>in a URL, but without a real kind of semantic

367
00:22:08.839 --> 00:22:12.119
<v Speaker 6>understanding of what versions of modules you have, you have

368
00:22:12.200 --> 00:22:15.400
<v Speaker 6>a lot of duplicated dependencies. You might have essentially the

369
00:22:15.400 --> 00:22:20.279
<v Speaker 6>same dependency with like a slightly different patch version, slightly

370
00:22:20.279 --> 00:22:23.200
<v Speaker 6>different URL kind of in your dependency tree.

371
00:22:24.119 --> 00:22:27.839
<v Speaker 4>Why not attack that at the standards body level, because

372
00:22:27.839 --> 00:22:30.599
<v Speaker 4>that seems that seems like a problem that is universal enough,

373
00:22:30.599 --> 00:22:34.200
<v Speaker 4>that has existed since the dawn of Unix, I think,

374
00:22:34.279 --> 00:22:38.920
<v Speaker 4>I mean, version numbers have been around I think since

375
00:22:39.599 --> 00:22:43.559
<v Speaker 4>certainly since people have had computers in their home. So

376
00:22:43.720 --> 00:22:47.000
<v Speaker 4>why why don't we have a standard at the at

377
00:22:47.039 --> 00:22:49.240
<v Speaker 4>the web level or you know, to attack that with

378
00:22:49.279 --> 00:22:51.480
<v Speaker 4>one of those with the one of those standards bodies.

379
00:22:52.640 --> 00:22:55.839
<v Speaker 6>I mean, there is essentially a standard for versions now semver,

380
00:22:57.640 --> 00:23:01.799
<v Speaker 6>and we do participate in the standards bodies, but standard

381
00:23:01.839 --> 00:23:05.599
<v Speaker 6>bodies are also very very slow moving and are not

382
00:23:05.680 --> 00:23:09.200
<v Speaker 6>necessarily something that you can You don't want to standardize

383
00:23:09.240 --> 00:23:11.640
<v Speaker 6>first and then implement like we we are. We are

384
00:23:11.640 --> 00:23:15.599
<v Speaker 6>trying to build software for humans here and like actually

385
00:23:15.680 --> 00:23:18.880
<v Speaker 6>actually solve problems, and so you know, only working in

386
00:23:18.920 --> 00:23:23.359
<v Speaker 6>the standards body is attended TC thirty nine A couple

387
00:23:23.400 --> 00:23:25.400
<v Speaker 6>of times, I have to tell you is the most

388
00:23:25.440 --> 00:23:27.519
<v Speaker 6>boring thing I've ever done in my entire life, and

389
00:23:27.599 --> 00:23:31.079
<v Speaker 6>just want to It's it's like that I'm trying to

390
00:23:31.119 --> 00:23:34.480
<v Speaker 6>ship software that people can actually use so yes, we do.

391
00:23:34.680 --> 00:23:37.160
<v Speaker 6>You know, Dino is a member of TC thirty nine,

392
00:23:37.240 --> 00:23:40.039
<v Speaker 6>and we do interact with standards bodies and we do

393
00:23:40.079 --> 00:23:43.599
<v Speaker 6>try to make JavaScript better in that sense. But there's

394
00:23:43.680 --> 00:23:47.000
<v Speaker 6>there's a pretty big gap between standards and implementation that

395
00:23:47.640 --> 00:23:50.200
<v Speaker 6>allows for a lot of creativity.

396
00:23:50.319 --> 00:23:52.279
<v Speaker 2>I have some paint drying that you can watch.

397
00:23:54.400 --> 00:23:56.359
<v Speaker 1>I kind of want to go back to the imports

398
00:23:57.279 --> 00:23:59.440
<v Speaker 1>because you were talking about, yeah, pulling in through a

399
00:23:59.720 --> 00:24:03.480
<v Speaker 1>ht TP and you know, you get the library or

400
00:24:03.519 --> 00:24:06.319
<v Speaker 1>whatever you need, right and it loads it in and

401
00:24:06.559 --> 00:24:08.880
<v Speaker 1>you know, hopefully it's all set up properly for the

402
00:24:08.920 --> 00:24:10.279
<v Speaker 1>module import.

403
00:24:13.799 --> 00:24:13.839
<v Speaker 3>It.

404
00:24:14.440 --> 00:24:15.640
<v Speaker 2>What what's changed, right?

405
00:24:15.680 --> 00:24:18.480
<v Speaker 1>I mean I've read the blog post about HTTP imports

406
00:24:18.480 --> 00:24:23.079
<v Speaker 1>and I think that's where you're headed here, So you know,

407
00:24:23.319 --> 00:24:24.880
<v Speaker 1>I don't know if you had something to finish on

408
00:24:24.920 --> 00:24:28.960
<v Speaker 1>that thought and then yeah, where are you're going pretty im.

409
00:24:30.920 --> 00:24:35.839
<v Speaker 6>What's what's changed is is that it just like, first

410
00:24:35.839 --> 00:24:38.279
<v Speaker 6>of all, it doesn't work at scale. Like versions are

411
00:24:38.279 --> 00:24:41.599
<v Speaker 6>a problem. We have the problem of servers going down.

412
00:24:41.720 --> 00:24:43.799
<v Speaker 6>So if you have some dependency that has some other

413
00:24:43.880 --> 00:24:47.400
<v Speaker 6>dependency that is hosted on you know, a personal home server,

414
00:24:47.559 --> 00:24:50.799
<v Speaker 6>and that server goes away, then like the all the

415
00:24:51.319 --> 00:24:56.319
<v Speaker 6>transitive dependence uh dependence of that program of that module

416
00:24:56.480 --> 00:25:00.279
<v Speaker 6>uh die along with the server. So there's a reliability problem.

417
00:25:00.519 --> 00:25:04.680
<v Speaker 6>But I think the overarching problem is that when you're

418
00:25:04.720 --> 00:25:08.119
<v Speaker 6>dealing in kind of bigger projects, you have problems like, hey,

419
00:25:08.160 --> 00:25:10.160
<v Speaker 6>I need to use the A W S, S D K,

420
00:25:10.759 --> 00:25:12.799
<v Speaker 6>like I need to talk to S three or whatever.

421
00:25:13.559 --> 00:25:16.359
<v Speaker 6>And we really don't want to be in a situation

422
00:25:16.400 --> 00:25:18.920
<v Speaker 6>where you need to rewrite all of this software for Dino,

423
00:25:19.440 --> 00:25:23.119
<v Speaker 6>and that that gets very problematic at the scale. Right,

424
00:25:23.599 --> 00:25:26.559
<v Speaker 6>I need to use uh g r p C right

425
00:25:26.599 --> 00:25:31.200
<v Speaker 6>like we we we we cannot rewrite the world, uh,

426
00:25:31.559 --> 00:25:34.960
<v Speaker 6>given all all that has been done in JavaScript. Uh

427
00:25:35.160 --> 00:25:38.039
<v Speaker 6>So this this.

428
00:25:38.079 --> 00:25:42.759
<v Speaker 4>Is actually one of my big questions because it seems

429
00:25:42.799 --> 00:25:47.359
<v Speaker 4>like Node fills a niche and it's really imperfect, but

430
00:25:48.319 --> 00:25:51.440
<v Speaker 4>it's you know that that niche is full and there's

431
00:25:51.559 --> 00:25:53.960
<v Speaker 4>you know, there's there's do you know, and there's fun

432
00:25:54.799 --> 00:25:58.279
<v Speaker 4>and and I think there might have been another project

433
00:25:58.279 --> 00:26:01.279
<v Speaker 4>that maybe has already burned out, but you know, there's

434
00:26:01.839 --> 00:26:07.000
<v Speaker 4>there's these projects that have major advantages over Node, but

435
00:26:07.480 --> 00:26:11.359
<v Speaker 4>they're an incremental improvement. Node was a big bang and

436
00:26:13.240 --> 00:26:17.680
<v Speaker 4>the future advancements are like just another galaxy. Right, So

437
00:26:18.400 --> 00:26:21.759
<v Speaker 4>when you look at the ecosystem. I was actually really

438
00:26:21.799 --> 00:26:26.480
<v Speaker 4>excited back when Dino was Hardbreak because I thought, great,

439
00:26:26.599 --> 00:26:29.240
<v Speaker 4>this is a chance for us to get quality software

440
00:26:29.559 --> 00:26:33.480
<v Speaker 4>that's been thoughtfully written. That's not just everybody who's ever

441
00:26:33.519 --> 00:26:37.000
<v Speaker 4>touched a computer throwing something up on NPM. Because the

442
00:26:37.039 --> 00:26:41.000
<v Speaker 4>stuff that's on NPM, ninety nine percent of it is

443
00:26:41.160 --> 00:26:45.720
<v Speaker 4>garbage and there's like that small, small percentage that and

444
00:26:45.759 --> 00:26:48.200
<v Speaker 4>that's just like, that's just a preto distribution. I'm not

445
00:26:48.279 --> 00:26:49.880
<v Speaker 4>I'm not like trying to throw out a disc there.

446
00:26:49.920 --> 00:26:52.200
<v Speaker 4>Like most of the information in the world is wrong.

447
00:26:52.319 --> 00:26:54.200
<v Speaker 4>Most of the you know, most of anything is going

448
00:26:54.279 --> 00:26:58.359
<v Speaker 4>to tend towards the less useful and the hone, the specific,

449
00:26:58.440 --> 00:27:02.240
<v Speaker 4>the skilled, you know, like most athletes aren't Olympians, you know.

450
00:27:02.480 --> 00:27:05.680
<v Speaker 4>So like for me, the idea that we were going

451
00:27:05.720 --> 00:27:07.319
<v Speaker 4>to have a clean break from Note and we were

452
00:27:07.319 --> 00:27:12.400
<v Speaker 4>going to be rebuilding the core pieces just clean was

453
00:27:12.599 --> 00:27:16.279
<v Speaker 4>super exciting. And these seem to be in juxtaposition. You're saying, well,

454
00:27:16.559 --> 00:27:19.480
<v Speaker 4>we need to rewrite the engine, but actually we don't

455
00:27:19.559 --> 00:27:24.039
<v Speaker 4>need to rewrite the libraries. Where does that how do

456
00:27:24.119 --> 00:27:28.640
<v Speaker 4>those reconcile or why is why is that. Okay.

457
00:27:28.400 --> 00:27:33.000
<v Speaker 6>We added NPM support and node built in support to

458
00:27:33.039 --> 00:27:35.599
<v Speaker 6>be able to poll in modules, including ones that use

459
00:27:35.640 --> 00:27:40.039
<v Speaker 6>common JS and development patterns that we consider to be

460
00:27:40.599 --> 00:27:49.079
<v Speaker 6>antiquated or deprecated, and there is unfortunately an enormous amount

461
00:27:49.079 --> 00:27:52.240
<v Speaker 6>of complexity to be able to support common JAS in

462
00:27:52.279 --> 00:27:56.880
<v Speaker 6>an ECMA script only world. But that doesn't change kind

463
00:27:56.920 --> 00:28:00.319
<v Speaker 6>of the overall philosophy of Dino, which is too level

464
00:28:00.359 --> 00:28:03.920
<v Speaker 6>up JavaScript. We don't allow our users to say use

465
00:28:04.119 --> 00:28:09.000
<v Speaker 6>require or to do kind of poor development practices. We

466
00:28:09.160 --> 00:28:14.400
<v Speaker 6>were really encouraging people to level up JavaScript. But being

467
00:28:14.400 --> 00:28:19.680
<v Speaker 6>able to pull in gRPC from NPM is absolutely necessary

468
00:28:19.720 --> 00:28:23.559
<v Speaker 6>when you need g RPC, because gRPC is preaking complicated

469
00:28:23.640 --> 00:28:26.319
<v Speaker 6>and like nobody is going to rewrite that. So in

470
00:28:26.359 --> 00:28:29.000
<v Speaker 6>a sense, like a hard break is kind of nice

471
00:28:29.079 --> 00:28:32.279
<v Speaker 6>until you realize that, like there is a lot, a

472
00:28:32.319 --> 00:28:35.599
<v Speaker 6>lot of a lot of infrastructure out there. The way

473
00:28:35.640 --> 00:28:40.039
<v Speaker 6>that we can encourage people to have better development practices

474
00:28:40.079 --> 00:28:45.000
<v Speaker 6>to write clean code is what we're doing on JSR,

475
00:28:45.079 --> 00:28:49.839
<v Speaker 6>which is a new open source registry that is kind

476
00:28:49.839 --> 00:28:52.240
<v Speaker 6>of a superset of NPM. Like you can depend on

477
00:28:52.359 --> 00:28:57.400
<v Speaker 6>NPM modules in JSR, but we have something called the

478
00:28:58.039 --> 00:29:01.480
<v Speaker 6>JSR score where you get a higher score if you

479
00:29:01.759 --> 00:29:05.000
<v Speaker 6>follow better development practices. So it kind of allows people

480
00:29:05.039 --> 00:29:07.720
<v Speaker 6>to publish trashy code. And I agree with you, there's

481
00:29:08.039 --> 00:29:11.359
<v Speaker 6>kind of a power law distribution in terms of quality

482
00:29:11.359 --> 00:29:13.960
<v Speaker 6>of anything, and there is going to be a ton

483
00:29:14.000 --> 00:29:16.720
<v Speaker 6>of crap out there. So there's a ton of packages

484
00:29:16.759 --> 00:29:18.680
<v Speaker 6>on JSR that are going to have like a zero

485
00:29:18.799 --> 00:29:22.039
<v Speaker 6>JSR score. But we tell you how to improve this.

486
00:29:22.200 --> 00:29:27.039
<v Speaker 6>Add JS docs to to your exports, use typescript, use

487
00:29:27.960 --> 00:29:32.079
<v Speaker 6>you know, various things to kind of encourage people to

488
00:29:32.160 --> 00:29:40.240
<v Speaker 6>up the quality of the code that they're distributing. And yeah,

489
00:29:40.920 --> 00:29:43.000
<v Speaker 6>I think this is I think this is the right tactic.

490
00:29:43.119 --> 00:29:48.759
<v Speaker 6>Like we need to have kind of stepping stones into

491
00:29:48.799 --> 00:29:52.920
<v Speaker 6>the future. Again, JavaScript is going to be here for many,

492
00:29:52.960 --> 00:29:56.519
<v Speaker 6>many years, and the you know, no JS of twenty

493
00:29:56.599 --> 00:29:59.400
<v Speaker 6>nineteen is not the end state, Like I just I

494
00:29:59.480 --> 00:30:02.240
<v Speaker 6>firmly bel leave that because there's just too much economic

495
00:30:02.279 --> 00:30:06.759
<v Speaker 6>pressure to make JavaScript better. Uh so we need we

496
00:30:06.799 --> 00:30:10.759
<v Speaker 6>need kind of ways to incrementally improve this. And as

497
00:30:10.799 --> 00:30:14.799
<v Speaker 6>as we were saying before, Node has all sorts of

498
00:30:15.000 --> 00:30:19.279
<v Speaker 6>dependencies on existing software. It's very hard to fundamentally change

499
00:30:19.279 --> 00:30:22.519
<v Speaker 6>how Node operates. It's effectively impossible. You can kind of

500
00:30:22.559 --> 00:30:25.799
<v Speaker 6>tack on different things here and there, but you really

501
00:30:25.839 --> 00:30:30.400
<v Speaker 6>need a project like Dino to to kind of fundamentally

502
00:30:30.480 --> 00:30:35.559
<v Speaker 6>think about these things differently. But you know, it's it's

503
00:30:35.680 --> 00:30:38.799
<v Speaker 6>it's not a kind of binary story. Like we we do.

504
00:30:39.039 --> 00:30:41.000
<v Speaker 6>We have realized that we need to be able to

505
00:30:41.000 --> 00:30:43.799
<v Speaker 6>pull in and PM modules and be able to use

506
00:30:43.960 --> 00:30:46.079
<v Speaker 6>SA g r PC or the A W S S

507
00:30:46.119 --> 00:30:50.160
<v Speaker 6>d K. Otherwise people can't really develop real software in

508
00:30:50.599 --> 00:30:53.319
<v Speaker 6>this thing. And again we are we are not doing

509
00:30:53.319 --> 00:30:56.279
<v Speaker 6>this as an academic exercise. We are trying to write

510
00:30:56.440 --> 00:30:57.720
<v Speaker 6>software for real people.

511
00:30:58.400 --> 00:31:01.519
<v Speaker 3>So you said something, you said something that was really

512
00:31:01.519 --> 00:31:05.359
<v Speaker 3>interesting to me. You said that effectively, you can pull

513
00:31:06.039 --> 00:31:11.759
<v Speaker 3>any existing NPM module which obviously uses which was obviously

514
00:31:11.799 --> 00:31:16.480
<v Speaker 3>written or developed for note, which means it uses no practices,

515
00:31:16.599 --> 00:31:21.720
<v Speaker 3>no structures, no the APIs, et cetera. But when I'm

516
00:31:21.759 --> 00:31:29.720
<v Speaker 3>developing in Dino, I'm intentionally restricted to the dno way,

517
00:31:29.839 --> 00:31:32.200
<v Speaker 3>which is the better way.

518
00:31:32.319 --> 00:31:35.440
<v Speaker 6>So kind of means I would call it the modern

519
00:31:35.519 --> 00:31:40.160
<v Speaker 6>javascripts like we modern Java encourage best practices.

520
00:31:40.000 --> 00:31:42.119
<v Speaker 4>Because it's standards standards.

521
00:31:42.119 --> 00:31:46.640
<v Speaker 3>It's not, yes, well, it's it's kind of modern standards

522
00:31:46.680 --> 00:31:49.559
<v Speaker 3>and I'll touch on that in a second, because there

523
00:31:49.559 --> 00:31:52.240
<v Speaker 3>are certain things in Dino that I wish were part

524
00:31:52.319 --> 00:31:56.240
<v Speaker 3>of the standard, like the I wish that the dno

525
00:31:56.960 --> 00:32:03.079
<v Speaker 3>quote unquote standard library was the JavaScript standard library. And

526
00:32:03.160 --> 00:32:08.559
<v Speaker 3>I'm if like, my biggest complaint against the JavaScript language

527
00:32:08.599 --> 00:32:12.720
<v Speaker 3>as it is is that it's really lacking a standard library,

528
00:32:14.160 --> 00:32:17.400
<v Speaker 3>and I would have loved for the Dino Standard Library

529
00:32:17.440 --> 00:32:21.799
<v Speaker 3>to be the germ or the root of that of

530
00:32:21.839 --> 00:32:25.640
<v Speaker 3>such a standard library. But going back to my previous

531
00:32:25.839 --> 00:32:30.000
<v Speaker 3>question or point was that I didn't is a point

532
00:32:30.000 --> 00:32:34.079
<v Speaker 3>that I didn't understand or know before was is the

533
00:32:34.119 --> 00:32:38.279
<v Speaker 3>fact that effectively you're you've created like two kind of

534
00:32:38.359 --> 00:32:45.759
<v Speaker 3>distinct runtime environments with under one hood. There's like the dirty,

535
00:32:45.880 --> 00:32:49.319
<v Speaker 3>scruffy environment that you need to support for the existing

536
00:32:49.400 --> 00:32:55.039
<v Speaker 3>note modules, and there's the cleaner, nicer environment where you

537
00:32:55.079 --> 00:32:58.759
<v Speaker 3>write your own code so you you can the note

538
00:32:58.799 --> 00:33:04.920
<v Speaker 3>modules that you can do things that you can't intentionally do.

539
00:33:05.200 --> 00:33:08.440
<v Speaker 3>That's really interesting and something that I didn't realize.

540
00:33:09.119 --> 00:33:12.920
<v Speaker 6>So, for example, the node modules that you import might

541
00:33:13.000 --> 00:33:15.599
<v Speaker 6>use common JS, of course, but they might also have

542
00:33:15.680 --> 00:33:19.640
<v Speaker 6>like a process global. Process global is not a web standard,

543
00:33:20.039 --> 00:33:24.799
<v Speaker 6>so we avoid having the process global in Dino. So

544
00:33:24.920 --> 00:33:28.079
<v Speaker 6>in your kind of top level script that you're writing,

545
00:33:28.079 --> 00:33:31.640
<v Speaker 6>although you might pull in express which might very well

546
00:33:31.680 --> 00:33:37.359
<v Speaker 6>call process, and the top level script will not be

547
00:33:37.400 --> 00:33:41.920
<v Speaker 6>able to call process and without an explicit node call

548
00:33:42.000 --> 00:33:44.039
<v Speaker 6>and process import if you're following.

549
00:33:45.880 --> 00:33:50.000
<v Speaker 3>So you've created a sort of node virtualization environment within

550
00:33:50.160 --> 00:33:55.160
<v Speaker 3>Dino and you're effectively running the node NPM modules within

551
00:33:55.359 --> 00:33:59.680
<v Speaker 3>that again quote unquote node virtualization environment sort of.

552
00:34:00.079 --> 00:34:05.480
<v Speaker 6>Yeah, I mean virtualization environment is suggests that it's uh yeah,

553
00:34:05.559 --> 00:34:08.599
<v Speaker 6>suggest that it's virtualized in some sense. So I wouldn't

554
00:34:08.639 --> 00:34:12.159
<v Speaker 6>call it that, but there there is uh uh yeah,

555
00:34:12.159 --> 00:34:14.199
<v Speaker 6>there's a there's all sorts of of kind of trickery

556
00:34:14.239 --> 00:34:18.679
<v Speaker 6>that that we do to make this uh uh kind

557
00:34:18.719 --> 00:34:19.800
<v Speaker 6>of hidden from the user.

558
00:34:21.159 --> 00:34:24.960
<v Speaker 3>And how compative? How compatible is it? I what level

559
00:34:25.000 --> 00:34:27.280
<v Speaker 3>of compatibility were you able to achieve? I mean, it

560
00:34:27.360 --> 00:34:29.760
<v Speaker 3>can't can't have been easy. Let's put this one.

561
00:34:31.000 --> 00:34:33.119
<v Speaker 6>It's it was not easy. It took us a very

562
00:34:33.119 --> 00:34:35.440
<v Speaker 6>long time, a lot of a lot of engineering effort.

563
00:34:35.880 --> 00:34:39.880
<v Speaker 6>The level of compatibility is fantastic, it's it's very good.

564
00:34:39.880 --> 00:34:42.360
<v Speaker 6>We've been working on this, like I said, for for

565
00:34:42.599 --> 00:34:45.920
<v Speaker 6>about two years now. There's always going to be a

566
00:34:46.000 --> 00:34:50.400
<v Speaker 6>long tail of incompatibilities, and we consider any module that

567
00:34:50.400 --> 00:34:52.760
<v Speaker 6>we can't run a bug and we will fix it.

568
00:34:53.440 --> 00:34:56.400
<v Speaker 6>But it's really really good these days. So Dino can

569
00:34:56.480 --> 00:35:01.239
<v Speaker 6>even import node modules that have tension modules to them,

570
00:35:01.280 --> 00:35:05.800
<v Speaker 6>like compiled extension modules that use NAPI for example. So

571
00:35:05.800 --> 00:35:10.280
<v Speaker 6>so Dino implements all of the NAPI binding layers. It's

572
00:35:10.320 --> 00:35:14.360
<v Speaker 6>it goes very deep, and it's it's you know, our

573
00:35:14.639 --> 00:35:17.679
<v Speaker 6>goal is is uh, you know, let's let's call it

574
00:35:17.719 --> 00:35:20.639
<v Speaker 6>four nines of compatibility or something like that. There's always

575
00:35:20.639 --> 00:35:25.480
<v Speaker 6>going to be a tail of incompatibility, but like essentially

576
00:35:25.559 --> 00:35:27.920
<v Speaker 6>anything that you pull in and should work out of

577
00:35:27.960 --> 00:35:28.599
<v Speaker 6>the box.

578
00:35:28.360 --> 00:35:32.320
<v Speaker 3>And yeah, you know these days, the big, the big

579
00:35:32.679 --> 00:35:36.480
<v Speaker 3>problem with projects like that from my own experience is that,

580
00:35:37.320 --> 00:35:41.199
<v Speaker 3>like you said, like everybody uses this, like ninety something

581
00:35:41.320 --> 00:35:44.559
<v Speaker 3>percent of the modules that people use are essentially the

582
00:35:44.639 --> 00:35:48.760
<v Speaker 3>same holders. Like there are certain small subset of modules

583
00:35:49.119 --> 00:35:52.960
<v Speaker 3>that are the most popular by far, but the problem

584
00:35:53.159 --> 00:35:57.719
<v Speaker 3>is that a lot of organizations use another module in

585
00:35:57.719 --> 00:36:02.039
<v Speaker 3>addition to that. So the question always is am I

586
00:36:02.280 --> 00:36:06.000
<v Speaker 3>not going to find myself stuck because some weird module

587
00:36:06.239 --> 00:36:09.880
<v Speaker 3>that some developer that worked here five years ago imported

588
00:36:10.519 --> 00:36:13.599
<v Speaker 3>and I'm dependent on and it does something really really

589
00:36:13.800 --> 00:36:17.360
<v Speaker 3>out there, and the environment as a problem with it.

590
00:36:17.840 --> 00:36:24.760
<v Speaker 6>I mean, it's always possible. But the compatibility layer happens

591
00:36:24.800 --> 00:36:27.199
<v Speaker 6>at kind of the node API boundary.

592
00:36:27.320 --> 00:36:27.480
<v Speaker 3>Right.

593
00:36:27.519 --> 00:36:30.800
<v Speaker 6>Note has all of these built in modules like fs API,

594
00:36:32.119 --> 00:36:36.039
<v Speaker 6>and Dino implements these very very deeply and well, and

595
00:36:36.079 --> 00:36:39.880
<v Speaker 6>so I would expect even random side modules are going

596
00:36:39.960 --> 00:36:42.639
<v Speaker 6>to work. But like I said, there's a long tail

597
00:36:42.679 --> 00:36:47.719
<v Speaker 6>and there will be incompatibilities. But yeah, I would encourage

598
00:36:47.719 --> 00:36:50.360
<v Speaker 6>people to try it. You will be shocked. You can

599
00:36:50.440 --> 00:36:54.639
<v Speaker 6>import essentially anything. You can take next JS and you know,

600
00:36:54.719 --> 00:36:59.119
<v Speaker 6>create next gs app and do Dino run dev in

601
00:36:59.199 --> 00:37:02.119
<v Speaker 6>there and this well, this this works right, So Dino

602
00:37:02.199 --> 00:37:06.559
<v Speaker 6>can can take any package, chase on node first project

603
00:37:06.719 --> 00:37:09.400
<v Speaker 6>and run this natively in Dino as well.

604
00:37:11.639 --> 00:37:15.079
<v Speaker 3>And the other question that I have is again one

605
00:37:15.119 --> 00:37:22.039
<v Speaker 3>of the one of the defining aspects of Dino when

606
00:37:22.039 --> 00:37:26.000
<v Speaker 3>it came out was the security and the sandbox model.

607
00:37:26.159 --> 00:37:29.639
<v Speaker 3>The fact that you your your sandbox by default and

608
00:37:29.679 --> 00:37:34.079
<v Speaker 3>you open up certain aspects and you only open up

609
00:37:34.119 --> 00:37:37.800
<v Speaker 3>those aspects that you actually need. Well, again, my question

610
00:37:37.960 --> 00:37:41.639
<v Speaker 3>then becomes do you run into issues with that when

611
00:37:41.679 --> 00:37:45.880
<v Speaker 3>you're using arbitrary node modules that have no concept of

612
00:37:45.920 --> 00:37:49.239
<v Speaker 3>this security sandbox and if so, how do you deal

613
00:37:49.239 --> 00:37:49.559
<v Speaker 3>with it?

614
00:37:50.519 --> 00:37:52.920
<v Speaker 6>Yeah, so I haven't haven't mentioned that, but that that

615
00:37:53.000 --> 00:37:55.840
<v Speaker 6>is indeed one of the kind of flagship things that

616
00:37:56.239 --> 00:37:59.480
<v Speaker 6>we were trying to do with Dino is like the

617
00:37:59.480 --> 00:38:01.920
<v Speaker 6>web browser or and and you know, this goal of

618
00:38:02.000 --> 00:38:04.679
<v Speaker 6>kind of narrowing the gap between server side JavaScript and

619
00:38:04.920 --> 00:38:08.639
<v Speaker 6>browser JavaScript. Browser JavaScript is super secure, right. You're running

620
00:38:08.679 --> 00:38:11.119
<v Speaker 6>untrusted code day in and day out in every single

621
00:38:11.199 --> 00:38:15.000
<v Speaker 6>tabu and the V eight VM provides a super secure

622
00:38:15.039 --> 00:38:19.000
<v Speaker 6>sandbox for this. And uh in Node uh. You know,

623
00:38:19.039 --> 00:38:23.119
<v Speaker 6>we were more interested in in what we could do, uh,

624
00:38:23.480 --> 00:38:26.239
<v Speaker 6>rather than thinking too much about whether we should be

625
00:38:26.320 --> 00:38:30.519
<v Speaker 6>doing it. You know, we we uh we uh we

626
00:38:30.599 --> 00:38:33.400
<v Speaker 6>just I wasn't thinking about security back then. I was

627
00:38:33.400 --> 00:38:39.719
<v Speaker 6>thinking more let's put it exactly thanks, yes, And I think,

628
00:38:39.880 --> 00:38:42.239
<v Speaker 6>you know, now, with with with some years to to

629
00:38:42.280 --> 00:38:46.599
<v Speaker 6>think back on that, I think, uh uh, being able

630
00:38:46.639 --> 00:38:50.280
<v Speaker 6>to utilize the secure sandbox that v e provides is

631
00:38:50.760 --> 00:38:52.719
<v Speaker 6>it should be should be mentioned. V eight is the

632
00:38:52.960 --> 00:38:57.199
<v Speaker 6>is the the real workhorse here behind Dino and Node.

633
00:38:57.360 --> 00:38:57.480
<v Speaker 3>Uh.

634
00:38:57.559 --> 00:38:59.280
<v Speaker 6>And in some ways you can think of Dino en

635
00:38:59.360 --> 00:39:02.440
<v Speaker 6>Node as kind of you know, if VIGHT is the

636
00:39:02.599 --> 00:39:05.920
<v Speaker 6>Linux kernel. Then then Node and Dino are kind of

637
00:39:05.960 --> 00:39:11.800
<v Speaker 6>like two Lenux distributions, right, two different distributions of VIGHT. Anyway,

638
00:39:11.320 --> 00:39:14.639
<v Speaker 6>we in Dino, we do use the security of the

639
00:39:14.719 --> 00:39:18.159
<v Speaker 6>v eight VM, and by default, when you run a program,

640
00:39:18.920 --> 00:39:21.960
<v Speaker 6>whether it has NPM modules or not, you have zero

641
00:39:22.079 --> 00:39:25.320
<v Speaker 6>access to the system. You cannot make network connections, you

642
00:39:25.360 --> 00:39:29.360
<v Speaker 6>cannot read from the file system, you cannot see environment variables.

643
00:39:29.559 --> 00:39:33.599
<v Speaker 6>It doesn't matter if your NPM dependencies or dependencies of dependencies,

644
00:39:33.639 --> 00:39:37.400
<v Speaker 6>call process m whatever. All of that is gated in

645
00:39:37.559 --> 00:39:40.480
<v Speaker 6>Dino because again we've re implemented all of this, and

646
00:39:40.800 --> 00:39:43.880
<v Speaker 6>so that extends to the NPM modules and you are

647
00:39:43.960 --> 00:39:49.719
<v Speaker 6>able to gate access a pretty fine grain layer in

648
00:39:49.800 --> 00:39:54.599
<v Speaker 6>the user space at the VIGHT level and kind of

649
00:39:54.599 --> 00:39:58.079
<v Speaker 6>say say whether whether things are are able to access,

650
00:39:58.079 --> 00:40:00.760
<v Speaker 6>say the file system, or if they're if they're able

651
00:40:00.800 --> 00:40:03.639
<v Speaker 6>to make outbounds network connections or listen on a socket.

652
00:40:04.159 --> 00:40:06.599
<v Speaker 6>All of that is controllable, and it does extend to

653
00:40:06.719 --> 00:40:10.079
<v Speaker 6>the compatibility layer. It's a very nice aspect of the system.

654
00:40:10.119 --> 00:40:12.679
<v Speaker 6>You kind of have to provide a few more flags,

655
00:40:12.719 --> 00:40:16.119
<v Speaker 6>and it's a little slightly less ergonomic because like yeah,

656
00:40:16.159 --> 00:40:18.559
<v Speaker 6>in many cases you do want to turn off the

657
00:40:18.599 --> 00:40:22.000
<v Speaker 6>sandbox right if you're running you know, if you're writing

658
00:40:22.000 --> 00:40:24.880
<v Speaker 6>a script like it's probably going to interact with the

659
00:40:24.880 --> 00:40:27.599
<v Speaker 6>file system, it's probably going to interact with the network.

660
00:40:27.639 --> 00:40:29.880
<v Speaker 6>But you know, there are many cases where maybe you're

661
00:40:29.880 --> 00:40:32.079
<v Speaker 6>just writing a proxy server and you really don't need

662
00:40:32.239 --> 00:40:35.039
<v Speaker 6>access to the file system at all. It's very nice

663
00:40:35.079 --> 00:40:36.920
<v Speaker 6>to have that at your fingertips and be able to

664
00:40:36.920 --> 00:40:38.719
<v Speaker 6>gain that access.

665
00:40:39.119 --> 00:40:43.000
<v Speaker 3>The cool thing about it, though, is so what I'm

666
00:40:43.079 --> 00:40:48.840
<v Speaker 3>understanding from you is you can start fully sandbox open

667
00:40:48.880 --> 00:40:52.880
<v Speaker 3>whatever features you know you need, then start using the

668
00:40:52.960 --> 00:40:57.760
<v Speaker 3>various snowed modules, and then if something breaks because of

669
00:40:57.840 --> 00:41:01.480
<v Speaker 3>security because of the scent box, and I assume that

670
00:41:01.599 --> 00:41:04.840
<v Speaker 3>there's the appropriate notification for that. So you are aware

671
00:41:04.880 --> 00:41:09.280
<v Speaker 3>that you know this module try to do something that

672
00:41:09.280 --> 00:41:13.480
<v Speaker 3>it's not allowed to do. You can then decide whether

673
00:41:13.639 --> 00:41:18.599
<v Speaker 3>or not you know you actually need that module and

674
00:41:18.679 --> 00:41:23.760
<v Speaker 3>are willing to grant that security aspect to it. And conversely,

675
00:41:23.840 --> 00:41:28.360
<v Speaker 3>you might ask yourself, hey, why is module that's supposed

676
00:41:28.400 --> 00:41:33.039
<v Speaker 3>to be doing networking want access to my filesystem? You know,

677
00:41:33.280 --> 00:41:36.679
<v Speaker 3>maybe I should be more suspicious about what it's actually doing.

678
00:41:38.559 --> 00:41:40.800
<v Speaker 6>How do you guys, feel about a screen share? I

679
00:41:40.800 --> 00:41:43.079
<v Speaker 6>guess this is a podcast, so probably, well.

680
00:41:42.920 --> 00:41:46.559
<v Speaker 3>You can screenshare for for we can do a quick

681
00:41:46.599 --> 00:41:49.800
<v Speaker 3>screen share. But you know our listeners obviously are losing out.

682
00:41:49.840 --> 00:41:51.639
<v Speaker 4>Well, do you want descriptive reading?

683
00:41:53.119 --> 00:41:55.119
<v Speaker 6>Let's let me see if this works. Well, well, let

684
00:41:55.119 --> 00:41:59.000
<v Speaker 6>me see. Can I share a window? Yes, let me

685
00:41:59.079 --> 00:42:02.480
<v Speaker 6>just pull up a terminal here a.

686
00:42:02.639 --> 00:42:04.679
<v Speaker 2>J I want descriptive singing.

687
00:42:05.360 --> 00:42:06.039
<v Speaker 6>Can you see this.

688
00:42:07.719 --> 00:42:10.000
<v Speaker 4>Listening along at home? We can't see anything yet, but

689
00:42:10.079 --> 00:42:11.239
<v Speaker 4>now it's a terminal.

690
00:42:11.639 --> 00:42:13.000
<v Speaker 5>Chuck, be careful what you asked for?

691
00:42:14.039 --> 00:42:18.760
<v Speaker 6>A right, so let me just whatever tests dot t

692
00:42:18.960 --> 00:42:21.599
<v Speaker 6>S and and let me just just show you he's.

693
00:42:21.519 --> 00:42:23.840
<v Speaker 4>Using them, by the way, not neo VIM like a

694
00:42:23.920 --> 00:42:25.960
<v Speaker 4>nube for those listening.

695
00:42:25.639 --> 00:42:29.719
<v Speaker 6>This is this is actually but whatever.

696
00:42:31.960 --> 00:42:35.280
<v Speaker 5>Yeah, the I am at the top was a dead giveaway.

697
00:42:35.920 --> 00:42:39.000
<v Speaker 4>And Alias did his VIM like a professional, not like

698
00:42:39.079 --> 00:42:40.199
<v Speaker 4>a nube. By the way.

699
00:42:40.880 --> 00:42:44.639
<v Speaker 6>Let's say we wanted to make so I'm console logging hello,

700
00:42:44.880 --> 00:42:47.039
<v Speaker 6>And let's just say I want to like make the

701
00:42:47.079 --> 00:42:50.039
<v Speaker 6>background color red? Okay, And and I think how you

702
00:42:50.119 --> 00:42:52.800
<v Speaker 6>do this? In Node you often use the chalk library,

703
00:42:52.920 --> 00:42:56.840
<v Speaker 6>so you can import chalk from and in Dino you

704
00:42:56.920 --> 00:43:00.800
<v Speaker 6>just do chalk okay, and then you can say something.

705
00:43:00.679 --> 00:43:04.239
<v Speaker 3>Like chalk dot so it's npm chalk to tell it

706
00:43:04.360 --> 00:43:05.880
<v Speaker 3>that it's an NPMD.

707
00:43:06.239 --> 00:43:09.360
<v Speaker 6>That's that's right. So you can do something something like this.

708
00:43:09.440 --> 00:43:15.039
<v Speaker 6>Hopefully this works. So DINO tests and what you see

709
00:43:15.079 --> 00:43:18.360
<v Speaker 6>here is that it says DINO requests environment access to

710
00:43:18.599 --> 00:43:22.159
<v Speaker 6>force color. Chalk is reading environment variables and so I

711
00:43:22.199 --> 00:43:28.039
<v Speaker 6>can I can say like uh no and deny that. No,

712
00:43:28.119 --> 00:43:29.880
<v Speaker 6>you can't read that. No you can't read that. No

713
00:43:29.960 --> 00:43:32.639
<v Speaker 6>you can't read that. You can't read that, can't read that,

714
00:43:33.159 --> 00:43:36.400
<v Speaker 6>and it logs it not in color. Let let me

715
00:43:36.639 --> 00:43:41.320
<v Speaker 6>let me try this again with allow muh or just

716
00:43:41.480 --> 00:43:45.639
<v Speaker 6>dash e to allow environment variables. And now chalk has

717
00:43:45.760 --> 00:43:51.719
<v Speaker 6>has operated correctly. So yeah, I mean a really simple demo,

718
00:43:51.840 --> 00:43:56.880
<v Speaker 6>of course, but it's chalk was not built for security sandboxes,

719
00:43:56.920 --> 00:43:59.280
<v Speaker 6>like it knows nothing about this. But you know, through

720
00:43:59.440 --> 00:44:02.559
<v Speaker 6>through our patibility layer, we are gating access to the

721
00:44:02.679 --> 00:44:05.800
<v Speaker 6>environment variables. And maybe you didn't know that chalk was

722
00:44:05.800 --> 00:44:09.400
<v Speaker 6>was actually accessing those things, and you decide that like, hey,

723
00:44:09.440 --> 00:44:11.360
<v Speaker 6>actually I don't want to use chalk. I don't want

724
00:44:11.400 --> 00:44:13.960
<v Speaker 6>to expose my environment variables. Let me do kind of

725
00:44:14.000 --> 00:44:16.280
<v Speaker 6>the Dino first way of doing this, and in fact

726
00:44:16.320 --> 00:44:19.920
<v Speaker 6>the Web standard way by putting ah, you know percent

727
00:44:20.719 --> 00:44:25.760
<v Speaker 6>see there and doing background color red is actually the

728
00:44:26.360 --> 00:44:29.119
<v Speaker 6>you know Web standard d slash Dino first way of

729
00:44:29.199 --> 00:44:31.280
<v Speaker 6>doing this. This is how you do it in the browser.

730
00:44:32.400 --> 00:44:34.719
<v Speaker 6>And now you don't Now you don't need any any

731
00:44:35.000 --> 00:44:38.559
<v Speaker 6>control access you can you can just use use the

732
00:44:38.599 --> 00:44:42.199
<v Speaker 6>CSS directly. Here are you following me?

733
00:44:42.960 --> 00:44:43.159
<v Speaker 3>Yep?

734
00:44:43.239 --> 00:44:45.880
<v Speaker 4>Yeah, for those of you that are listening along, you

735
00:44:45.920 --> 00:44:49.760
<v Speaker 4>can actually pass a CSS style as a string the

736
00:44:49.800 --> 00:44:54.239
<v Speaker 4>same way you would put it in HTML as a

737
00:44:54.239 --> 00:44:58.519
<v Speaker 4>an argument in console dot log to fill in a

738
00:44:58.559 --> 00:45:00.880
<v Speaker 4>percent c. So you you have a string with three

739
00:45:00.920 --> 00:45:03.159
<v Speaker 4>percent CS and then you can add three styles.

740
00:45:03.519 --> 00:45:05.800
<v Speaker 3>As I recall, you can also do the same thing

741
00:45:05.880 --> 00:45:08.320
<v Speaker 3>in the browser devle.

742
00:45:08.639 --> 00:45:11.559
<v Speaker 6>Yeah, yeah, this is we We do not invent APIs,

743
00:45:11.599 --> 00:45:15.320
<v Speaker 6>so this is not like a DNOE thing to do where.

744
00:45:15.599 --> 00:45:19.199
<v Speaker 3>Yeah, but for those are curious, the same way that

745
00:45:19.280 --> 00:45:23.440
<v Speaker 3>you can use colors in your console logs inside the

746
00:45:23.480 --> 00:45:28.320
<v Speaker 3>browsers work. Indno, the exact same way. That's that's the

747
00:45:28.400 --> 00:45:29.000
<v Speaker 3>basic Yeah.

748
00:45:29.039 --> 00:45:31.599
<v Speaker 6>But I think the main point there is is that

749
00:45:31.679 --> 00:45:35.400
<v Speaker 6>like chalk does read environment variables. Probably knew, but nobody

750
00:45:35.480 --> 00:45:38.639
<v Speaker 6>knew that, but maybe you're sensitive to that, maybe you

751
00:45:38.719 --> 00:45:41.960
<v Speaker 6>have secrets in your environment variables, and maybe you don't

752
00:45:42.000 --> 00:45:45.159
<v Speaker 6>want to allow access to that. Chalk's a pretty simple example,

753
00:45:45.440 --> 00:45:47.920
<v Speaker 6>but this kind of extends to any NPM module and

754
00:45:48.199 --> 00:45:51.119
<v Speaker 6>so you can kind of see what these NPM modules

755
00:45:51.159 --> 00:45:54.400
<v Speaker 6>are doing and decide specifically if you want to allow

756
00:45:54.440 --> 00:45:58.880
<v Speaker 6>access to that. So, yes, the security sand boxes is still, uh,

757
00:45:59.000 --> 00:46:00.800
<v Speaker 6>you know, a primary thing, and you know, and we

758
00:46:00.840 --> 00:46:01.800
<v Speaker 6>think pretty important.

759
00:46:02.599 --> 00:46:05.599
<v Speaker 3>What I really like about this is the fact that,

760
00:46:05.840 --> 00:46:09.000
<v Speaker 3>you know, we've been in the context of security. There's

761
00:46:09.000 --> 00:46:13.119
<v Speaker 3>been a lot of talks about the problem the security

762
00:46:13.159 --> 00:46:19.039
<v Speaker 3>issues when people like take control over existing projects and

763
00:46:19.280 --> 00:46:22.079
<v Speaker 3>insert malware into them, kind of creating all sorts of

764
00:46:22.159 --> 00:46:27.360
<v Speaker 3>supply chain issues. And the Dino approach is a very

765
00:46:27.639 --> 00:46:33.679
<v Speaker 3>interesting safeguard against that, because if somebody introduces malware into

766
00:46:33.679 --> 00:46:36.360
<v Speaker 3>an existing package to do something that it isn't supposed

767
00:46:36.400 --> 00:46:39.559
<v Speaker 3>to do, there's a good chance that the existing sandbox

768
00:46:39.639 --> 00:46:42.679
<v Speaker 3>could prevent it from actually doing that, and all of

769
00:46:42.760 --> 00:46:45.760
<v Speaker 3>a sudden you'll get that error and the thing won't

770
00:46:45.880 --> 00:46:49.679
<v Speaker 3>maybe won't work, but you haven't introduced a security vulnerability.

771
00:46:51.559 --> 00:46:54.079
<v Speaker 6>Yeah, it gets really problematic when it comes to like

772
00:46:54.199 --> 00:46:57.599
<v Speaker 6>NPM post install scripts. Like anytime you add a dependency,

773
00:46:58.360 --> 00:47:00.960
<v Speaker 6>like any dependencies of that n n C are going

774
00:47:00.960 --> 00:47:04.960
<v Speaker 6>to run their post insult script. You're you're essentially in

775
00:47:04.960 --> 00:47:07.920
<v Speaker 6>in node. Anytime you add a dependency, you are running

776
00:47:08.000 --> 00:47:11.320
<v Speaker 6>untrusted code from random people on the internet on your

777
00:47:11.440 --> 00:47:14.559
<v Speaker 6>computer without any sort of sandbox. Like it's very problematic.

778
00:47:14.639 --> 00:47:19.599
<v Speaker 4>Plug plug for socket. I use socket because I don't

779
00:47:20.000 --> 00:47:24.119
<v Speaker 4>I don't. I don't want to be running untrusted code

780
00:47:24.199 --> 00:47:27.760
<v Speaker 4>from random people on the internet when I have client

781
00:47:27.880 --> 00:47:32.800
<v Speaker 4>work and AWS keys and you know that sort of thing.

782
00:47:32.840 --> 00:47:34.119
<v Speaker 4>I forget what their website is.

783
00:47:34.280 --> 00:47:35.679
<v Speaker 6>It's socket dot dev.

784
00:47:36.440 --> 00:47:40.440
<v Speaker 4>Socket dot dev. Yeah, socket and that that links in.

785
00:47:40.639 --> 00:47:42.880
<v Speaker 4>I think they have GitHub actions that will link in

786
00:47:42.960 --> 00:47:46.559
<v Speaker 4>on push to monitor your package, Jason, as well as

787
00:47:47.440 --> 00:47:50.639
<v Speaker 4>uh an alias for NPM so that it hooks into

788
00:47:50.639 --> 00:47:53.840
<v Speaker 4>the NPM install and make sure that malware doesn't run

789
00:47:53.840 --> 00:47:54.400
<v Speaker 4>on your computer.

790
00:47:54.559 --> 00:47:56.800
<v Speaker 3>Yeah, and we and we did have for us on

791
00:47:57.199 --> 00:47:59.360
<v Speaker 3>our show back. We should probably have them on again.

792
00:48:02.400 --> 00:48:05.159
<v Speaker 1>I'm going to change our direction just a little bit here,

793
00:48:05.480 --> 00:48:07.320
<v Speaker 1>unless there's something else you want to add, Ryan before

794
00:48:07.360 --> 00:48:07.760
<v Speaker 1>I do that.

795
00:48:07.960 --> 00:48:11.199
<v Speaker 2>No, no, So, so one of the other things that.

796
00:48:11.199 --> 00:48:17.239
<v Speaker 1>We're seeing come through is JSR and so I wanted

797
00:48:17.280 --> 00:48:19.800
<v Speaker 1>to talk about that from a bit too. Here we've

798
00:48:19.840 --> 00:48:22.519
<v Speaker 1>already been going for fifty minutes and I want to

799
00:48:22.519 --> 00:48:25.719
<v Speaker 1>be mindful of your your time. But yeah, it looks

800
00:48:25.760 --> 00:48:27.559
<v Speaker 1>like an interesting project. Do you kind of want to

801
00:48:27.599 --> 00:48:29.320
<v Speaker 1>set the stage for what it is and why you

802
00:48:29.400 --> 00:48:30.960
<v Speaker 1>even created it?

803
00:48:31.599 --> 00:48:35.519
<v Speaker 6>Yeah, like post gethub acquisition and PM is like not

804
00:48:35.679 --> 00:48:38.880
<v Speaker 6>evolving at all, and you know it's kind of the

805
00:48:39.599 --> 00:48:44.280
<v Speaker 6>central place where you share JavaScript code. Like this is

806
00:48:44.440 --> 00:48:49.480
<v Speaker 6>pretty unfortunate. Like JavaScript is a very vibrant world with

807
00:48:49.559 --> 00:48:52.360
<v Speaker 6>all sorts of changes happening. You know, we're moving to typescript,

808
00:48:52.400 --> 00:48:56.960
<v Speaker 6>we're moving to ESM, and like the place where everybody

809
00:48:57.000 --> 00:49:00.920
<v Speaker 6>is sharing code has is effectively dead. There's all sorts

810
00:49:00.920 --> 00:49:08.199
<v Speaker 6>of security problems as we were just discussing. Uh, it's just, uh,

811
00:49:08.719 --> 00:49:11.559
<v Speaker 6>it's not fun. Like have you I'm sure everybody here

812
00:49:11.639 --> 00:49:15.119
<v Speaker 6>is published an NPM module. You tried publishing like something

813
00:49:15.159 --> 00:49:18.079
<v Speaker 6>that's written typescripts? Have you dealt with you know, common

814
00:49:18.159 --> 00:49:21.079
<v Speaker 6>JS E s M, Like what what sort of output

815
00:49:21.159 --> 00:49:24.559
<v Speaker 6>do you have? How does the exports thing work? Like

816
00:49:24.599 --> 00:49:27.920
<v Speaker 6>it just gets really complicated and again kind of gets

817
00:49:28.000 --> 00:49:32.119
<v Speaker 6>gets away from this JavaScript being for the children like this.

818
00:49:32.119 --> 00:49:34.119
<v Speaker 6>This should be a toy like language. This is a

819
00:49:34.119 --> 00:49:37.440
<v Speaker 6>scripting language. We are not programming in C plus plus

820
00:49:37.480 --> 00:49:39.880
<v Speaker 6>like it should be. It should be fun and nice,

821
00:49:40.000 --> 00:49:44.199
<v Speaker 6>and the registry could be supporting us so much more here.

822
00:49:44.880 --> 00:49:48.440
<v Speaker 6>And as I said, when we were discussing it GP specifiers,

823
00:49:48.480 --> 00:49:50.559
<v Speaker 6>you know, we kind of come around to this, this

824
00:49:51.519 --> 00:49:56.639
<v Speaker 6>realization that a centralized registry is actually very important for reliability.

825
00:49:56.679 --> 00:50:01.039
<v Speaker 6>You can't have things hosted on random servers. So we

826
00:50:01.039 --> 00:50:04.079
<v Speaker 6>we have created JSR. It is open source, unlike the

827
00:50:04.159 --> 00:50:08.400
<v Speaker 6>NPM registry. It is meant to be a community service

828
00:50:08.559 --> 00:50:13.239
<v Speaker 6>and is managed by me right now effectively in the

829
00:50:13.280 --> 00:50:16.599
<v Speaker 6>Dino company. But we intended this to be a community

830
00:50:16.639 --> 00:50:21.639
<v Speaker 6>service and open source and community driven. And it is

831
00:50:22.000 --> 00:50:26.039
<v Speaker 6>just delightful to use. If you have ever published to NPM,

832
00:50:26.119 --> 00:50:29.639
<v Speaker 6>you will immediately see the benefit. Like you can just

833
00:50:29.719 --> 00:50:33.760
<v Speaker 6>publish your typescript. It just works. It is really meant

834
00:50:33.800 --> 00:50:38.039
<v Speaker 6>for a world in which there are multiple JavaScript run times.

835
00:50:38.199 --> 00:50:41.639
<v Speaker 6>The Node Package Manager is meant for a world in

836
00:50:41.639 --> 00:50:45.239
<v Speaker 6>which there is Node. But in twenty twenty four, we've

837
00:50:45.239 --> 00:50:47.559
<v Speaker 6>got Node, we've got Dino, we've got bun, we've got

838
00:50:47.559 --> 00:50:51.880
<v Speaker 6>cloud flayer workers we've got the browsers right, there's many

839
00:50:51.880 --> 00:50:54.760
<v Speaker 6>different places where you're going to be running JavaScript, and

840
00:50:54.880 --> 00:50:57.920
<v Speaker 6>it's important for a registry to support all of those

841
00:50:59.559 --> 00:51:02.599
<v Speaker 6>targets that you might be writing JavaScript for. It's very

842
00:51:02.639 --> 00:51:05.599
<v Speaker 6>important for it to support Typescript. And we've just got

843
00:51:05.639 --> 00:51:10.599
<v Speaker 6>all sorts of useful features in there that are attempting

844
00:51:10.639 --> 00:51:13.719
<v Speaker 6>to level up JavaScript. And I think I mentioned earlier

845
00:51:14.000 --> 00:51:18.000
<v Speaker 6>the JSR score, where you know, we give you a

846
00:51:18.079 --> 00:51:21.079
<v Speaker 6>kind of a point score for your package, and it's

847
00:51:21.119 --> 00:51:23.559
<v Speaker 6>probably going to start off with zero percent because most

848
00:51:23.559 --> 00:51:26.760
<v Speaker 6>stuff is crap. That's fine, But in order to get

849
00:51:27.039 --> 00:51:31.440
<v Speaker 6>towards one hundred percent score on your GSR score, you

850
00:51:31.519 --> 00:51:35.639
<v Speaker 6>have to implement things like having a description for your package,

851
00:51:35.760 --> 00:51:43.840
<v Speaker 6>making sure that there's documentation for it. Test coverage is

852
00:51:43.840 --> 00:51:46.039
<v Speaker 6>not one of the is not one of the things

853
00:51:46.079 --> 00:51:50.079
<v Speaker 6>that add factors into the JSR score, because it's really

854
00:51:50.119 --> 00:51:54.440
<v Speaker 6>hard to decide in general, across multiple run times, how

855
00:51:54.519 --> 00:51:56.079
<v Speaker 6>what sort of test coverage you have?

856
00:51:58.480 --> 00:51:58.960
<v Speaker 4>One thing?

857
00:52:00.199 --> 00:52:03.639
<v Speaker 6>Oh, go ahead, well I was going to say, suffice

858
00:52:03.679 --> 00:52:05.079
<v Speaker 6>it to say that that we put a lot of

859
00:52:05.159 --> 00:52:09.599
<v Speaker 6>thought into into js R and uh uh yeah, I

860
00:52:09.599 --> 00:52:12.320
<v Speaker 6>I I really think this is this is where we

861
00:52:12.360 --> 00:52:16.519
<v Speaker 6>should be having the vibrant sharing of code in the future.

862
00:52:16.679 --> 00:52:18.360
<v Speaker 6>It's it's it's delightful to use.

863
00:52:19.320 --> 00:52:23.480
<v Speaker 4>So one thing that very much concerns me is that

864
00:52:23.599 --> 00:52:27.800
<v Speaker 4>code should not be vibrant. Codes should be dull and

865
00:52:27.840 --> 00:52:32.400
<v Speaker 4>dead right. And most of these registries, and all of

866
00:52:32.440 --> 00:52:35.440
<v Speaker 4>them that I'm aware of, kind of play off of

867
00:52:35.519 --> 00:52:39.280
<v Speaker 4>the you know, it's it's it's kind of like social media,

868
00:52:39.880 --> 00:52:44.320
<v Speaker 4>and so the idea is to update and update and update,

869
00:52:44.760 --> 00:52:48.239
<v Speaker 4>and so what ends up happening is that what's always

870
00:52:48.239 --> 00:52:51.320
<v Speaker 4>on the homepage are the the modules are that are

871
00:52:51.360 --> 00:52:54.599
<v Speaker 4>the most insecure, the least well engineered, have the most

872
00:52:54.679 --> 00:52:58.920
<v Speaker 4>bugs because they're the modules that are just always changing

873
00:52:59.159 --> 00:53:02.239
<v Speaker 4>or or being written new and will never be finished.

874
00:53:02.840 --> 00:53:05.880
<v Speaker 4>And then the code that is mature and stable, the

875
00:53:05.880 --> 00:53:10.280
<v Speaker 4>code that you wish that you would find, ends up

876
00:53:10.320 --> 00:53:13.440
<v Speaker 4>being at the bottom of the pile where you'll never

877
00:53:13.480 --> 00:53:15.599
<v Speaker 4>find it. And then these modules that are just making

878
00:53:15.679 --> 00:53:20.000
<v Speaker 4>constant changes are the ones that become popular. Where's the

879
00:53:20.039 --> 00:53:22.480
<v Speaker 4>modules that are the diamonds and the rough that have

880
00:53:22.559 --> 00:53:25.280
<v Speaker 4>three stars are the ones that are like, it's got

881
00:53:25.320 --> 00:53:29.199
<v Speaker 4>full documentation, it's type that it's simple code.

882
00:53:29.800 --> 00:53:32.400
<v Speaker 3>I'm not sure I agree. A J. I mean, people

883
00:53:32.400 --> 00:53:36.119
<v Speaker 3>are still using express, and Express is not is effects

884
00:53:36.480 --> 00:53:37.440
<v Speaker 3>supposedly dead.

885
00:53:38.159 --> 00:53:41.840
<v Speaker 4>So well, okay, once once a module is carved out

886
00:53:41.840 --> 00:53:44.360
<v Speaker 4>a niche that it's game over, right, that people are

887
00:53:44.400 --> 00:53:46.840
<v Speaker 4>always going to use that module forever. But I'm talking

888
00:53:46.880 --> 00:53:53.960
<v Speaker 4>about the pattern of giving immature and buggy code priority

889
00:53:54.159 --> 00:53:58.280
<v Speaker 4>because it's the code that's always being updated as opposed

890
00:53:58.320 --> 00:54:02.760
<v Speaker 4>to stable code that works. Well, you know, do you

891
00:54:03.199 --> 00:54:05.519
<v Speaker 4>are you a do you see that as a problem

892
00:54:06.000 --> 00:54:09.119
<v Speaker 4>and do you have a way to promote code that

893
00:54:09.280 --> 00:54:13.920
<v Speaker 4>is stable overcode that changes frequently or is new.

894
00:54:16.920 --> 00:54:20.199
<v Speaker 6>I also kind of disagree with the premise. I mean,

895
00:54:20.199 --> 00:54:24.119
<v Speaker 6>I think you know, in some sense the I agree

896
00:54:24.119 --> 00:54:28.400
<v Speaker 6>with you that like people should strive to get their

897
00:54:28.440 --> 00:54:31.159
<v Speaker 6>packages to a final state, and that the code should

898
00:54:31.199 --> 00:54:38.239
<v Speaker 6>be boring and not interesting. But obviously the technology, the

899
00:54:38.280 --> 00:54:42.719
<v Speaker 6>software stack of of humanity is growing and new things

900
00:54:42.760 --> 00:54:45.119
<v Speaker 6>need to be developed and they will need to be

901
00:54:45.199 --> 00:54:49.119
<v Speaker 6>iterated on, and they need a place to share those things.

902
00:54:49.559 --> 00:54:52.880
<v Speaker 4>Yes, I agree with that, but for example, once you've

903
00:54:52.920 --> 00:54:58.679
<v Speaker 4>implemented a Jason parser, you're done now. Thankfully a Jason

904
00:54:58.760 --> 00:55:01.039
<v Speaker 4>parser is so boring it gets to be in the

905
00:55:01.039 --> 00:55:05.280
<v Speaker 4>standard library. But there are many things where once you've

906
00:55:05.320 --> 00:55:09.119
<v Speaker 4>implemented them, they are done. If you are publishing updates,

907
00:55:09.559 --> 00:55:13.679
<v Speaker 4>that should reflect negatively upon the package score, because you

908
00:55:13.719 --> 00:55:18.000
<v Speaker 4>should not be publishing updates to something that can be

909
00:55:18.119 --> 00:55:20.159
<v Speaker 4>complete and having.

910
00:55:20.079 --> 00:55:22.719
<v Speaker 6>Projects software right, not everything.

911
00:55:22.760 --> 00:55:26.440
<v Speaker 4>Kitchen sinking, yes, but if you're kitchen sinking something, if

912
00:55:26.480 --> 00:55:28.840
<v Speaker 4>you're building a framework where every week you're adding a

913
00:55:28.840 --> 00:55:31.440
<v Speaker 4>new feature and another feature and another feature, another feature,

914
00:55:31.800 --> 00:55:34.119
<v Speaker 4>then you're just creating kitchen sink blot right.

915
00:55:34.960 --> 00:55:35.679
<v Speaker 2>Maybe.

916
00:55:35.800 --> 00:55:38.840
<v Speaker 1>I mean you may have a tool that that's what

917
00:55:39.039 --> 00:55:42.199
<v Speaker 1>people want. I mean that there are systems. I mean

918
00:55:42.519 --> 00:55:45.480
<v Speaker 1>take Ruby on Rails for example. A lot of people

919
00:55:45.519 --> 00:55:47.960
<v Speaker 1>love working in it and it kind of kitchen sink stuff,

920
00:55:48.000 --> 00:55:50.760
<v Speaker 1>and they keep adding things to it that do more jobs.

921
00:55:51.239 --> 00:55:55.679
<v Speaker 4>So, I mean, the web standard is changing all the time.

922
00:55:56.719 --> 00:55:57.639
<v Speaker 4>It has to adapt to that.

923
00:55:58.079 --> 00:56:01.079
<v Speaker 3>You probably don't want the kitchen sink logging library, and

924
00:56:01.159 --> 00:56:03.719
<v Speaker 3>we saw where that leads when it when that happens,

925
00:56:03.920 --> 00:56:07.920
<v Speaker 3>But you probably do want to kitchen sink something like

926
00:56:07.920 --> 00:56:11.559
<v Speaker 3>like next JS maybe or or Ruby on Rails. It

927
00:56:11.639 --> 00:56:14.639
<v Speaker 3>kind of depends on where you are.

928
00:56:14.840 --> 00:56:18.159
<v Speaker 1>I'm just saying that curating this in that way is

929
00:56:18.199 --> 00:56:21.880
<v Speaker 1>a huge job, and I don't it doesn't sound like

930
00:56:22.119 --> 00:56:26.480
<v Speaker 1>Ryan and the other folks that Dino are necessarily I mean,

931
00:56:27.079 --> 00:56:29.199
<v Speaker 1>they see some of the problems, I'm sure, but I

932
00:56:29.239 --> 00:56:31.039
<v Speaker 1>don't know if they're interested in solving that problem.

933
00:56:31.280 --> 00:56:35.800
<v Speaker 4>I'm saying heuristically, not always favoring the things that are

934
00:56:35.840 --> 00:56:40.559
<v Speaker 4>buggy and changing constantly, having some like yeah, just not

935
00:56:40.599 --> 00:56:43.360
<v Speaker 4>giving superpowers to the people that are just publishing weekly

936
00:56:43.440 --> 00:56:46.599
<v Speaker 4>And I'm sure so many company companies. But you are

937
00:56:46.639 --> 00:56:48.639
<v Speaker 4>aware of this, and you're update hacking.

938
00:56:49.199 --> 00:56:53.960
<v Speaker 6>Like publishing should be hard so that you can't change it,

939
00:56:54.039 --> 00:56:56.519
<v Speaker 6>Like I don't think things should be unnecessarily hard.

940
00:56:56.559 --> 00:56:59.800
<v Speaker 4>No, no, no, no, no, I'm I'm saying give it. So

941
00:57:00.039 --> 00:57:05.000
<v Speaker 4>for example, you go on your website packages recently updated, new.

942
00:57:06.000 --> 00:57:09.639
<v Speaker 4>I see, I don't want packages that are being updated

943
00:57:09.679 --> 00:57:12.519
<v Speaker 4>all the time, and I probably don't want packages that

944
00:57:12.559 --> 00:57:16.480
<v Speaker 4>are being new unless they're pretty close to completely.

945
00:57:16.199 --> 00:57:18.719
<v Speaker 6>But I don't. I mean, that's just something for the homepage.

946
00:57:18.760 --> 00:57:22.079
<v Speaker 6>I don't think this is the primary mechanism for finding stuff.

947
00:57:23.320 --> 00:57:26.480
<v Speaker 3>I mean, what is the primary mechanism for finding stuff?

948
00:57:26.519 --> 00:57:28.639
<v Speaker 3>Because it seems to me like for an MPM, the

949
00:57:28.679 --> 00:57:31.000
<v Speaker 3>primary mechanism for finding stuff is Google.

950
00:57:31.679 --> 00:57:34.280
<v Speaker 6>So yeah, yeah, and I think the same as is

951
00:57:34.320 --> 00:57:36.920
<v Speaker 6>true for JSR. I mean, we do have a search there.

952
00:57:37.239 --> 00:57:41.320
<v Speaker 6>I wouldn't call it perfect yet, And the JSR score

953
00:57:41.360 --> 00:57:45.280
<v Speaker 6>that I mentioned, which again encourages boring coding practices, like

954
00:57:45.679 --> 00:57:50.400
<v Speaker 6>you know, just have some docs, you know, like factors

955
00:57:50.400 --> 00:57:54.960
<v Speaker 6>into the search results. But like, ultimately, like a registry

956
00:57:55.000 --> 00:57:57.440
<v Speaker 6>is going to have lots and lots of stuff on it,

957
00:57:57.519 --> 00:57:59.960
<v Speaker 6>and you're not going to necessarily like find a list

958
00:58:00.079 --> 00:58:01.880
<v Speaker 6>of all the things that are on the pack, Like

959
00:58:02.280 --> 00:58:03.960
<v Speaker 6>you can't have a list of all the things on

960
00:58:04.079 --> 00:58:06.719
<v Speaker 6>NPM and scroll through it and find it. It doesn't

961
00:58:06.719 --> 00:58:10.199
<v Speaker 6>matter whether it's sorted by new or not. You're going

962
00:58:10.239 --> 00:58:11.639
<v Speaker 6>to pull it in terms.

963
00:58:11.400 --> 00:58:15.079
<v Speaker 4>Of search engine optimization, right, Like if you want to

964
00:58:15.119 --> 00:58:17.880
<v Speaker 4>hack the system, you can just publish updates. You can

965
00:58:17.920 --> 00:58:20.679
<v Speaker 4>just bump the minor version and basically do nothing and

966
00:58:20.719 --> 00:58:23.440
<v Speaker 4>it'll show up on the homepage. Google ranks the NPM

967
00:58:23.519 --> 00:58:27.920
<v Speaker 4>homepage higher than it ranks other pages on the internet. Right.

968
00:58:28.320 --> 00:58:31.239
<v Speaker 4>So there is and you're publishing. I'm sure you have

969
00:58:31.360 --> 00:58:35.559
<v Speaker 4>whether it's a like an XML feed or whether it's

970
00:58:35.840 --> 00:58:37.960
<v Speaker 4>you know, some sort of Jason feed, but there's I

971
00:58:38.000 --> 00:58:41.719
<v Speaker 4>assume there's something that you're publishing where you're probably putting

972
00:58:41.719 --> 00:58:45.480
<v Speaker 4>out to search engines and whatnot in things that the

973
00:58:45.519 --> 00:58:47.920
<v Speaker 4>things that are updated frequently are the things that are

974
00:58:48.239 --> 00:58:53.280
<v Speaker 4>going to get the highest like they're going to get

975
00:58:53.320 --> 00:58:56.800
<v Speaker 4>the benefits.

976
00:58:56.320 --> 00:58:58.840
<v Speaker 6>That you're worried that the that the kind of new

977
00:58:59.280 --> 00:59:03.960
<v Speaker 6>recently update call on the JSR homepage like impacts the

978
00:59:04.000 --> 00:59:08.920
<v Speaker 6>se O of of like crappy packages. I mean, yeah, okay, sure.

979
00:59:10.039 --> 00:59:12.920
<v Speaker 3>I would like to I'd like to pull us back

980
00:59:13.000 --> 00:59:15.599
<v Speaker 3>to before we finish, I'd like to bring up another

981
00:59:15.719 --> 00:59:19.679
<v Speaker 3>another another topic that you mentioned several times. And it's

982
00:59:19.719 --> 00:59:23.920
<v Speaker 3>also interesting because Node recently did a change regarding that

983
00:59:24.039 --> 00:59:26.880
<v Speaker 3>as well, which is Tipescript support. I mean, like the

984
00:59:26.920 --> 00:59:29.960
<v Speaker 3>big one of the one of the biggest things. Sorry, Chuck,

985
00:59:29.960 --> 00:59:31.719
<v Speaker 3>you wanted to say something, I just.

986
00:59:31.639 --> 00:59:35.599
<v Speaker 1>Want well, I wanted to just ask one other question

987
00:59:35.599 --> 00:59:37.760
<v Speaker 1>about jsright here, real quick, go for it. I mean,

988
00:59:37.840 --> 00:59:40.639
<v Speaker 1>because because you know, we were talking about the quality

989
00:59:40.639 --> 00:59:43.079
<v Speaker 1>of the packages and things like that, But my question

990
00:59:43.199 --> 00:59:44.239
<v Speaker 1>is how do you use it?

991
00:59:44.320 --> 00:59:45.239
<v Speaker 2>Right? Is it?

992
00:59:45.320 --> 00:59:47.559
<v Speaker 1>Is it the import maps and the imports like we're

993
00:59:47.559 --> 00:59:51.159
<v Speaker 1>talking about before. Is there a cl I was going

994
00:59:51.239 --> 00:59:53.079
<v Speaker 1>to say c l I, but a command line interface

995
00:59:53.119 --> 00:59:56.719
<v Speaker 1>for those who aren't t l A three letter acronym. Yeah,

996
00:59:57.199 --> 01:00:00.760
<v Speaker 1>uh savvy. And is it only for public? Is it

997
01:00:00.840 --> 01:00:02.639
<v Speaker 1>for pulling them into my prep?

998
01:00:02.960 --> 01:00:03.199
<v Speaker 3>Yeah?

999
01:00:03.360 --> 01:00:05.320
<v Speaker 2>How does this all kind of hang together so that

1000
01:00:05.599 --> 01:00:06.000
<v Speaker 2>I can go?

1001
01:00:06.119 --> 01:00:11.480
<v Speaker 1>Okay, JSR looks to me better in some cases than NPM.

1002
01:00:12.639 --> 01:00:15.719
<v Speaker 6>It's it is better than NBM in every in every situation.

1003
01:00:15.920 --> 01:00:21.360
<v Speaker 6>I guarantee you it is fantastic. You can use this.

1004
01:00:21.480 --> 01:00:24.840
<v Speaker 6>So if you're using Dno, it's it's like we have

1005
01:00:24.960 --> 01:00:27.800
<v Speaker 6>native support for JSR, so you can just do import

1006
01:00:27.880 --> 01:00:31.559
<v Speaker 6>JSR colon h your package, just like you can do

1007
01:00:31.719 --> 01:00:35.159
<v Speaker 6>import NPM call in your package. Right, It's it's a

1008
01:00:35.320 --> 01:00:38.920
<v Speaker 6>u r L in the system. And so Dino has

1009
01:00:39.000 --> 01:00:41.519
<v Speaker 6>native support for this. And you can of course put

1010
01:00:41.599 --> 01:00:44.480
<v Speaker 6>JSR specifiers into your import maps and turn them into

1011
01:00:44.639 --> 01:00:48.480
<v Speaker 6>bear specifiers if you know what those words mean. If

1012
01:00:48.480 --> 01:00:55.079
<v Speaker 6>you're using Node or bun, you can use the NPM

1013
01:00:55.119 --> 01:00:58.679
<v Speaker 6>compatibility layer like behind the scenes. All of these packages

1014
01:00:58.719 --> 01:01:02.800
<v Speaker 6>are actually exposed as an MPM registry NPM dot JSR

1015
01:01:02.840 --> 01:01:06.800
<v Speaker 6>dot io, and you can add them to your package. Jason,

1016
01:01:07.559 --> 01:01:12.519
<v Speaker 6>So there is really great docs on on JSR, and

1017
01:01:12.760 --> 01:01:16.800
<v Speaker 6>I'll just drop you a link here, but on each

1018
01:01:16.800 --> 01:01:19.679
<v Speaker 6>of the package pages you should see like a little

1019
01:01:19.760 --> 01:01:22.400
<v Speaker 6>usage statement and it will tell you the commands to

1020
01:01:22.519 --> 01:01:25.440
<v Speaker 6>run to add it to your to your package Jason.

1021
01:01:25.559 --> 01:01:31.000
<v Speaker 6>But yeah, the support gets really really good when when

1022
01:01:31.039 --> 01:01:33.840
<v Speaker 6>it comes to Dino where where it all is super

1023
01:01:33.880 --> 01:01:37.199
<v Speaker 6>smooth and requires no extra commands.

1024
01:01:38.960 --> 01:01:39.360
<v Speaker 2>Awesome.

1025
01:01:39.440 --> 01:01:39.639
<v Speaker 6>Yeah.

1026
01:01:39.639 --> 01:01:42.639
<v Speaker 1>I just put that into the comment on Facebook, YouTube

1027
01:01:42.679 --> 01:01:45.480
<v Speaker 1>a Twitch as well, so people can find it if

1028
01:01:45.480 --> 01:01:46.960
<v Speaker 1>you're watching there.

1029
01:01:47.800 --> 01:01:49.480
<v Speaker 2>And we'll try and get it into the show notes

1030
01:01:49.519 --> 01:01:49.880
<v Speaker 2>as well.

1031
01:01:49.960 --> 01:01:52.280
<v Speaker 1>But yeah, I mean that that was what I wanted

1032
01:01:52.320 --> 01:01:54.800
<v Speaker 1>to know, is, hey, it looks like a great experience.

1033
01:01:54.840 --> 01:01:57.559
<v Speaker 1>So yeah, and this is ready now right. This isn't

1034
01:01:57.639 --> 01:01:59.679
<v Speaker 1>something you're announcing and saying, hey, try it a couple

1035
01:01:59.679 --> 01:02:01.159
<v Speaker 1>of weeks. It's out there.

1036
01:02:01.280 --> 01:02:05.960
<v Speaker 6>It's done, done and done. No, we're still iterating on it.

1037
01:02:06.000 --> 01:02:08.639
<v Speaker 6>But I think it is like ninety nine percent done,

1038
01:02:08.679 --> 01:02:10.519
<v Speaker 6>Like it's working. It's fantastic.

1039
01:02:11.360 --> 01:02:14.679
<v Speaker 4>Well, if I understood correctly, Dno. Two is just an iteration.

1040
01:02:14.840 --> 01:02:17.639
<v Speaker 4>It's like, do you know one point eighty seven? But

1041
01:02:17.840 --> 01:02:19.519
<v Speaker 4>at some point you just need to go to two?

1042
01:02:19.639 --> 01:02:19.800
<v Speaker 3>Right.

1043
01:02:20.880 --> 01:02:23.280
<v Speaker 4>It sounds like there's a few milestones, but it's not right.

1044
01:02:24.079 --> 01:02:25.239
<v Speaker 4>It's not a rewrite.

1045
01:02:26.519 --> 01:02:29.320
<v Speaker 6>It's not a rewrite, And the main thing is is

1046
01:02:29.360 --> 01:02:34.519
<v Speaker 6>that this NPM support is really you know, at four

1047
01:02:34.599 --> 01:02:37.880
<v Speaker 6>nines of completeness. It's like complete. You have this option

1048
01:02:37.960 --> 01:02:40.960
<v Speaker 6>of JSR available to you if you want to have

1049
01:02:41.800 --> 01:02:49.039
<v Speaker 6>the leveled up version of NPM. Yeah, I think it's

1050
01:02:49.199 --> 01:02:51.280
<v Speaker 6>you know, there's other aspects of this that we haven't

1051
01:02:51.280 --> 01:02:55.519
<v Speaker 6>gotten into, like the long term support. Dino is very

1052
01:02:55.559 --> 01:02:58.519
<v Speaker 6>stable at this point. We are not changing anything. We're

1053
01:02:58.519 --> 01:03:02.199
<v Speaker 6>introducing long term support in Dino two, and we also

1054
01:03:02.239 --> 01:03:05.440
<v Speaker 6>have workspaces in Dino two, but that you know, it's

1055
01:03:05.519 --> 01:03:08.400
<v Speaker 6>kind of getting you know, two is about scaling up

1056
01:03:08.559 --> 01:03:13.119
<v Speaker 6>projects to to you know, relatively large code bases where

1057
01:03:13.480 --> 01:03:15.639
<v Speaker 6>you know, I think Dino started with like really great

1058
01:03:15.639 --> 01:03:18.360
<v Speaker 6>for single files, and you know, what we're trying to

1059
01:03:18.400 --> 01:03:21.199
<v Speaker 6>do is keep it, keep Dino great for single files,

1060
01:03:21.239 --> 01:03:24.159
<v Speaker 6>but make sure that it scales up to two projects

1061
01:03:24.159 --> 01:03:26.360
<v Speaker 6>that you know, have one hundred thousand lines of JavaScript

1062
01:03:26.400 --> 01:03:30.039
<v Speaker 6>in it, and that includes the NPM support, that includes

1063
01:03:30.079 --> 01:03:34.360
<v Speaker 6>and JSR that that means, the long term support and

1064
01:03:34.880 --> 01:03:38.000
<v Speaker 6>workspaces all all kind of factor into this like scaling

1065
01:03:38.079 --> 01:03:40.239
<v Speaker 6>up of Dino.

1066
01:03:41.039 --> 01:03:44.119
<v Speaker 3>So I would really like to sneak in one or

1067
01:03:44.239 --> 01:03:46.679
<v Speaker 3>maybe two things before we wrap up. Let's see if

1068
01:03:46.719 --> 01:03:49.400
<v Speaker 3>I if we manage it. So the one of them

1069
01:03:49.599 --> 01:03:52.480
<v Speaker 3>I started to mention was the type of support like

1070
01:03:52.599 --> 01:03:56.800
<v Speaker 3>the as you said initially, you in a kind of

1071
01:03:56.840 --> 01:04:00.159
<v Speaker 3>similar way to how you recognized early on the the

1072
01:04:00.239 --> 01:04:04.280
<v Speaker 3>role that JavaScript could and should play on the service side.

1073
01:04:04.280 --> 01:04:08.199
<v Speaker 3>You realize early on that the market was heading towards typescript,

1074
01:04:08.199 --> 01:04:12.559
<v Speaker 3>and in fact, like I think the majority of JavaScript

1075
01:04:12.559 --> 01:04:18.719
<v Speaker 3>code in the enterprise is actually typescript, and you introduced

1076
01:04:21.800 --> 01:04:27.360
<v Speaker 3>like effect built in support like from the get go. Interestingly,

1077
01:04:27.519 --> 01:04:32.320
<v Speaker 3>now know that's just introduced a sort of support for

1078
01:04:32.440 --> 01:04:37.519
<v Speaker 3>typescript as well, by effectively stripping out all of the

1079
01:04:37.719 --> 01:04:42.039
<v Speaker 3>type information, essentially treating it by comments and running what's left.

1080
01:04:42.679 --> 01:04:45.519
<v Speaker 3>Is that similar to what you do or do you

1081
01:04:45.639 --> 01:04:46.639
<v Speaker 3>do something different?

1082
01:04:48.360 --> 01:04:51.280
<v Speaker 6>It's similar to what we do when you run typescript

1083
01:04:51.320 --> 01:04:55.800
<v Speaker 6>and Dino we very nice attribute of typescript is that

1084
01:04:55.880 --> 01:05:00.920
<v Speaker 6>it's a super cheap operation to transpile that into JavaScript.

1085
01:05:00.920 --> 01:05:02.920
<v Speaker 6>You don't really have to understand the types, you just

1086
01:05:02.960 --> 01:05:06.639
<v Speaker 6>strip them out, and that's how Dino runs things. Dino

1087
01:05:06.840 --> 01:05:11.199
<v Speaker 6>also has the type checker, the Typescript type checker in it,

1088
01:05:11.280 --> 01:05:14.320
<v Speaker 6>so if you run Dino check, it will check your

1089
01:05:14.360 --> 01:05:18.119
<v Speaker 6>types and the typeescript is kind of fully baked in

1090
01:05:18.239 --> 01:05:23.599
<v Speaker 6>through the system, through the linter, through JSR, the you know,

1091
01:05:23.719 --> 01:05:26.239
<v Speaker 6>Dino tries very hard to make it so you don't

1092
01:05:26.280 --> 01:05:31.119
<v Speaker 6>need to write any configuration files. No, no ts configured necessary.

1093
01:05:31.440 --> 01:05:35.199
<v Speaker 6>So the typescript goes much deeper in Dino. But yeah, indeed,

1094
01:05:35.360 --> 01:05:40.320
<v Speaker 6>uh is note is picking up on some of the

1095
01:05:40.320 --> 01:05:41.800
<v Speaker 6>features of Dino.

1096
01:05:43.159 --> 01:05:50.320
<v Speaker 3>So so because you're effectively just stripping out the typescript,

1097
01:05:50.440 --> 01:05:54.639
<v Speaker 3>you really don't care about the typescript configuration because I

1098
01:05:54.679 --> 01:06:00.559
<v Speaker 3>think it it was uh Matteo Colina you probably know

1099
01:06:01.840 --> 01:06:04.800
<v Speaker 3>once said that typescript is not a language, it's a

1100
01:06:05.039 --> 01:06:08.760
<v Speaker 3>universe of languages, because you could really specify what kind

1101
01:06:08.760 --> 01:06:12.199
<v Speaker 3>of language it is via your TS can figure. Uh,

1102
01:06:12.239 --> 01:06:15.159
<v Speaker 3>And there's certain then there's certainly truth in that you

1103
01:06:15.199 --> 01:06:18.559
<v Speaker 3>can really modify the way the typeescript as the language works.

1104
01:06:18.719 --> 01:06:21.679
<v Speaker 3>But I guess that if you're just stripping out the

1105
01:06:21.760 --> 01:06:25.519
<v Speaker 3>types and effectively just ignoring them, then it all all

1106
01:06:25.559 --> 01:06:27.480
<v Speaker 3>boils down to the exact same thing.

1107
01:06:30.119 --> 01:06:33.119
<v Speaker 6>Uh, There's there's a bit to unpack there. So, first

1108
01:06:33.119 --> 01:06:36.280
<v Speaker 6>of all, Dino does not just stript types. Dono understands

1109
01:06:36.280 --> 01:06:38.199
<v Speaker 6>the types deeply, do you know, do you know has

1110
01:06:38.280 --> 01:06:43.039
<v Speaker 6>deep type script support in it as does js R.

1111
01:06:43.920 --> 01:06:46.719
<v Speaker 6>Like this, this typeescript support goes goes very deep in

1112
01:06:46.760 --> 01:06:50.960
<v Speaker 6>the system, so much much more so than just stripping types. Ah,

1113
01:06:52.039 --> 01:06:55.800
<v Speaker 6>It's true that you can configure typescript in different ways,

1114
01:06:55.840 --> 01:07:01.280
<v Speaker 6>and typescripts with different configuration code bases with configurations can

1115
01:07:02.079 --> 01:07:06.440
<v Speaker 6>be incompatible with each other. We strongly believe that typescript

1116
01:07:06.480 --> 01:07:11.840
<v Speaker 6>should move to a single configuration, single language world where

1117
01:07:11.840 --> 01:07:15.960
<v Speaker 6>you can actually distribute typescript as the primary code, not

1118
01:07:16.280 --> 01:07:20.960
<v Speaker 6>the typeescript type script JavaScript. And that is one of

1119
01:07:21.000 --> 01:07:24.719
<v Speaker 6>the main features of JSR. You literally write the typescript

1120
01:07:24.840 --> 01:07:28.480
<v Speaker 6>and distribute the typeescript because we believe that run times

1121
01:07:28.559 --> 01:07:32.360
<v Speaker 6>like Dino and Node in the future, we'll be able

1122
01:07:32.400 --> 01:07:35.880
<v Speaker 6>to understand that typescript directly. And so we believe in

1123
01:07:36.360 --> 01:07:42.000
<v Speaker 6>linking typescript together and having a single configuration. And I

1124
01:07:42.000 --> 01:07:45.519
<v Speaker 6>think a lot of people people might think that there's

1125
01:07:45.559 --> 01:07:48.599
<v Speaker 6>a world of possibilities in all of these possibilities. There

1126
01:07:48.679 --> 01:07:50.920
<v Speaker 6>is a world of possibilities with typescript. You can you

1127
01:07:50.920 --> 01:07:53.000
<v Speaker 6>can set all sorts of things, but not all of

1128
01:07:53.000 --> 01:07:57.840
<v Speaker 6>those possibilities are equally ranked. Okay, there is a good

1129
01:07:57.880 --> 01:08:01.840
<v Speaker 6>way to configure Typescript and pushes you towards that configuration

1130
01:08:02.280 --> 01:08:05.239
<v Speaker 6>as is JSR. That's part of the JSR score. So

1131
01:08:05.639 --> 01:08:12.960
<v Speaker 6>we encourage the default best practices in typescript, and we

1132
01:08:13.159 --> 01:08:18.439
<v Speaker 6>encourage using Typescript as a primary language and distributing typescript

1133
01:08:18.640 --> 01:08:23.079
<v Speaker 6>and linking Typescript to typescript and not introducing always this

1134
01:08:23.760 --> 01:08:28.399
<v Speaker 6>compile step. I think this is unnecessary complication because ultimately

1135
01:08:28.479 --> 01:08:31.920
<v Speaker 6>the code that people are writing is Typescript, and having

1136
01:08:31.960 --> 01:08:38.039
<v Speaker 6>this kind of intermediate compilation step and linking step is

1137
01:08:38.359 --> 01:08:40.039
<v Speaker 6>it creates complications for people.

1138
01:08:40.319 --> 01:08:43.760
<v Speaker 3>Yeah, but the compilation step also serves a certain purpose,

1139
01:08:43.920 --> 01:08:47.319
<v Speaker 3>I think, because at the end of the day, typescript

1140
01:08:47.399 --> 01:08:51.039
<v Speaker 3>is not about run time type checking. It's about it's

1141
01:08:51.039 --> 01:08:54.960
<v Speaker 3>about development type type checking and compile time type checking.

1142
01:08:55.359 --> 01:09:00.479
<v Speaker 3>If you're taking away the compilation you're also negating effectively

1143
01:09:00.520 --> 01:09:03.720
<v Speaker 3>the compiled time type checking. You kind of want a

1144
01:09:03.760 --> 01:09:06.800
<v Speaker 3>certain middle step, don't you No?

1145
01:09:07.239 --> 01:09:11.399
<v Speaker 6>Do you know Dino has Dino check subcommand that runs

1146
01:09:11.479 --> 01:09:15.039
<v Speaker 6>the type checking. It's it's effectively like a lint right

1147
01:09:15.079 --> 01:09:18.720
<v Speaker 6>on on your on your so you'll you'll when you're developing,

1148
01:09:18.800 --> 01:09:21.000
<v Speaker 6>of course, you'll see this in your LSP, you'll you'll

1149
01:09:21.000 --> 01:09:25.439
<v Speaker 6>see red squigglyes and and the typeescript TSC kind of

1150
01:09:25.520 --> 01:09:29.279
<v Speaker 6>running in the background. Uh, but also during you know,

1151
01:09:29.359 --> 01:09:31.680
<v Speaker 6>when when you push the c I or whatever, you

1152
01:09:31.720 --> 01:09:35.119
<v Speaker 6>should also be running Dino check, which which is you know,

1153
01:09:35.359 --> 01:09:39.119
<v Speaker 6>effectively t SC and UH check those types and you

1154
01:09:39.159 --> 01:09:41.960
<v Speaker 6>should get errors if if those types are not correct.

1155
01:09:42.039 --> 01:09:45.439
<v Speaker 6>So there's no compilation step, you're still no compilation.

1156
01:09:45.640 --> 01:09:50.960
<v Speaker 3>Linting instead of compilation basically is what you're saying. You're

1157
01:09:51.039 --> 01:09:53.439
<v Speaker 3>not getting rid of a step, but you're replacing a

1158
01:09:53.439 --> 01:09:59.800
<v Speaker 3>compilation step with a linting step. Yes, so if I'm

1159
01:10:00.039 --> 01:10:05.720
<v Speaker 3>running a step anyway, what's the benefit of linting over

1160
01:10:06.119 --> 01:10:08.680
<v Speaker 3>linting and compilation? Why not do the compilation?

1161
01:10:09.560 --> 01:10:13.159
<v Speaker 6>Think about what happens. Think about what happens when you

1162
01:10:13.199 --> 01:10:17.479
<v Speaker 6>write a typescript module and you distributed this to NPN.

1163
01:10:17.640 --> 01:10:22.000
<v Speaker 6>Think about what you have to think about the type stripping.

1164
01:10:22.560 --> 01:10:25.520
<v Speaker 6>And you need to build a build process to create JavaScript,

1165
01:10:25.760 --> 01:10:27.760
<v Speaker 6>and you need to think about the output of that.

1166
01:10:28.640 --> 01:10:31.640
<v Speaker 6>So you need to generate some code, right, you need

1167
01:10:31.680 --> 01:10:35.600
<v Speaker 6>to run TSC and create a discs folder and have

1168
01:10:35.760 --> 01:10:39.279
<v Speaker 6>kind of the type stripts JavaScript output it into that folder.

1169
01:10:39.479 --> 01:10:41.600
<v Speaker 6>You have to think about, you know, what flavor of

1170
01:10:41.680 --> 01:10:46.359
<v Speaker 6>JavaScript you have that is all not abstracted away from you.

1171
01:10:46.520 --> 01:10:50.800
<v Speaker 6>Right in Dino, in JSR, that is completely gone. You

1172
01:10:50.840 --> 01:10:52.840
<v Speaker 6>do not think about that. You don't even know about that.

1173
01:10:52.920 --> 01:10:55.640
<v Speaker 6>If you're a user, all you are using is typescript.

1174
01:10:55.960 --> 01:10:57.960
<v Speaker 6>So yes, in your c I script you still have

1175
01:10:58.319 --> 01:11:01.560
<v Speaker 6>one line that says dino check and that effectively does

1176
01:11:01.600 --> 01:11:03.640
<v Speaker 6>your type checking for you. But there's a whole bunch

1177
01:11:03.680 --> 01:11:07.199
<v Speaker 6>of complication that is completely alleviated from you. And I

1178
01:11:07.199 --> 01:11:09.760
<v Speaker 6>think as a user, when you go to use JSR,

1179
01:11:09.920 --> 01:11:12.079
<v Speaker 6>you probably are not even aware of this, and the

1180
01:11:12.199 --> 01:11:16.760
<v Speaker 6>overall vibe that you get is just like, holy shit.

1181
01:11:16.960 --> 01:11:19.920
<v Speaker 6>I did not realize this could be so simple because

1182
01:11:19.920 --> 01:11:22.199
<v Speaker 6>you're not necessarily it's not going to be like kind

1183
01:11:22.199 --> 01:11:25.560
<v Speaker 6>of a conscious Not everybody's thinking about their disfolder and

1184
01:11:25.600 --> 01:11:28.399
<v Speaker 6>the distribution of JavaScript all of the time. Right this

1185
01:11:28.479 --> 01:11:32.720
<v Speaker 6>is this is effectively internal details that have been because

1186
01:11:32.880 --> 01:11:36.079
<v Speaker 6>NPM is not evolving, are exposed to users. And when

1187
01:11:36.119 --> 01:11:38.840
<v Speaker 6>you go to a system like JSR or DINO where

1188
01:11:38.920 --> 01:11:42.760
<v Speaker 6>we kind of deal with typescript natively, the end effect,

1189
01:11:42.960 --> 01:11:47.800
<v Speaker 6>the vibe for the everyday programmer is just holy shit.

1190
01:11:47.920 --> 01:11:50.840
<v Speaker 6>This is crazy simple. I didn't realize it could be

1191
01:11:50.880 --> 01:11:52.079
<v Speaker 6>this nice.

1192
01:11:53.239 --> 01:11:55.800
<v Speaker 3>Cool makes sense now. I don't know if we have

1193
01:11:55.880 --> 01:11:58.800
<v Speaker 3>time to touch on that. But my second question was

1194
01:11:58.840 --> 01:12:01.880
<v Speaker 3>about it seems that one place where Dino has been

1195
01:12:01.880 --> 01:12:06.680
<v Speaker 3>really successful compared to Node and apparently more appropriate is

1196
01:12:06.680 --> 01:12:10.039
<v Speaker 3>in edge computing. Is that correct? I seem to recall that.

1197
01:12:12.920 --> 01:12:19.600
<v Speaker 6>Edgy Dino is notice bigger than you know in every

1198
01:12:19.720 --> 01:12:20.680
<v Speaker 6>in every respect.

1199
01:12:20.960 --> 01:12:24.640
<v Speaker 4>H So you know, including memory processing time?

1200
01:12:26.079 --> 01:12:34.800
<v Speaker 6>No? Uh, well sorry I got the reversed. Yes, that's correct. U. Yes,

1201
01:12:35.239 --> 01:12:37.399
<v Speaker 6>do you know Dono the company I think what you're

1202
01:12:37.399 --> 01:12:41.760
<v Speaker 6>alluding to has in edge compute, Uh, commercial service called

1203
01:12:41.760 --> 01:12:46.119
<v Speaker 6>Dino deploy and Dino subhosting. And yes we we this

1204
01:12:46.199 --> 01:12:48.560
<v Speaker 6>is how we make money. We we we provide services

1205
01:12:48.560 --> 01:12:50.119
<v Speaker 6>around edge compute.

1206
01:12:51.239 --> 01:12:54.119
<v Speaker 4>Well, we've heard of other companies using Dino because of

1207
01:12:54.159 --> 01:12:58.760
<v Speaker 4>its better performance characteristic characteristics that we as we've interviewed

1208
01:12:58.800 --> 01:13:01.239
<v Speaker 4>other people. So I think that's where our our bias

1209
01:13:01.319 --> 01:13:04.439
<v Speaker 4>leans toward what we've heard from you know, other people

1210
01:13:04.960 --> 01:13:06.039
<v Speaker 4>on the show and whatnot.

1211
01:13:06.199 --> 01:13:06.760
<v Speaker 3>Or is that.

1212
01:13:06.720 --> 01:13:11.359
<v Speaker 6>Generally generally performance is better in in Dino it is. Uh,

1213
01:13:11.359 --> 01:13:13.960
<v Speaker 6>we spend a lot of time to make make it great.

1214
01:13:18.159 --> 01:13:21.239
<v Speaker 4>What do you have? I this might be for part

1215
01:13:21.640 --> 01:13:23.239
<v Speaker 4>fun what about bun.

1216
01:13:24.800 --> 01:13:32.199
<v Speaker 6>Fun is? Uh? Yeah, was there a joke there? Fun

1217
01:13:32.319 --> 01:13:38.399
<v Speaker 6>is is a re implementation of Node, uh that is

1218
01:13:38.439 --> 01:13:42.680
<v Speaker 6>trying to outperform it. So I think they've done some

1219
01:13:42.800 --> 01:13:48.600
<v Speaker 6>nice ergonomic moves. They're also kind of uh building the

1220
01:13:48.600 --> 01:13:51.600
<v Speaker 6>package manager into the run time, which I agree with.

1221
01:13:51.640 --> 01:13:54.760
<v Speaker 6>I think that's that's a good step, and also taking

1222
01:13:54.800 --> 01:13:58.840
<v Speaker 6>on kind of this typescript type stripping feature from from Dino.

1223
01:13:59.760 --> 01:14:02.479
<v Speaker 6>But you know, basically, have have the have the idea

1224
01:14:02.600 --> 01:14:07.239
<v Speaker 6>that yeah, twenty nineteen JavaScript is is the end state,

1225
01:14:07.439 --> 01:14:09.239
<v Speaker 6>and all we need to do is make this faster.

1226
01:14:09.319 --> 01:14:12.159
<v Speaker 6>And I fundamentally disagree with this. I think there there

1227
01:14:12.199 --> 01:14:15.279
<v Speaker 6>is really something to level up here and improve on.

1228
01:14:15.399 --> 01:14:17.680
<v Speaker 6>I do not think we should continue to use common

1229
01:14:17.760 --> 01:14:22.800
<v Speaker 6>JS require indefinitely, so you know that. I think. butN

1230
01:14:22.920 --> 01:14:25.920
<v Speaker 6>in in many ways is is uh, you know, trying

1231
01:14:25.960 --> 01:14:29.720
<v Speaker 6>to do Dino, but but maybe learning from our mistakes.

1232
01:14:30.439 --> 01:14:36.960
<v Speaker 6>You know, they very aptly are focusing on node compatibility.

1233
01:14:38.159 --> 01:14:43.000
<v Speaker 6>But yeah, to what end? Why why rewrite node exactly?

1234
01:14:43.199 --> 01:14:43.439
<v Speaker 3>That?

1235
01:14:43.439 --> 01:14:49.439
<v Speaker 6>That's that's always my question. I think rewriting rust, Yeah,

1236
01:14:49.479 --> 01:14:52.600
<v Speaker 6>I mean I'm sure it's I'm sure, it's fun. Ultimately

1237
01:14:52.720 --> 01:14:54.920
<v Speaker 6>that's that's not what I'm trying to do here with

1238
01:14:54.920 --> 01:14:58.239
<v Speaker 6>with dino is is rewrite node in in rust. We

1239
01:14:58.279 --> 01:15:01.439
<v Speaker 6>are trying to level up vascript and make this stuff

1240
01:15:01.479 --> 01:15:06.520
<v Speaker 6>fundamentally simpler for for developers. Performance wise, I find the

1241
01:15:06.800 --> 01:15:08.880
<v Speaker 6>benchmarks that they have at the top, you know, above

1242
01:15:08.880 --> 01:15:12.279
<v Speaker 6>their fold on on their their website are not wrong,

1243
01:15:12.800 --> 01:15:18.319
<v Speaker 6>but they are cherry picked. The performance situation with Dino

1244
01:15:19.079 --> 01:15:23.119
<v Speaker 6>is fantastic, and Dino outperforms, butN in all sorts of

1245
01:15:23.159 --> 01:15:27.000
<v Speaker 6>circumstances in many of the ways that matter more. For example,

1246
01:15:27.159 --> 01:15:29.760
<v Speaker 6>if you want to you know, if you're running on

1247
01:15:29.800 --> 01:15:32.279
<v Speaker 6>eight of US Lambda and you're concerned about your your

1248
01:15:32.279 --> 01:15:36.159
<v Speaker 6>primary concern is not necessarily about Hello World throughput, which

1249
01:15:36.199 --> 01:15:38.560
<v Speaker 6>is the benchmark that they have up on their page.

1250
01:15:38.720 --> 01:15:42.880
<v Speaker 6>But it's a little unfair, actually, it's it's it's very

1251
01:15:42.960 --> 01:15:46.640
<v Speaker 6>cherry picked. And I think with a system JavaScript run

1252
01:15:46.680 --> 01:15:52.159
<v Speaker 6>times are have all sorts of functionality that you know SPA,

1253
01:15:52.399 --> 01:15:55.439
<v Speaker 6>there's there's thousands of APIs that that have been implemented

1254
01:15:55.520 --> 01:16:01.239
<v Speaker 6>performance changes all across the board here. Uh but you know,

1255
01:16:01.319 --> 01:16:03.479
<v Speaker 6>I think if you if you look at the overall picture,

1256
01:16:03.600 --> 01:16:09.199
<v Speaker 6>the performance situation is vastly overstated above the fold on

1257
01:16:09.520 --> 01:16:12.840
<v Speaker 6>Bun's website. And yeah, I think generally have the goal

1258
01:16:12.880 --> 01:16:18.520
<v Speaker 6>of re implementing note And yeah, that's as that's I guess,

1259
01:16:18.560 --> 01:16:20.439
<v Speaker 6>a goal, but not not what I'm trying to do.

1260
01:16:20.760 --> 01:16:23.239
<v Speaker 6>We are we are trying to level up JavaScript and

1261
01:16:23.560 --> 01:16:26.439
<v Speaker 6>kind of build the JavaScript for the next twenty years.

1262
01:16:26.800 --> 01:16:28.399
<v Speaker 4>That was an excellent line to end on.

1263
01:16:29.439 --> 01:16:30.760
<v Speaker 3>Yeah, good stuff.

1264
01:16:30.880 --> 01:16:33.159
<v Speaker 5>By the way, to answer your question, the rim shot

1265
01:16:33.159 --> 01:16:34.800
<v Speaker 5>was because you mentioned the magic word pun.

1266
01:16:35.079 --> 01:16:37.359
<v Speaker 6>So I just had to throw that. I see, I

1267
01:16:37.399 --> 01:16:37.960
<v Speaker 6>got it.

1268
01:16:38.079 --> 01:16:40.079
<v Speaker 5>Somethinking about pun and Bun and I was like, okay,

1269
01:16:40.079 --> 01:16:41.359
<v Speaker 5>that deserves one right there.

1270
01:16:42.479 --> 01:16:46.439
<v Speaker 2>All right, well, let's do picks, Dan, you want to

1271
01:16:46.479 --> 01:16:47.279
<v Speaker 2>start us with picks?

1272
01:16:48.000 --> 01:16:51.520
<v Speaker 3>If I mused myself, it will be helpful. This is

1273
01:16:51.560 --> 01:16:54.800
<v Speaker 3>the second show that I'm recording in one week, so

1274
01:16:54.960 --> 01:16:58.039
<v Speaker 3>I'll excuse myself and say that I'm all picked out

1275
01:16:59.279 --> 01:17:02.079
<v Speaker 3>and move on to the next person.

1276
01:17:02.760 --> 01:17:05.840
<v Speaker 2>All right, AJ, what are your picks?

1277
01:17:06.399 --> 01:17:06.479
<v Speaker 3>So?

1278
01:17:08.000 --> 01:17:15.680
<v Speaker 4>I tried swift, and I have not had enough time

1279
01:17:15.720 --> 01:17:22.840
<v Speaker 4>with it to give a true take, but I'd like it.

1280
01:17:24.399 --> 01:17:29.000
<v Speaker 4>I have this problem with mac os as they introduced

1281
01:17:29.039 --> 01:17:33.560
<v Speaker 4>these permissions and tools that I used to have that work,

1282
01:17:33.640 --> 01:17:36.520
<v Speaker 4>they kind of stop working or new bugs get introduced

1283
01:17:36.520 --> 01:17:39.439
<v Speaker 4>as they're changing out all those permission models. And one

1284
01:17:39.439 --> 01:17:42.760
<v Speaker 4>thing that's been happening lately is my network drives become

1285
01:17:42.840 --> 01:17:46.399
<v Speaker 4>unmounted and then when my computer wakes up, they're not remounted.

1286
01:17:47.159 --> 01:17:51.079
<v Speaker 4>And so I wanted to create something that would listen

1287
01:17:51.159 --> 01:17:55.560
<v Speaker 4>for the unlock event and then mount my network drives.

1288
01:17:56.560 --> 01:18:01.000
<v Speaker 4>And it ended up being the demo code was ten

1289
01:18:01.079 --> 01:18:04.239
<v Speaker 4>lines of SWIFT, and then I expanded that out because

1290
01:18:04.279 --> 01:18:06.680
<v Speaker 4>I wanted to make it like a normal project with

1291
01:18:06.720 --> 01:18:09.399
<v Speaker 4>command line arguments and you know, the stuff that I

1292
01:18:09.439 --> 01:18:11.159
<v Speaker 4>typically do, and kind of get a feel for it,

1293
01:18:11.800 --> 01:18:15.399
<v Speaker 4>and I really really like it. It's it's kind of

1294
01:18:16.319 --> 01:18:21.000
<v Speaker 4>to me, it kind of feels almost on par with

1295
01:18:21.239 --> 01:18:26.760
<v Speaker 4>GO in some respects. I don't think that there maybe

1296
01:18:26.880 --> 01:18:31.319
<v Speaker 4>as thoughtful and deliberate in the way that they present

1297
01:18:31.640 --> 01:18:38.199
<v Speaker 4>APIs as GO is, but it is very explicit and

1298
01:18:40.359 --> 01:18:43.680
<v Speaker 4>there's there's enough training examples that as a person who

1299
01:18:43.680 --> 01:18:47.520
<v Speaker 4>had never touched Swift before, I was able to use

1300
01:18:47.600 --> 01:18:52.720
<v Speaker 4>GPT to pretty much, you know, be the code assists.

1301
01:18:54.039 --> 01:18:57.600
<v Speaker 4>My primary code assist in creating my program, which ended

1302
01:18:57.640 --> 01:18:59.720
<v Speaker 4>up being more than ten lines it's more like one

1303
01:18:59.760 --> 01:19:02.479
<v Speaker 4>hundre because of the like I said, there's some arguments

1304
01:19:02.479 --> 01:19:04.399
<v Speaker 4>parsing and some other stuff and me just playing around.

1305
01:19:04.760 --> 01:19:13.159
<v Speaker 4>But yeah, so I'm I'm gonna pick Apple's Swift. It

1306
01:19:13.159 --> 01:19:20.399
<v Speaker 4>it seems to be a really solid language, and I yeah,

1307
01:19:20.439 --> 01:19:23.560
<v Speaker 4>I don't know, I have it. It's different, it's it

1308
01:19:23.640 --> 01:19:26.399
<v Speaker 4>actually reminds me more of PowerShell than of anything else,

1309
01:19:27.239 --> 01:19:30.840
<v Speaker 4>which that sounds like a disc but it's not. PowerShell

1310
01:19:31.640 --> 01:19:34.159
<v Speaker 4>is probably one of the best things that Microsoft has

1311
01:19:34.199 --> 01:19:40.079
<v Speaker 4>ever turned out. PowerShell is incredibly well engineered and thought out.

1312
01:19:40.119 --> 01:19:41.880
<v Speaker 4>It has a different paradigm. It's actually a much more

1313
01:19:41.960 --> 01:19:46.079
<v Speaker 4>functional paradigm. But and it doesn't have a concept of

1314
01:19:46.119 --> 01:19:48.039
<v Speaker 4>standard in and standard out as much as it has

1315
01:19:48.039 --> 01:19:51.159
<v Speaker 4>a concept of pipes and streams. And so it's not

1316
01:19:51.199 --> 01:19:53.479
<v Speaker 4>just standard in and standard out. You can, I think

1317
01:19:53.520 --> 01:19:56.039
<v Speaker 4>you can have an arbitrary number of streams, but they're

1318
01:19:56.199 --> 01:19:58.920
<v Speaker 4>they're kind of functional in the way that they work,

1319
01:19:58.920 --> 01:20:01.560
<v Speaker 4>almost like channels go or something. I don't know quite

1320
01:20:01.600 --> 01:20:04.880
<v Speaker 4>how to explained. Anyway, Swift is Swift is a pick

1321
01:20:04.920 --> 01:20:05.159
<v Speaker 4>for me.

1322
01:20:06.000 --> 01:20:08.439
<v Speaker 3>And then before you move on, it's just what you

1323
01:20:08.560 --> 01:20:12.199
<v Speaker 3>said about GPT just occurred to me that we totally

1324
01:20:12.239 --> 01:20:15.960
<v Speaker 3>forgot to ask Ryan, which a which mL model are

1325
01:20:15.960 --> 01:20:17.800
<v Speaker 3>you going to be building into Dino?

1326
01:20:18.560 --> 01:20:21.439
<v Speaker 4>Yeah? Yeah, what's your what's your AI strategy for the future?

1327
01:20:25.079 --> 01:20:27.359
<v Speaker 6>I really, you know, doing a startup like that, that

1328
01:20:27.439 --> 01:20:32.840
<v Speaker 6>question gets asked and ironically very often, Uh oh, I know,

1329
01:20:33.159 --> 01:20:39.640
<v Speaker 6>I our our, our, our technology is pretty orthogonal to this.

1330
01:20:40.399 --> 01:20:42.399
<v Speaker 6>But if you go back and kind of look at

1331
01:20:42.439 --> 01:20:45.640
<v Speaker 6>some of my stuff, uh, Dino actually started out as

1332
01:20:45.680 --> 01:20:50.079
<v Speaker 6>a TensorFlow plus node project. We I was coming out

1333
01:20:50.079 --> 01:20:54.520
<v Speaker 6>of Google Brain and wanting to do mL models in JavaScript.

1334
01:20:55.319 --> 01:20:57.960
<v Speaker 6>And we haven't touched on kind of the Jupiter notebook

1335
01:20:58.039 --> 01:21:01.279
<v Speaker 6>support in in Dino, but you know, I guess suffice

1336
01:21:01.359 --> 01:21:04.760
<v Speaker 6>it to say that that I think data science and

1337
01:21:04.840 --> 01:21:07.520
<v Speaker 6>statistics and stuff in JavaScript is a thing that will

1338
01:21:07.520 --> 01:21:10.159
<v Speaker 6>happen in the future. And although I'm primarily working on

1339
01:21:10.159 --> 01:21:12.399
<v Speaker 6>the module system and kind of getting the run time

1340
01:21:12.479 --> 01:21:15.880
<v Speaker 6>up and running right now, I have dreams of kind

1341
01:21:15.880 --> 01:21:20.560
<v Speaker 6>of stealing statistics away from Python and scientific computing and

1342
01:21:21.239 --> 01:21:23.560
<v Speaker 6>making this work in JavaScript really nicely.

1343
01:21:24.279 --> 01:21:27.119
<v Speaker 1>I love the idea, to be honest, I've been thinking

1344
01:21:27.159 --> 01:21:30.239
<v Speaker 1>for a while that I I would love to see

1345
01:21:30.279 --> 01:21:35.199
<v Speaker 1>something like that in a language that I find more approachable, right,

1346
01:21:35.319 --> 01:21:38.840
<v Speaker 1>So you know, for me that's Ruby and JavaScript, but

1347
01:21:39.479 --> 01:21:43.520
<v Speaker 1>you know, yeah, just having those capabilities in these hands,

1348
01:21:44.039 --> 01:21:46.920
<v Speaker 1>and I think especially JavaScript.

1349
01:21:46.279 --> 01:21:49.159
<v Speaker 2>With the reach that it has, I mean, that would

1350
01:21:49.159 --> 01:21:53.399
<v Speaker 2>be amazing. So I'm all on board with that, AJ,

1351
01:21:53.560 --> 01:21:54.760
<v Speaker 2>did you get all your picks out?

1352
01:21:55.600 --> 01:21:55.840
<v Speaker 3>You know?

1353
01:21:56.159 --> 01:21:59.359
<v Speaker 4>One more, I think I'm gonna have to switch my

1354
01:22:00.159 --> 01:22:04.520
<v Speaker 4>my browser screen shotting service from running with Bun to

1355
01:22:04.640 --> 01:22:09.159
<v Speaker 4>running with Dino. So I'm just testing it right now.

1356
01:22:09.279 --> 01:22:12.199
<v Speaker 4>It worked. I was able to just like change two

1357
01:22:12.199 --> 01:22:15.039
<v Speaker 4>lines of code what process dot exit was one of them,

1358
01:22:15.159 --> 01:22:19.560
<v Speaker 4>But now it's not closing. I'll figure that out. But yeah,

1359
01:22:19.600 --> 01:22:23.279
<v Speaker 4>so so I guess I guess I'm a Dino fanboy again. Ryan.

1360
01:22:23.439 --> 01:22:26.960
<v Speaker 4>I I've had some things to say in the past, so.

1361
01:22:28.479 --> 01:22:31.840
<v Speaker 2>What you I am shocked?

1362
01:22:32.600 --> 01:22:35.560
<v Speaker 4>No between like as this cycle has gone from you know,

1363
01:22:35.720 --> 01:22:38.119
<v Speaker 4>Node and Dino and Bun. I was like on the

1364
01:22:38.199 --> 01:22:40.920
<v Speaker 4>Dino train for a while, but I was really frustrated

1365
01:22:40.920 --> 01:22:43.119
<v Speaker 4>with some stuff and then I was on the Bun train.

1366
01:22:43.319 --> 01:22:46.279
<v Speaker 4>So I'm uh, I'm JavaScript fluid.

1367
01:22:48.560 --> 01:22:51.680
<v Speaker 6>All right, All good, we're trying, we're trying to figure

1368
01:22:51.680 --> 01:22:54.520
<v Speaker 6>it out. Hopefully you have a nice experience with with

1369
01:22:54.640 --> 01:22:55.479
<v Speaker 6>you know, in the future.

1370
01:22:56.479 --> 01:23:00.479
<v Speaker 4>Well, it's it's going to improve my my performance on

1371
01:23:00.840 --> 01:23:03.840
<v Speaker 4>opening up a binary to run Chrome to do a screenshot.

1372
01:23:03.960 --> 01:23:09.960
<v Speaker 1>So all right, I'm gonna jump in and derail us

1373
01:23:10.039 --> 01:23:11.359
<v Speaker 1>back to Steve.

1374
01:23:11.560 --> 01:23:12.640
<v Speaker 2>Steve, what are your picks?

1375
01:23:13.800 --> 01:23:15.920
<v Speaker 5>Okay, Ryan, I'm not sure if you were, But the

1376
01:23:16.000 --> 01:23:19.079
<v Speaker 5>high point of all our podcasts is my dad jokes,

1377
01:23:19.359 --> 01:23:26.680
<v Speaker 5>so hence my name Dad Joker. So wait, okay, supposedly

1378
01:23:27.399 --> 01:23:30.399
<v Speaker 5>thirty of the world's population lets their pets sleep in

1379
01:23:30.439 --> 01:23:33.359
<v Speaker 5>bed with them. I'm really upset though, because I tried

1380
01:23:33.359 --> 01:23:39.399
<v Speaker 5>it yesterday and now my goldfish is dead. The other

1381
01:23:39.479 --> 01:23:42.640
<v Speaker 5>day I learned that Albert Einstein was a real person,

1382
01:23:43.600 --> 01:23:46.319
<v Speaker 5>But this whole time I thought he was a theoretical physicist.

1383
01:23:53.119 --> 01:23:55.279
<v Speaker 4>And they like, it's so good.

1384
01:23:55.119 --> 01:23:55.840
<v Speaker 2>They don't get better.

1385
01:23:55.880 --> 01:23:59.119
<v Speaker 4>That's the best when you've had an agents, I thought.

1386
01:23:58.960 --> 01:24:02.319
<v Speaker 5>A pretty high bar. And then last night I saw

1387
01:24:02.359 --> 01:24:07.000
<v Speaker 5>this breaking news story that during the day, actually sorry,

1388
01:24:07.079 --> 01:24:10.000
<v Speaker 5>during the day, count Chocolate to Stay Puff, marshamallow Man,

1389
01:24:10.039 --> 01:24:12.359
<v Speaker 5>and the Teddy Grahams Bear all perished in a fire

1390
01:24:12.600 --> 01:24:15.359
<v Speaker 5>and they said, s'more at eleven, what.

1391
01:24:16.279 --> 01:24:19.640
<v Speaker 3>Your joke about Einstein? Reminded me of a dad joke

1392
01:24:19.760 --> 01:24:23.199
<v Speaker 3>about this young physics student who is at the party

1393
01:24:23.239 --> 01:24:25.880
<v Speaker 3>and he's dancing with some girl trying to pick her up,

1394
01:24:25.920 --> 01:24:31.840
<v Speaker 3>and he says, you know, Einstein and Newton's dead. Einstein's dead,

1395
01:24:32.319 --> 01:24:37.960
<v Speaker 3>and I'm not feeling so well this evening. I guess

1396
01:24:38.000 --> 01:24:38.720
<v Speaker 3>that didn't end.

1397
01:24:39.800 --> 01:24:42.600
<v Speaker 5>I'll give you a rimshot anyway for the effort.

1398
01:24:45.560 --> 01:24:47.840
<v Speaker 2>That's all I have done, all right.

1399
01:24:50.279 --> 01:24:53.199
<v Speaker 1>I guess it's my turn for picks, so I'll jump

1400
01:24:53.239 --> 01:24:56.239
<v Speaker 1>in with I always do a board game pick. I

1401
01:24:56.239 --> 01:24:58.359
<v Speaker 1>don't know if I did this last week or earlier

1402
01:24:58.399 --> 01:25:00.760
<v Speaker 1>this week, so I'm just gonna and if you get

1403
01:25:00.800 --> 01:25:02.359
<v Speaker 1>it twice in a row, I am sorry.

1404
01:25:03.359 --> 01:25:05.960
<v Speaker 2>I'm gonna pick Challengers. It's a game.

1405
01:25:06.119 --> 01:25:08.039
<v Speaker 1>It's kind of a mix between Capture of the Flag

1406
01:25:08.119 --> 01:25:12.960
<v Speaker 1>and War. It's a relatively fast game. You play seven rounds.

1407
01:25:14.039 --> 01:25:16.359
<v Speaker 1>Whoever has the most points at the end of seven rounds,

1408
01:25:16.800 --> 01:25:19.760
<v Speaker 1>the two top people go head to head, and whoever

1409
01:25:19.800 --> 01:25:23.760
<v Speaker 1>wins that one wins. And effectively it's a deck building

1410
01:25:23.800 --> 01:25:28.239
<v Speaker 1>game or kind of, so you draft cards.

1411
01:25:28.680 --> 01:25:30.000
<v Speaker 2>You can put two cards.

1412
01:25:29.800 --> 01:25:33.359
<v Speaker 1>Into your hand or one higher level card on some

1413
01:25:33.439 --> 01:25:37.359
<v Speaker 1>rounds into your hand. You're building out your deck, and

1414
01:25:37.399 --> 01:25:39.600
<v Speaker 1>then you flip the cards over and they have different

1415
01:25:39.680 --> 01:25:47.640
<v Speaker 1>abilities and so anyway, sometimes they stack nicely, and essentially

1416
01:25:47.720 --> 01:25:50.640
<v Speaker 1>there's I can't remember what the zone is on the

1417
01:25:50.720 --> 01:25:55.640
<v Speaker 1>side of the playing field, but you can stack up

1418
01:25:55.640 --> 01:25:57.359
<v Speaker 1>to six types of cards on the site. If you

1419
01:25:57.439 --> 01:26:00.560
<v Speaker 1>run out of room there, your opponent wins. If you

1420
01:26:00.640 --> 01:26:03.840
<v Speaker 1>run out of cards, your opponent wins the round and

1421
01:26:03.840 --> 01:26:06.039
<v Speaker 1>then they get a trophy that has the points on it.

1422
01:26:07.399 --> 01:26:12.079
<v Speaker 1>So the gameplay is relatively simple. It's just knowing how

1423
01:26:12.119 --> 01:26:15.760
<v Speaker 1>to get the cards to synergize is the game you're

1424
01:26:15.840 --> 01:26:19.039
<v Speaker 1>really playing, and then knowing when to pull things in

1425
01:26:19.079 --> 01:26:21.079
<v Speaker 1>and out of your hands so that you don't bust

1426
01:26:21.239 --> 01:26:26.159
<v Speaker 1>on putting stuff onto your bench right and running out

1427
01:26:26.199 --> 01:26:28.600
<v Speaker 1>of room there. So it's it's a terrific game. I

1428
01:26:28.680 --> 01:26:33.039
<v Speaker 1>think board game geek rate waits at to something. I

1429
01:26:33.039 --> 01:26:36.920
<v Speaker 1>didn't look it up, but it's it's super fun. It

1430
01:26:36.920 --> 01:26:41.439
<v Speaker 1>plays up to eight people. That's the other thing that

1431
01:26:41.479 --> 01:26:44.920
<v Speaker 1>I like about it is that usually you get a

1432
01:26:44.920 --> 01:26:47.680
<v Speaker 1>board game and it'll play four, sometimes it'll play five

1433
01:26:47.760 --> 01:26:54.159
<v Speaker 1>or six. Challengers plays up to eight and everybody gets

1434
01:26:54.159 --> 01:26:56.279
<v Speaker 1>a card that just shows you where to sit next,

1435
01:26:56.319 --> 01:26:58.680
<v Speaker 1>so that you're playing. And yeah, the board game weight

1436
01:26:58.800 --> 01:26:59.800
<v Speaker 1>is one point seventy eight.

1437
01:27:00.119 --> 01:27:03.079
<v Speaker 2>It's pretty approachable. I think my eight year old could

1438
01:27:03.119 --> 01:27:03.439
<v Speaker 2>play it.

1439
01:27:04.079 --> 01:27:07.359
<v Speaker 1>I don't know that she'd really do well with the

1440
01:27:07.560 --> 01:27:11.039
<v Speaker 1>deck building piece right put all these together, you know,

1441
01:27:11.119 --> 01:27:14.680
<v Speaker 1>to have a mighty hand, but I think she could

1442
01:27:15.600 --> 01:27:18.600
<v Speaker 1>to a certain degree. No, oh, I really like these cards.

1443
01:27:18.760 --> 01:27:22.640
<v Speaker 1>Or pick the higher the higher number cards so that

1444
01:27:22.680 --> 01:27:26.600
<v Speaker 1>you can win the flag back. So anyway, I'm going

1445
01:27:26.680 --> 01:27:28.439
<v Speaker 1>to pick that came out in twenty twenty two.

1446
01:27:28.560 --> 01:27:29.279
<v Speaker 2>I played it.

1447
01:27:29.239 --> 01:27:35.399
<v Speaker 1>At the game Board Conference up in Layton and it

1448
01:27:35.520 --> 01:27:40.600
<v Speaker 1>was awesome. So anyway, yes, you can play it with

1449
01:27:40.600 --> 01:27:44.760
<v Speaker 1>two players. It is probably better with four, six or

1450
01:27:44.760 --> 01:27:47.960
<v Speaker 1>eight players. If you have an odd number of players,

1451
01:27:48.000 --> 01:27:54.520
<v Speaker 1>there's a robot deck that gets progressively harder as each

1452
01:27:54.600 --> 01:27:58.479
<v Speaker 1>round goes by, because it's got things like this card

1453
01:27:58.560 --> 01:28:02.479
<v Speaker 1>is worth whatever round you're on, or however many fans,

1454
01:28:02.520 --> 01:28:04.479
<v Speaker 1>which is the points you have, or things like that,

1455
01:28:04.680 --> 01:28:09.399
<v Speaker 1>so you know, it's kind of set up to kind

1456
01:28:09.439 --> 01:28:12.920
<v Speaker 1>of match your hand, but you play both hands when

1457
01:28:12.960 --> 01:28:17.359
<v Speaker 1>you're playing against the robot. So so you can play

1458
01:28:17.359 --> 01:28:19.279
<v Speaker 1>with odd number of players too, is what I'm saying.

1459
01:28:19.840 --> 01:28:22.439
<v Speaker 1>But yeah, it's it's typically better if you have at

1460
01:28:22.479 --> 01:28:25.439
<v Speaker 1>least four and that's just because then you get to

1461
01:28:25.439 --> 01:28:27.640
<v Speaker 1>switch up who you're playing against. But you can definitely

1462
01:28:27.640 --> 01:28:33.479
<v Speaker 1>play it two player. Yeah, it's it's pretty awesome. So

1463
01:28:33.520 --> 01:28:37.000
<v Speaker 1>I'll put the board game geek link in here, and

1464
01:28:37.039 --> 01:28:39.319
<v Speaker 1>then I'll go find an Amazon affiliate link here in

1465
01:28:39.319 --> 01:28:44.840
<v Speaker 1>a minute, and then other picks. There was an article

1466
01:28:44.880 --> 01:28:46.880
<v Speaker 1>that came or not an article but a blog post

1467
01:28:46.920 --> 01:28:52.439
<v Speaker 1>that DHH put out basically talking about free speech, and

1468
01:28:52.520 --> 01:28:54.880
<v Speaker 1>basically essentially what he was saying is that people have

1469
01:28:54.960 --> 01:28:57.840
<v Speaker 1>the right to say things, even if they're offensive, even

1470
01:28:57.880 --> 01:29:00.279
<v Speaker 1>if they're awful, even if they're full of crap. He

1471
01:29:00.279 --> 01:29:03.399
<v Speaker 1>didn't say full of crap, uh, he said some He

1472
01:29:03.760 --> 01:29:05.359
<v Speaker 1>used the word I'm not going to use on the podcast,

1473
01:29:05.399 --> 01:29:08.720
<v Speaker 1>but you know, but you have the right to say

1474
01:29:08.720 --> 01:29:11.199
<v Speaker 1>what you're going to say. And I like the idea

1475
01:29:11.319 --> 01:29:14.359
<v Speaker 1>of that, just from the standpoint of, hey, look at

1476
01:29:14.439 --> 01:29:18.520
<v Speaker 1>least I know who you are, right, and I think

1477
01:29:18.560 --> 01:29:20.680
<v Speaker 1>most people are smart enough to figure out, yeah, you

1478
01:29:20.720 --> 01:29:23.279
<v Speaker 1>know you're saying this and you really are full of crap.

1479
01:29:23.800 --> 01:29:27.439
<v Speaker 2>So but but he was responding mostly.

1480
01:29:27.159 --> 01:29:30.760
<v Speaker 1>To the stuff where they're sent sentencing people to like

1481
01:29:30.800 --> 01:29:34.279
<v Speaker 1>twenty months in jail for posting something to social media

1482
01:29:34.319 --> 01:29:38.479
<v Speaker 1>that's offensive in England and oh my goodness, yeah, just

1483
01:29:39.159 --> 01:29:39.720
<v Speaker 1>very true.

1484
01:29:39.880 --> 01:29:40.680
<v Speaker 5>I've seen the video.

1485
01:29:41.600 --> 01:29:44.479
<v Speaker 4>Yeah, yeah, the thing that and you see this in

1486
01:29:44.479 --> 01:29:47.319
<v Speaker 4>the United States too, and you know it's cherry picked examples,

1487
01:29:47.319 --> 01:29:51.880
<v Speaker 4>but they give an example of like a man essay

1488
01:29:52.000 --> 01:29:54.840
<v Speaker 4>to woman and got six months, but a person who

1489
01:29:54.960 --> 01:29:58.640
<v Speaker 4>posted something mean on Twitter got twenty months.

1490
01:30:00.680 --> 01:30:04.359
<v Speaker 3>It's it's a it's it's problematic because unless you know,

1491
01:30:04.399 --> 01:30:07.800
<v Speaker 3>it's very easy to get specific cases wrong if you

1492
01:30:07.800 --> 01:30:10.560
<v Speaker 3>don't know the details, like you know, on the one hand,

1493
01:30:10.680 --> 01:30:13.720
<v Speaker 3>it's obviously free speech, and we're all all in favor

1494
01:30:13.720 --> 01:30:18.159
<v Speaker 3>of free speech, but then turns out that incitement was made,

1495
01:30:18.239 --> 01:30:22.079
<v Speaker 3>so it's it's it's it's like if you say, you know,

1496
01:30:22.279 --> 01:30:26.359
<v Speaker 3>go out and kill all such and such people, right. Yeah.

1497
01:30:26.439 --> 01:30:30.119
<v Speaker 3>So I'm not saying that it's not that it's right

1498
01:30:30.239 --> 01:30:32.399
<v Speaker 3>or wrong. I'm saying that you need you should have

1499
01:30:32.479 --> 01:30:35.800
<v Speaker 3>the full context before making judgment. I tend to reserve

1500
01:30:35.840 --> 01:30:39.720
<v Speaker 3>my judgment until I have. You know, as much.

1501
01:30:39.600 --> 01:30:42.520
<v Speaker 4>As it was a mob boss with a coordinated attack,

1502
01:30:42.640 --> 01:30:45.039
<v Speaker 4>it doesn't matter if on Twitter you say go kill someone.

1503
01:30:45.600 --> 01:30:48.640
<v Speaker 4>I mean, if it was a leader of a terrorist organization,

1504
01:30:48.720 --> 01:30:49.279
<v Speaker 4>that's one thing.

1505
01:30:50.920 --> 01:30:52.640
<v Speaker 3>But in some countries it is.

1506
01:30:52.960 --> 01:30:55.720
<v Speaker 2>You know, I didn't mean to open this can of worms,

1507
01:30:55.720 --> 01:30:57.079
<v Speaker 2>but I will.

1508
01:30:57.399 --> 01:31:00.319
<v Speaker 3>Again, I'm not making you all judgment. I'm I'm just

1509
01:31:00.359 --> 01:31:05.159
<v Speaker 3>saying that in some countries have different laws regarding free

1510
01:31:05.159 --> 01:31:08.920
<v Speaker 3>speech than the US does. And you, yeah, cognizant that.

1511
01:31:09.560 --> 01:31:10.600
<v Speaker 2>Yeah, I recognize that.

1512
01:31:10.720 --> 01:31:12.720
<v Speaker 1>I think I think the issue that he's pointing out

1513
01:31:13.119 --> 01:31:15.920
<v Speaker 1>and he didn't go into like incitement and stuff, right,

1514
01:31:16.000 --> 01:31:17.720
<v Speaker 1>he was just saying, hey, look, you should be able

1515
01:31:17.760 --> 01:31:20.680
<v Speaker 1>to say wrong things, and and that I agree with.

1516
01:31:20.880 --> 01:31:22.439
<v Speaker 2>Right, Yeah, down to incitement.

1517
01:31:22.479 --> 01:31:24.920
<v Speaker 1>If you're encouraging people to go out and hurt other people,

1518
01:31:25.439 --> 01:31:28.840
<v Speaker 1>you know obviously that that's a real problem. But if

1519
01:31:28.880 --> 01:31:32.680
<v Speaker 1>you're expressing your opinion, you can express bad opinions.

1520
01:31:32.840 --> 01:31:33.279
<v Speaker 2>Anyway.

1521
01:31:35.399 --> 01:31:37.319
<v Speaker 1>I'm trying to think if there's anything else I wanted

1522
01:31:37.319 --> 01:31:40.000
<v Speaker 1>to pick. I have an AI summit that I'm putting

1523
01:31:40.000 --> 01:31:41.920
<v Speaker 1>together in October, so keep an eye out for that.

1524
01:31:42.760 --> 01:31:45.640
<v Speaker 2>Other than that, Ryan, what are your picks?

1525
01:31:48.399 --> 01:31:54.840
<v Speaker 6>I really like Grain dot com. This is some tool

1526
01:31:54.960 --> 01:32:00.520
<v Speaker 6>that helps you record meetings. And you know, Dino as

1527
01:32:00.560 --> 01:32:02.399
<v Speaker 6>a company, do you know, do you know has uh

1528
01:32:02.680 --> 01:32:06.319
<v Speaker 6>is remote and we have meetings with people and and

1529
01:32:06.560 --> 01:32:09.520
<v Speaker 6>uh Yeah, Grain just helps you record it and make

1530
01:32:09.600 --> 01:32:14.359
<v Speaker 6>some transcript of it. And I find it just super

1531
01:32:14.479 --> 01:32:17.800
<v Speaker 6>useful too. It's just got a great interface, so pretty

1532
01:32:17.880 --> 01:32:21.760
<v Speaker 6>pretty simple tool. But but and I'm sure there's probably

1533
01:32:21.840 --> 01:32:24.319
<v Speaker 6>other ones, but I've been finding a lot of utility

1534
01:32:24.319 --> 01:32:25.000
<v Speaker 6>from grain.

1535
01:32:27.279 --> 01:32:27.680
<v Speaker 2>Awesome.

1536
01:32:28.760 --> 01:32:30.920
<v Speaker 1>All Right, One last thing, and we should have asked

1537
01:32:30.920 --> 01:32:33.199
<v Speaker 1>this way earlier. But if people want to see more

1538
01:32:33.239 --> 01:32:36.479
<v Speaker 1>information about Dno. Two, or if they want to reach

1539
01:32:36.520 --> 01:32:38.279
<v Speaker 1>out to you and say, hey, I like this or

1540
01:32:38.319 --> 01:32:40.079
<v Speaker 1>I don't like that, how do they find you?

1541
01:32:41.840 --> 01:32:47.199
<v Speaker 7>Yeah, I'm rough Ce rough Underscore Underscore see on on

1542
01:32:47.239 --> 01:32:52.239
<v Speaker 7>Twitter with Dino Underscore land On on Twitter, uh and Dino.

1543
01:32:52.079 --> 01:32:55.000
<v Speaker 6>Dot com on on the webs and yeah, there's a

1544
01:32:55.039 --> 01:32:57.359
<v Speaker 6>discord you can. You can find my email if you

1545
01:32:57.399 --> 01:33:03.800
<v Speaker 6>search hard enough. So, yeah, we're happening to Rye Rye

1546
01:33:03.840 --> 01:33:05.880
<v Speaker 6>the Twitter handle or what.

1547
01:33:06.880 --> 01:33:09.279
<v Speaker 4>Yeah, well I thought you were right? Were you not right?

1548
01:33:10.000 --> 01:33:14.960
<v Speaker 6>I was ry Yeah with an h in twenty ten.

1549
01:33:15.279 --> 01:33:19.079
<v Speaker 6>But yeah, I stopped using Twitter for a number of

1550
01:33:19.159 --> 01:33:21.359
<v Speaker 6>years and just just came back a couple of months ago.

1551
01:33:22.880 --> 01:33:27.479
<v Speaker 4>Well, I'm sorry for your mental health. I'll offer you

1552
01:33:27.520 --> 01:33:28.720
<v Speaker 4>some asprin if you need it.

1553
01:33:30.359 --> 01:33:34.439
<v Speaker 6>All right, It's it's it's fun being on Twitter these days. Yeah,

1554
01:33:34.479 --> 01:33:36.319
<v Speaker 6>back in the not days, it was very noisy.

1555
01:33:37.600 --> 01:33:42.520
<v Speaker 3>Oh bet that explains the That explains the shockingly low

1556
01:33:42.600 --> 01:33:48.239
<v Speaker 3>number of followers you have. Yeah, I was by the way, Chuck,

1557
01:33:48.319 --> 01:33:50.880
<v Speaker 3>did you give Ryan the chance to do picks?

1558
01:33:51.319 --> 01:33:52.520
<v Speaker 2>I did you pick?

1559
01:33:53.359 --> 01:33:53.439
<v Speaker 7>Co?

1560
01:33:54.039 --> 01:33:59.560
<v Speaker 3>Oh? I missed it. Sorry I wasn't I wasn't paying attention. Sorry.

1561
01:33:59.640 --> 01:34:03.279
<v Speaker 1>Yeah, all right, Well we're gonna go ahead and wrap

1562
01:34:03.279 --> 01:34:06.800
<v Speaker 1>it up. Thanks for coming, Ryan, And thanks to your team.

1563
01:34:06.880 --> 01:34:10.760
<v Speaker 1>They've done an excellent job kind of keeping us informed.

1564
01:34:10.479 --> 01:34:13.720
<v Speaker 3>So to do this. And thanks for making such a

1565
01:34:13.840 --> 01:34:17.359
<v Speaker 3>huge difference to the web. I consider the Web to

1566
01:34:17.399 --> 01:34:21.840
<v Speaker 3>be like maybe one of the greatest achievements of humanity

1567
01:34:21.880 --> 01:34:26.680
<v Speaker 3>of all time. And and and I think that you know,

1568
01:34:27.520 --> 01:34:30.960
<v Speaker 3>you and the Dino team, but even you personally have

1569
01:34:31.159 --> 01:34:34.000
<v Speaker 3>made a significant impact on that. So thank you for that.

1570
01:34:35.239 --> 01:34:37.079
<v Speaker 6>Yeah. Well, I don't know if I can take credit

1571
01:34:37.119 --> 01:34:41.319
<v Speaker 6>for the Web. I can take credit for note which Yes,

1572
01:34:41.359 --> 01:34:46.920
<v Speaker 6>thank you, and yeah, thanks for having me.

1573
01:34:46.880 --> 01:34:47.479
<v Speaker 3>On It's fun.

1574
01:34:47.960 --> 01:34:49.840
<v Speaker 5>Thank you for the reminder of the Flintstones every time

1575
01:34:49.880 --> 01:34:50.399
<v Speaker 5>I hear the name.

1576
01:34:50.840 --> 01:34:53.560
<v Speaker 2>All right, till next time, folks, max out
