1
00:00:01,120 --> 00:00:04,839
Speaker 1: How'd you like to listen to dot NetRocks with no ads? Easy?

2
00:00:05,360 --> 00:00:08,599
Become a patron. For just five dollars a month, you

3
00:00:08,640 --> 00:00:11,359
get access to a private RSS feed where all the

4
00:00:11,400 --> 00:00:14,599
shows have no ads. Twenty dollars a month will get

5
00:00:14,640 --> 00:00:18,440
you that and a special dot NetRocks patron mug. Sign

6
00:00:18,519 --> 00:00:22,160
up now at Patreon dot dot NetRocks dot com.

7
00:00:22,199 --> 00:00:24,719
Speaker 2: Hey, Carl and Richard here with your twenty twenty four

8
00:00:24,879 --> 00:00:26,039
NDC schedule.

9
00:00:26,320 --> 00:00:29,679
Speaker 1: We'll be at as many NDC conferences as possible this year,

10
00:00:30,000 --> 00:00:33,240
and you should consider attending no matter what. The Copenhagen

11
00:00:33,240 --> 00:00:37,640
Developers Festival happens August twenty sixth through the thirtieth. Tickets

12
00:00:37,719 --> 00:00:40,719
at Cphdevfest dot com.

13
00:00:40,880 --> 00:00:44,759
Speaker 2: Ndcporto is happening October fourteenth through the eighteenth, Tickets at

14
00:00:44,840 --> 00:00:46,600
Ndcporto dot com.

15
00:00:46,640 --> 00:00:59,079
Speaker 3: We'll see you there, we hope.

16
00:01:01,359 --> 00:01:05,519
Speaker 1: Hey, welcome back to dot net Rocks episode nineteen eighteen.

17
00:01:05,640 --> 00:01:07,239
Where are we in history today? Richard?

18
00:01:07,359 --> 00:01:08,400
Speaker 2: And of World War One?

19
00:01:08,680 --> 00:01:12,599
Speaker 1: End of World War One? Wasn't that fun?

20
00:01:12,799 --> 00:01:16,879
Speaker 2: By beginning of the H one N one pandemic flu Yes,

21
00:01:16,959 --> 00:01:18,959
that will kill people for the next four years and

22
00:01:19,000 --> 00:01:20,120
it's still around today.

23
00:01:20,439 --> 00:01:20,719
Speaker 3: Yay.

24
00:01:22,400 --> 00:01:25,560
Speaker 1: I'm Carl Franklin. That's, of course Richard Campbell, and we're

25
00:01:25,560 --> 00:01:29,519
here for episode nineteen eighteen with the guy who built node,

26
00:01:29,640 --> 00:01:31,879
Ryan Dobb. We'll talk to him in a minute, but first,

27
00:01:32,400 --> 00:01:34,680
it's better no framework. Awesome world of music.

28
00:01:34,719 --> 00:01:43,120
Speaker 2: Oh man, what do you got?

29
00:01:43,159 --> 00:01:43,239
Speaker 4: So?

30
00:01:43,280 --> 00:01:46,760
Speaker 1: I looked for trending repos on GitHub and I found

31
00:01:46,760 --> 00:01:49,480
this amazing app. I haven't used it yet, but it

32
00:01:49,519 --> 00:01:52,560
looks amazing. It's still in alpha. It's called Follow.

33
00:01:52,799 --> 00:01:53,239
Speaker 2: Oh yeah.

34
00:01:53,239 --> 00:01:57,400
Speaker 1: And remember RSS readers, right, those were all the rage when.

35
00:01:57,319 --> 00:01:58,519
Speaker 2: Blogs the good old days.

36
00:01:58,599 --> 00:02:02,719
Speaker 1: Yeah, think of This is an RSS reader on steroids.

37
00:02:03,599 --> 00:02:07,159
So it's called Follow. It's all about allowing you to

38
00:02:07,159 --> 00:02:10,759
follow your favorite websites, blogs, social media accounts, podcasts, and

39
00:02:10,840 --> 00:02:15,159
notifications in one place. And so it also has AI

40
00:02:15,360 --> 00:02:20,319
to assist in operations, provides AI reports to highlight key

41
00:02:20,360 --> 00:02:25,039
information for your subscriptions. Personal AI knowledge base built from

42
00:02:25,080 --> 00:02:29,159
your subscription uses blockchain as an incentive mechanism for active

43
00:02:29,240 --> 00:02:32,639
users and outstanding creators. But more about that. You know,

44
00:02:33,360 --> 00:02:36,599
check out some of these pictures right, so you can

45
00:02:36,680 --> 00:02:40,319
follow your favorite sites like they have a picture of you,

46
00:02:40,439 --> 00:02:49,240
following the verge of Twitter and Mastodon and all the socials.

47
00:02:49,599 --> 00:02:57,080
What is it, NASA astronomy pictures, so videos from.

48
00:02:57,039 --> 00:03:01,479
Speaker 2: YouTube, anything you might subscribe to.

49
00:03:01,680 --> 00:03:03,120
Speaker 1: Anything you might subscribe to.

50
00:03:03,400 --> 00:03:05,039
Speaker 2: Yeah, that's interesting.

51
00:03:04,840 --> 00:03:07,280
Speaker 1: And so it's it's kind of like that. It's kind

52
00:03:07,280 --> 00:03:10,120
of the old RSS browser on steroids.

53
00:03:10,319 --> 00:03:12,319
Speaker 2: Yeah. Wow, it's good to see you know. It's not

54
00:03:12,360 --> 00:03:14,000
like we stopped needing it. It's just that when they

55
00:03:14,000 --> 00:03:16,240
shut down Google Reader, we're all heartbroken and we haven't

56
00:03:16,240 --> 00:03:16,800
gotten over it.

57
00:03:16,960 --> 00:03:20,560
Speaker 1: Right, So this is a and I love this. Remember

58
00:03:20,599 --> 00:03:21,800
trillion You used.

59
00:03:21,599 --> 00:03:23,680
Speaker 2: Trillion right, yes, I used trillion back.

60
00:03:23,960 --> 00:03:24,120
Speaker 4: Yeah.

61
00:03:24,159 --> 00:03:26,919
Speaker 1: So trillion was like an instant messenger that went everywhere

62
00:03:27,319 --> 00:03:28,719
and it was one.

63
00:03:28,719 --> 00:03:30,439
Speaker 2: Just try to consol it all the clients, right, I

64
00:03:30,439 --> 00:03:33,439
mean these days I have WhatsApp open and Signal open

65
00:03:33,439 --> 00:03:36,919
and Messenger open and exactly Telegram and like save.

66
00:03:36,759 --> 00:03:40,680
Speaker 1: Me yeah exactly. And there's no there's no real way

67
00:03:40,719 --> 00:03:43,759
to do that now because everybody wants to use their

68
00:03:43,800 --> 00:03:47,360
app so they can get your information and not their competitors.

69
00:03:48,000 --> 00:03:51,400
So this is for Windows, mac Os, Linux and the browser.

70
00:03:52,919 --> 00:03:56,479
There's going to be Android and iOS versions coming soon.

71
00:03:56,680 --> 00:03:56,960
Speaker 2: Cool.

72
00:03:57,159 --> 00:04:01,360
Speaker 1: So that's it. Nineteen eighteen dot popt me, that's pwop

73
00:04:01,520 --> 00:04:04,080
dot e and that'll bring you right to there, or

74
00:04:04,159 --> 00:04:08,159
you could just look for GitHub dot com, slash rss next,

75
00:04:08,280 --> 00:04:12,120
slash follow. That's what I got. Richard, who's talking to.

76
00:04:12,159 --> 00:04:14,479
Speaker 2: Us, love it. So you know, it was digging around

77
00:04:14,479 --> 00:04:16,720
a bit because we'd done talked about node and other

78
00:04:17,079 --> 00:04:19,920
tech a few times, and I ran across a show

79
00:04:19,959 --> 00:04:23,079
for a while back. This is from show twelve eighteen,

80
00:04:23,240 --> 00:04:26,519
so seven hundred shows ago. Wow. That would be November

81
00:04:26,560 --> 00:04:28,560
of twenty fifteen when we talked to Paul Mooney about

82
00:04:28,600 --> 00:04:32,000
micro service design, which is hilarious considering where we are

83
00:04:32,120 --> 00:04:35,519
right now with the conversations this past year about modular

84
00:04:35,639 --> 00:04:38,720
monoliths and that whole mindset, and so it was really

85
00:04:38,759 --> 00:04:41,600
a pleasure to sort of dig back into that. Go right, yeah,

86
00:04:41,839 --> 00:04:44,839
look at all these things we used to believe. And

87
00:04:45,319 --> 00:04:48,319
one of the comments in there is from Ryan lippback again,

88
00:04:48,439 --> 00:04:49,720
this is from a few years ago. He said, I

89
00:04:49,759 --> 00:04:51,519
love the show. It's a topic very near and dear

90
00:04:51,519 --> 00:04:53,360
to my heart. Is I'm me Deep Doo, a two

91
00:04:53,360 --> 00:04:56,519
plus year project that's completely changing the landscape of application

92
00:04:56,560 --> 00:04:59,079
development at my company. I think one of the really

93
00:04:59,120 --> 00:05:00,920
important concepts of Hall hit On was the idea of

94
00:05:00,920 --> 00:05:04,600
starting with something small and low risk. We have been

95
00:05:04,680 --> 00:05:07,160
taking a suite of applications that are all monolithic in

96
00:05:07,240 --> 00:05:10,079
nature and doing variations of the same thing, and are

97
00:05:10,120 --> 00:05:13,040
starting to find the commonalities between them, extracting that into

98
00:05:13,040 --> 00:05:15,360
their own services, and then to make that available. The

99
00:05:15,399 --> 00:05:17,519
idea of being that in time we have replicated up

100
00:05:17,519 --> 00:05:20,600
of this functionality to start sun setting some or all

101
00:05:20,680 --> 00:05:23,360
of the legacy platform. Oh Man, Ryan, I hope you

102
00:05:23,399 --> 00:05:26,399
tell us how this went eight years later, because that

103
00:05:26,399 --> 00:05:30,480
that is the true keyotesque, like jousting at the windmill.

104
00:05:31,680 --> 00:05:36,639
I found the debate about Jason schema interesting. It is

105
00:05:36,639 --> 00:05:40,199
something we've recently started using. The application development and environment

106
00:05:40,279 --> 00:05:43,279
is heavily dot net based until recently, we are adapting

107
00:05:43,319 --> 00:05:48,759
to no JS and possibly go eight years ago. Until recently,

108
00:05:48,800 --> 00:05:52,439
we've shared our message contracts as new get packages, which

109
00:05:52,480 --> 00:05:54,319
makes total sense if you're in the dot net world.

110
00:05:54,680 --> 00:05:57,079
This is problematic as soon as you started venturing into

111
00:05:57,160 --> 00:05:59,839
other languages. Jason scheme is a way to provide us

112
00:06:00,600 --> 00:06:03,839
to offer language agnostigs message contracts that we shared across

113
00:06:03,839 --> 00:06:07,199
the applications written in different languages. Because there's lots of

114
00:06:07,279 --> 00:06:09,959
other complaints around Jason schema, like you can drive yourself

115
00:06:09,959 --> 00:06:12,720
crazy with this stuff, but platform agnostic, that's not something

116
00:06:12,759 --> 00:06:15,480
you're gonna argue with. And make no mistake, I am

117
00:06:15,519 --> 00:06:18,160
still in regular therapy for the lasting trauma I experience

118
00:06:18,240 --> 00:06:21,560
using with soap and wizdles. But I think Jason's schema

119
00:06:21,680 --> 00:06:23,720
can be used to divine a contract then, and it

120
00:06:23,720 --> 00:06:27,079
does provide value. Thanks and keep up all the great stuff.

121
00:06:27,439 --> 00:06:31,319
And that's from runnew ws Star. Oh good, yes, yeah,

122
00:06:31,399 --> 00:06:36,199
but I just appreciate how relevant this entire conversation is

123
00:06:36,240 --> 00:06:39,199
eight years later, the way we're building software right now,

124
00:06:39,199 --> 00:06:41,720
and all of the same battles, and it just reminded

125
00:06:41,720 --> 00:06:44,439
me like it's not that everything new is old is

126
00:06:44,480 --> 00:06:46,600
old or everything old is new again, but it's like

127
00:06:47,040 --> 00:06:49,319
we're still just trying to make software and trying to

128
00:06:49,319 --> 00:06:51,439
get stuff done, and we've been doing that the whole time.

129
00:06:51,759 --> 00:06:54,120
And I went read jason schema again because I haven't

130
00:06:54,160 --> 00:06:57,000
touched in ages, and I'm going to include the show link.

131
00:06:57,519 --> 00:07:01,079
Just this was thoughtful and useful, and it's interesting to

132
00:07:01,079 --> 00:07:03,839
think about the newer ways graft QL and so forth

133
00:07:03,839 --> 00:07:07,120
that we've gone to from there. Yeah, this lots to

134
00:07:07,120 --> 00:07:09,519
be said here, So Ryan, thank you so much for

135
00:07:09,560 --> 00:07:11,240
your comment, and a copy of music Cobi is on

136
00:07:11,279 --> 00:07:12,519
its way to you. And if you'd like a copy

137
00:07:12,519 --> 00:07:14,600
of music Koby, write a comment on the website at

138
00:07:14,600 --> 00:07:17,240
dot NetRocks dot com or on the facebooks. We publish

139
00:07:17,279 --> 00:07:18,680
every show there and if you comment there and I

140
00:07:18,759 --> 00:07:20,959
read on the show, we'll send you copy music go by.

141
00:07:21,120 --> 00:07:24,600
Speaker 1: I just noticed somebody bought the Flak collection of music

142
00:07:24,639 --> 00:07:27,920
to code by twenty one I Go twenty one twenty

143
00:07:27,959 --> 00:07:30,800
five minute tracks design to help you stay in focus

144
00:07:30,839 --> 00:07:32,639
while you're writing code or do anything.

145
00:07:32,480 --> 00:07:35,720
Speaker 2: And and Flak being the lossless format. Yep, it's like

146
00:07:35,800 --> 00:07:38,120
wave because you didn't want to go Aggvorbis. What's up

147
00:07:38,160 --> 00:07:38,480
with you?

148
00:07:38,839 --> 00:07:44,360
Speaker 1: Well, yeah, Flak is Wave quality but half the size,

149
00:07:44,399 --> 00:07:46,519
so it's perfect for downloading. All right.

150
00:07:46,680 --> 00:07:49,160
Speaker 2: I'm perfectly happy with my MP three's honestly.

151
00:07:49,480 --> 00:07:49,680
Speaker 3: Yeah.

152
00:07:49,720 --> 00:07:52,920
Speaker 1: You know that's the joke, right, is that all these

153
00:07:53,040 --> 00:07:56,920
audio files are all about their great microphones and all

154
00:07:56,959 --> 00:08:00,519
their processes for recording and editing and stuff. And in

155
00:08:00,560 --> 00:08:04,639
the end, you're making music for people who are going

156
00:08:04,720 --> 00:08:07,879
to listen on earbuds. No offense, Ryan, but you know

157
00:08:07,920 --> 00:08:10,600
you're going to listen to MP three's on earbuds. Yeah,

158
00:08:10,639 --> 00:08:12,079
and they really don't care.

159
00:08:12,480 --> 00:08:15,439
Speaker 2: You know, it doesn't matter most of the time, it

160
00:08:15,439 --> 00:08:19,079
doesn't matter. Come on, right, I got a good sound

161
00:08:19,079 --> 00:08:20,439
SYSTM to the car, but not that good.

162
00:08:20,519 --> 00:08:22,920
Speaker 1: There still are a few audio files who have their

163
00:08:22,920 --> 00:08:25,759
speakers set up and you know, their their CD quality

164
00:08:25,759 --> 00:08:29,000
stuff and whatever's all right, enough of that, Okay, let's

165
00:08:29,040 --> 00:08:32,519
bring on Ryan Doll. So Ryan Doll is the creator

166
00:08:32,559 --> 00:08:36,600
of no JS and it's modern successor Dino. That's d

167
00:08:37,080 --> 00:08:42,080
O Is it Dino or Deno Dino? Well, first of all,

168
00:08:42,159 --> 00:08:44,559
on behalf of all developers everywhere, I'd like to thank

169
00:08:44,679 --> 00:08:48,919
you for inventing no JS, because you really changed the environment.

170
00:08:49,080 --> 00:08:53,080
You changed the whole scene of back end development from

171
00:08:53,360 --> 00:08:56,240
well especially in our case, right, we were using Internet

172
00:08:56,279 --> 00:08:59,559
Information Server for most of this stuff. And as Richard

173
00:08:59,600 --> 00:09:01,559
likes to say, it's a Swiss army knife with all

174
00:09:01,559 --> 00:09:04,879
the tools out and you have to play whack a

175
00:09:04,919 --> 00:09:06,960
mole to patch it up with the stuff that you

176
00:09:07,039 --> 00:09:10,240
don't want. Whereas no JS comes along and says, hey,

177
00:09:10,759 --> 00:09:14,120
this is just does one thing. It does it really well.

178
00:09:14,000 --> 00:09:16,840
Speaker 2: Well, be clear, it starts out doing nothing. You have

179
00:09:16,879 --> 00:09:19,600
to tell it to be allowed to do anything. Yeah,

180
00:09:19,639 --> 00:09:21,799
but that's good. You take out one blade at the time,

181
00:09:21,840 --> 00:09:22,960
only the ones you need.

182
00:09:22,960 --> 00:09:26,080
Speaker 1: And the influence that no js had throughout the industry

183
00:09:26,320 --> 00:09:29,240
was undeniable. So thank you from all of us to you.

184
00:09:29,519 --> 00:09:35,000
Speaker 4: Yeah. Thanks, I'm continually surprised that notice as big as

185
00:09:35,000 --> 00:09:41,360
it is. It's Yeah, I'm very happy to have kind

186
00:09:41,360 --> 00:09:47,039
of stumbled upon the right idea that that servers can

187
00:09:47,039 --> 00:09:51,559
be programmed very similarly to client site JavaScript. You know,

188
00:09:51,679 --> 00:09:57,080
you get a non blocking servers are structured in callbacks

189
00:09:58,080 --> 00:10:01,120
as our kind of websites. You know, a button has

190
00:10:01,159 --> 00:10:04,919
a click handler, a website has an on request web

191
00:10:04,960 --> 00:10:08,440
server has an on request handler. And you know, putting

192
00:10:08,480 --> 00:10:11,559
those those two ideas together turned out to work really well.

193
00:10:12,440 --> 00:10:15,679
And I think in combination with the fact that JavaScript

194
00:10:15,720 --> 00:10:19,159
is far and away the most popular language in the

195
00:10:19,159 --> 00:10:23,559
world in some ways the default programming language. Yeah, kind

196
00:10:23,559 --> 00:10:25,919
of us.

197
00:10:25,279 --> 00:10:28,320
Speaker 2: Has what was a line Handsoman used, I mean maybe

198
00:10:28,360 --> 00:10:30,240
he was quoting someone else. It's like, it's the assembly

199
00:10:30,320 --> 00:10:31,200
language of the Internet.

200
00:10:31,480 --> 00:10:32,720
Speaker 1: Yeah that was cancer man.

201
00:10:34,080 --> 00:10:38,120
Speaker 4: Yeah, it's it's the it's the English for programming languages,

202
00:10:38,200 --> 00:10:39,960
right right, It's what everybody speaks.

203
00:10:40,080 --> 00:10:42,759
Speaker 2: Although you did seem to hit the perfect moment like

204
00:10:42,759 --> 00:10:46,200
two thousand and two thousand and nine, where the idea

205
00:10:46,240 --> 00:10:49,600
that JavaScript was a standalone language was still a bit novel.

206
00:10:49,720 --> 00:10:52,440
It was a scripting language or browsers, and suddenly it's like, wait,

207
00:10:52,960 --> 00:10:54,919
run on a server, what's that about?

208
00:10:55,279 --> 00:10:55,480
Speaker 4: Yeah?

209
00:10:55,600 --> 00:10:57,720
Speaker 2: But it was also at the time when you know

210
00:10:57,799 --> 00:11:02,440
the V eight engine, the Gecko uh, and what the

211
00:11:02,440 --> 00:11:04,840
heck was the Microsoft one? But they were all started

212
00:11:04,919 --> 00:11:07,039
dueling each other for features and the run up to

213
00:11:07,159 --> 00:11:11,679
HTML five, like the acceller, the evolution of JavaScript detonated

214
00:11:11,759 --> 00:11:12,320
right about that.

215
00:11:12,679 --> 00:11:15,600
Speaker 4: Yeah, Yeah, I mean I think I was very much

216
00:11:15,679 --> 00:11:17,840
lucky to be playing with the right stuff at the

217
00:11:17,879 --> 00:11:22,080
right time, right. I think if it wasn't me, somebody

218
00:11:22,240 --> 00:11:24,000
somebody else would have would have kind of put put

219
00:11:24,039 --> 00:11:24,799
two and two together.

220
00:11:25,120 --> 00:11:27,360
Speaker 1: So we noticed that after three years you kind of

221
00:11:27,360 --> 00:11:29,960
walked away from Node and started your own things. So

222
00:11:30,000 --> 00:11:31,200
what tell us the story of that?

223
00:11:31,639 --> 00:11:36,000
Speaker 4: So Node, uh was you know after after a couple

224
00:11:36,000 --> 00:11:38,879
of years, was was you know, very clearly on a

225
00:11:38,919 --> 00:11:44,799
good trajectory. It was, uh, you know, very early for

226
00:11:45,039 --> 00:11:48,399
I think the large audience of people, but you know,

227
00:11:48,480 --> 00:11:51,399
for for kind of the inner circle of development, like

228
00:11:51,480 --> 00:11:53,840
it was very clear that we were that we had

229
00:11:53,919 --> 00:11:59,039
like you know, hit hit on the right model. I

230
00:11:59,120 --> 00:12:02,919
had made a business arrangement with my employer joined to

231
00:12:04,200 --> 00:12:08,039
sell Node to them whatever that means for a for

232
00:12:08,080 --> 00:12:14,360
ant licensed project, but transfer them the trademark, you know,

233
00:12:14,440 --> 00:12:17,159
let them run the website, you know, basically allow them

234
00:12:17,200 --> 00:12:19,759
to be kind of the official the official sponsor of

235
00:12:20,159 --> 00:12:25,120
the project. And yeah, given those those two things, I mean,

236
00:12:25,159 --> 00:12:28,159
the project was was kind of well structured, there was

237
00:12:28,200 --> 00:12:31,200
a bunch of contributors, things were moving along. I had

238
00:12:31,240 --> 00:12:35,799
been paid. You know, I'm not the sort of I

239
00:12:35,919 --> 00:12:39,399
like starting things. I like working on new stuff, and kind.

240
00:12:39,200 --> 00:12:41,240
Speaker 1: Of I kind of figured that about you.

241
00:12:41,399 --> 00:12:45,960
Speaker 4: Maintaining stuff indefinitely is not necessarily the most exciting thing.

242
00:12:46,120 --> 00:12:50,399
So yeah, I handed over the rains to Isaac Schluter

243
00:12:51,200 --> 00:12:56,240
and stepped back from the project. And these days Node

244
00:12:56,360 --> 00:13:02,039
is managed by a nonprofit foundation and there's many contributors

245
00:13:02,080 --> 00:13:06,039
and you know, different companies kind of pay money to

246
00:13:06,039 --> 00:13:11,000
to have engineers working on it. So you know, despite

247
00:13:11,120 --> 00:13:14,240
despite kind of making this business arrangement back in back

248
00:13:14,279 --> 00:13:19,360
in the early twenty tens, uh, you know, noe is

249
00:13:18,919 --> 00:13:22,720
is still a kind of public domain software, and well,

250
00:13:22,879 --> 00:13:24,679
used and liked around the world.

251
00:13:24,879 --> 00:13:28,120
Speaker 1: And is still a critical piece of business infrastructure. I

252
00:13:28,120 --> 00:13:29,240
mean it is critical.

253
00:13:29,639 --> 00:13:33,639
Speaker 4: I think every website uses node. That's that's not really

254
00:13:33,679 --> 00:13:37,320
a stretch riverside the thing we're on right now Google

255
00:13:37,360 --> 00:13:41,120
dot Com. Literally every website maybe note is not serving

256
00:13:41,200 --> 00:13:45,799
Google notice certainly not serving Google dot Com. But somewhere

257
00:13:45,840 --> 00:13:49,360
in the process of creating that CSS or that HTML,

258
00:13:49,480 --> 00:13:54,679
the build process of doing stuff, it's inevitable that. I mean,

259
00:13:54,679 --> 00:13:58,519
it's it's the canonical run time for JavaScript outside of

260
00:13:58,559 --> 00:14:01,480
the browser, and so is involved in all sorts of

261
00:14:01,519 --> 00:14:02,519
front ends tooling.

262
00:14:02,679 --> 00:14:05,159
Speaker 2: It's always good to go poke at the GitHub repository

263
00:14:05,240 --> 00:14:07,159
for a project, say how healthy is this? And I

264
00:14:07,200 --> 00:14:09,360
look down as like, oh, they pushed to build an

265
00:14:09,360 --> 00:14:11,000
hour ago. Yeah. No, I think it's busy.

266
00:14:11,200 --> 00:14:15,519
Speaker 4: I think it's going on all websites. It's not a stretch.

267
00:14:15,840 --> 00:14:19,600
Speaker 2: Yeah, and all the time. And I mean, I don't

268
00:14:19,639 --> 00:14:21,720
know how you feel about JavaScript these days? Is it

269
00:14:21,759 --> 00:14:24,720
Do you feel like it's stabler? The rate of changing

270
00:14:24,720 --> 00:14:26,559
it to me doesn't seem as extreme as it used

271
00:14:26,559 --> 00:14:26,879
to be.

272
00:14:27,000 --> 00:14:32,240
Speaker 4: Like the language spec itself. You mean it's moving. I mean,

273
00:14:32,240 --> 00:14:34,519
that is what is so exciting about the Web and

274
00:14:34,639 --> 00:14:39,000
JavaScript is that there's just so much attention and energy

275
00:14:39,080 --> 00:14:42,120
being poured into it. You know, the spec is pretty

276
00:14:42,159 --> 00:14:45,960
stable these days, you know, since since ekmascript modules were

277
00:14:46,639 --> 00:14:49,960
introduced in twenty fifteen. You know, there's not like super

278
00:14:50,039 --> 00:14:53,799
huge radical changes, but things are changing all the time.

279
00:14:53,840 --> 00:14:56,120
You know, the temporal API and new new kind of

280
00:14:56,240 --> 00:15:02,000
dates manipulation API for example, is becoming state now. It

281
00:15:02,559 --> 00:15:06,480
still continues to evolve because there is such a you know,

282
00:15:06,519 --> 00:15:10,120
it's so deeply embedded in human infrastructure that there's just

283
00:15:10,840 --> 00:15:15,320
many thousands and thousands of people like trying to improve

284
00:15:15,399 --> 00:15:18,960
this this kind of pretty crappy language, like to be honest,

285
00:15:19,000 --> 00:15:23,320
like I don't necessarily love JavaScript, It's just where we

286
00:15:23,399 --> 00:15:26,200
all are. And I think that's why that's why I

287
00:15:26,279 --> 00:15:27,879
find it interesting to work in.

288
00:15:27,799 --> 00:15:32,639
Speaker 1: That accidental success kind of like Herman's Hermits.

289
00:15:33,159 --> 00:15:37,799
Speaker 2: Darn it, Brendan, you should have thought further ahead. Is

290
00:15:37,840 --> 00:15:39,799
that thirty years ago? Now? Good lord?

291
00:15:40,159 --> 00:15:42,200
Speaker 1: Yeah? And wasn't it written in a weekend in a

292
00:15:42,240 --> 00:15:43,639
hotel room or something.

293
00:15:43,440 --> 00:15:47,440
Speaker 2: Like that when it was oak? So you hand over

294
00:15:47,440 --> 00:15:50,519
the range of twenty twelve. We know Dino appears in

295
00:15:50,559 --> 00:15:54,559
twenty eighteen, So what were those six years, like were

296
00:15:54,559 --> 00:15:56,200
you wandering the desert?

297
00:16:00,039 --> 00:16:02,600
Speaker 4: I went to work for Google for a time. I

298
00:16:02,639 --> 00:16:06,559
was unemployed for a time, just working on random projects,

299
00:16:06,600 --> 00:16:10,600
you know, trying to trying to create create a new

300
00:16:10,639 --> 00:16:14,200
app as I still still kind of want to. Uh.

301
00:16:14,960 --> 00:16:19,039
I have a Pinterest, Pinterest clone that are you know,

302
00:16:19,159 --> 00:16:22,080
better version of Pinterest, the social social app that I've

303
00:16:22,120 --> 00:16:22,720
been working on.

304
00:16:23,120 --> 00:16:24,240
Speaker 1: Can you follow for that.

305
00:16:27,799 --> 00:16:31,519
Speaker 4: It's just to that someday. But yeah, just just just

306
00:16:31,600 --> 00:16:33,120
kind of working on stuff, which is kind of my

307
00:16:33,200 --> 00:16:37,320
preferred mode of operation. Do. Dino was one of one

308
00:16:37,320 --> 00:16:39,559
of those mini projects that I've been working on but

309
00:16:40,440 --> 00:16:44,039
kind of achieved a lot of attention and I'm I'm

310
00:16:44,080 --> 00:16:48,360
still working on it now, trying trying to uh see

311
00:16:48,360 --> 00:16:48,720
it through.

312
00:16:50,320 --> 00:16:52,840
Speaker 2: I remember the JAS comp where you did the ten

313
00:16:52,879 --> 00:16:56,080
things I regret about no JS, like heck of a

314
00:16:56,120 --> 00:16:58,039
way to introduce some new ideas.

315
00:16:58,679 --> 00:17:03,559
Speaker 4: Yeah, and those I think some of those principles are

316
00:17:03,679 --> 00:17:08,119
are not around in Dino anymore. We're just releasing Dino

317
00:17:08,200 --> 00:17:12,279
two here this month. And uh, you know, for example,

318
00:17:12,640 --> 00:17:16,799
complaining very much about package Jason and NPM modules and

319
00:17:16,880 --> 00:17:21,000
the original demos of Dino were very simple without any

320
00:17:21,000 --> 00:17:26,440
support for NPM. We walked that back and had to

321
00:17:26,880 --> 00:17:30,240
be pretty pragmatic about stuff because you just realize that

322
00:17:30,279 --> 00:17:33,920
at some point that gravity people, Yeah, people need to

323
00:17:33,920 --> 00:17:36,799
pull in whatever like the a WUS SDK or g

324
00:17:36,920 --> 00:17:39,319
r PC, and there's just no way that you're going

325
00:17:39,359 --> 00:17:43,319
to rewrite like the a WUS s DK and uh yeah,

326
00:17:43,559 --> 00:17:47,799
having having kind of backwards compative, I think the just

327
00:17:47,799 --> 00:17:52,160
some gravity to to the to the NPM ecosystem. But nevertheless,

328
00:17:52,480 --> 00:17:57,160
Dino remains uh dedicated to leveling up JavaScript and I

329
00:17:57,720 --> 00:18:00,559
for one believe that this language is not going to

330
00:18:00,599 --> 00:18:03,640
go away next year or two years from now, or

331
00:18:03,960 --> 00:18:06,519
you know, maybe maybe not ever, and so I think

332
00:18:06,599 --> 00:18:10,839
there's really a case to be made for building solid

333
00:18:11,079 --> 00:18:13,559
foundations for for this language.

334
00:18:13,880 --> 00:18:17,039
Speaker 1: One thing I notice is that it supports web assembly.

335
00:18:18,359 --> 00:18:20,960
Speaker 4: Yeah, absolutely, I mean, you know, do you know, like

336
00:18:21,200 --> 00:18:26,480
Node is built on v eight from Chrome, and you know,

337
00:18:26,519 --> 00:18:28,720
you can kind of think of Dino and Node as

338
00:18:28,759 --> 00:18:32,720
like different Linux distributions, Like you know, they both both

339
00:18:32,880 --> 00:18:35,400
both use the same kernel, but they have kind of

340
00:18:35,440 --> 00:18:39,599
a different code around it. So yeah, A v A

341
00:18:40,119 --> 00:18:43,799
has fantastic you know, va is is the best javascripts

342
00:18:43,880 --> 00:18:46,400
VM in the world, and of course has all the

343
00:18:46,440 --> 00:18:48,319
cool features like LASM.

344
00:18:48,839 --> 00:18:51,079
Speaker 2: Can you talk to us about the role of typescript

345
00:18:51,160 --> 00:18:53,359
in do you know just you know is thinking about

346
00:18:53,440 --> 00:18:57,839
something more adjacent to the Microsoft community. It's great to

347
00:18:57,839 --> 00:18:58,359
see it there.

348
00:18:58,480 --> 00:19:02,160
Speaker 4: Yeah, I think types so a lot of people think

349
00:19:02,200 --> 00:19:04,920
of typescript as like a separate language from JavaScript. I

350
00:19:04,960 --> 00:19:07,440
think of it as like the evolution of JavaScript. This

351
00:19:07,519 --> 00:19:11,519
is where JavaScript is going, right, It's it's very it

352
00:19:11,599 --> 00:19:15,279
is JavaScript with types, and it's become clear over the

353
00:19:15,359 --> 00:19:19,440
last i don't know eight years or so that like

354
00:19:19,559 --> 00:19:28,240
typescript is the canonical syntax for adding types to JavaScript.

355
00:19:28,880 --> 00:19:32,400
We have supported typescript in Dino from the outset.

356
00:19:32,599 --> 00:19:32,799
Speaker 1: Yeah.

357
00:19:32,839 --> 00:19:34,799
Speaker 4: I guess it should also be said that, you know,

358
00:19:34,799 --> 00:19:37,839
if you look at the you know, amount of code

359
00:19:37,880 --> 00:19:40,839
on get out for example, JavaScript of course is number one,

360
00:19:41,200 --> 00:19:44,359
Python is number two, typescript is number three, so you know,

361
00:19:44,680 --> 00:19:47,359
in some ways, like JavaScript has both the number one

362
00:19:47,519 --> 00:19:54,119
and number three spots. So I think that future versions

363
00:19:54,160 --> 00:19:58,240
of the javascripts back will actually have some version of type,

364
00:19:58,319 --> 00:20:00,920
like I feel like it will be standard ees inspect

365
00:20:00,960 --> 00:20:05,279
out at some point in there's there's proposals in the

366
00:20:05,319 --> 00:20:08,839
works to have types as comments added to the spec

367
00:20:08,920 --> 00:20:12,759
so that browsers can actually understand Typescript directly and just

368
00:20:12,839 --> 00:20:15,519
kind of strip out the types. Don't do it, you know,

369
00:20:15,559 --> 00:20:17,559
they wouldn't do any type checking, but they would they

370
00:20:17,599 --> 00:20:20,519
could strip it out and get the JavaScript out pretty quickly.

371
00:20:20,920 --> 00:20:22,880
Speaker 1: We should be clear right now for those who don't

372
00:20:22,880 --> 00:20:26,839
know that Typescript isn't a language that runs. It's a

373
00:20:26,960 --> 00:20:29,559
language that creates JavaScript that runs.

374
00:20:29,960 --> 00:20:30,400
Speaker 4: That's right.

375
00:20:30,480 --> 00:20:35,279
Speaker 1: So it isn't a replacement for JavaScript. It's a JavaScript generator.

376
00:20:36,039 --> 00:20:38,640
So I think what you're talking about now is adding

377
00:20:38,799 --> 00:20:44,480
Typescript features to JavaScript acmascript, right that.

378
00:20:45,160 --> 00:20:46,839
Speaker 3: Sort of do what typescript does.

379
00:20:46,960 --> 00:20:48,400
Speaker 1: Is that what you're getting at, Yeah.

380
00:20:48,200 --> 00:20:50,480
Speaker 4: There's kind of you can think of it as there's

381
00:20:50,480 --> 00:20:54,319
two modes for Typescript. There is. So there's one compiler

382
00:20:54,359 --> 00:20:57,160
pass that's super easy where you just strip out all

383
00:20:57,200 --> 00:21:00,240
the types and what's left is JavaScript, right, and you

384
00:21:00,240 --> 00:21:02,200
can do that. You can implement this sort of thing

385
00:21:02,319 --> 00:21:06,480
like trivially. Then there's the type checking where it says, oh,

386
00:21:06,599 --> 00:21:09,880
this function, you know needs a string argument. Let's go

387
00:21:10,000 --> 00:21:12,359
make sure that the variable that you're passing to it

388
00:21:12,400 --> 00:21:15,079
is actually a string and give you an error if

389
00:21:15,440 --> 00:21:20,599
it's not. The type checking algorithm is wildly complicated and

390
00:21:20,680 --> 00:21:24,160
like not something that you could re implement. Dino actually

391
00:21:24,200 --> 00:21:26,839
does does both of these things. What I'm talking about

392
00:21:26,839 --> 00:21:30,240
adding to the JavaScript spec would be type stripping. That's

393
00:21:30,279 --> 00:21:34,440
the trivial operation. Perhaps in the future Chrome you could

394
00:21:34,480 --> 00:21:39,359
like use typescript directly in your HTML, and Chrome could

395
00:21:39,440 --> 00:21:42,279
understand that by like stripping out the types and executing

396
00:21:42,279 --> 00:21:46,680
the JavaScript. But reimplyment, Yeah, the type checking is is

397
00:21:46,720 --> 00:21:49,839
something that you would do in CI, not not like

398
00:21:50,039 --> 00:21:50,680
at run time.

399
00:21:50,880 --> 00:21:52,839
Speaker 2: Yeah, there's no reason to do it at the browser level.

400
00:21:52,839 --> 00:21:57,319
It should be done at the push basically. Yeah. Yeah, now,

401
00:21:57,359 --> 00:22:00,200
and it's any're right. The folks that write that kind

402
00:22:00,279 --> 00:22:03,160
of code to do type validation like that, they're different

403
00:22:03,200 --> 00:22:04,440
kind of humans, Like.

404
00:22:04,400 --> 00:22:06,279
Speaker 1: That's that's an, that's anders Land.

405
00:22:06,480 --> 00:22:09,480
Speaker 2: Yeah, it's anders Land and Luke Hoban and those guys

406
00:22:09,559 --> 00:22:13,119
like just crazy smart. But also it's almost like they're

407
00:22:13,160 --> 00:22:16,880
sacrificed a part of their brain to think in compiler passes,

408
00:22:17,240 --> 00:22:19,920
Like that's not a small thing to have to think

409
00:22:20,000 --> 00:22:20,359
that way.

410
00:22:20,519 --> 00:22:22,960
Speaker 4: Yeah, yeah, and I mean the people who write V

411
00:22:23,039 --> 00:22:25,599
eight for for that matter. I mean also also, yeah,

412
00:22:25,640 --> 00:22:28,759
compiler people, it's a different breeder programmer yep.

413
00:22:28,920 --> 00:22:32,039
Speaker 2: Right, And strangely enough, it's like it's the thing they

414
00:22:32,079 --> 00:22:34,480
want to do too, Like you can't plug them into

415
00:22:34,480 --> 00:22:36,480
other projects either, they will go find another compiler to

416
00:22:36,519 --> 00:22:39,440
work on, like that's what they look it's a specialization.

417
00:22:39,680 --> 00:22:40,559
Speaker 4: Yeah.

418
00:22:40,640 --> 00:22:43,160
Speaker 2: Well, and you seem to have a pattern too, Ryan,

419
00:22:43,279 --> 00:22:45,799
because you keep building tools for us to make more

420
00:22:45,839 --> 00:22:47,000
reliable websites.

421
00:22:47,200 --> 00:22:50,480
Speaker 4: Yeah, I would not. I am definitely not a compiler person,

422
00:22:50,559 --> 00:22:52,960
even though you know I interact with the v A

423
00:22:53,119 --> 00:22:55,960
VM quite heavily or with the Typescript compiler. I use

424
00:22:56,039 --> 00:22:59,440
those as tools. I would consider myself a server person,

425
00:22:59,599 --> 00:23:02,799
like right, I know how to write servers and kind

426
00:23:02,839 --> 00:23:06,000
of use those programming languages to do this, like I

427
00:23:06,000 --> 00:23:08,799
IO juggling, how do you how do you juggle a

428
00:23:08,880 --> 00:23:12,759
thousand web socket connections in the most optimal way? And

429
00:23:13,160 --> 00:23:16,119
you know, my my mantra or you know, goal I

430
00:23:16,119 --> 00:23:21,839
guess is to allow people to do that more easily

431
00:23:21,920 --> 00:23:25,279
because in the past, you know, pre node, it was

432
00:23:26,039 --> 00:23:28,960
it was a specialized skill to be able to to say,

433
00:23:29,039 --> 00:23:32,720
have a have a multiplayer web server that had a

434
00:23:32,720 --> 00:23:36,599
bunch of ongoing connections where everybody, you know, write a

435
00:23:36,640 --> 00:23:39,000
chat server, I r C server or something like that,

436
00:23:39,079 --> 00:23:43,559
and being able to open that up is kind of fun.

437
00:23:43,920 --> 00:23:46,319
Speaker 1: So when you started, note at least were you using

438
00:23:46,359 --> 00:23:49,880
web sockets or was this all just HDDP sockets.

439
00:23:49,960 --> 00:23:52,359
Speaker 4: Yeah, websitits did not exist.

440
00:23:52,519 --> 00:23:53,839
Speaker 1: Yeah, web sockets didn't exist.

441
00:23:53,960 --> 00:23:55,160
Speaker 2: Yeah, but long.

442
00:23:55,039 --> 00:23:58,079
Speaker 4: Long pulling existed, so you could you could you know,

443
00:23:58,240 --> 00:24:01,200
have an open h GP require that kind of streamed

444
00:24:01,240 --> 00:24:05,599
out responses. Yeah right, yeah, transferring coding streams. You can

445
00:24:05,720 --> 00:24:08,440
just send send more and more chunks, chunks down to

446
00:24:08,519 --> 00:24:11,680
the down to the browser mm hm, and up in

447
00:24:11,720 --> 00:24:13,599
the other direction as well. You can just make a

448
00:24:13,720 --> 00:24:15,839
make a request and keep appending to the body.

449
00:24:16,359 --> 00:24:19,799
Speaker 1: I did not claiming anything close to what you did,

450
00:24:19,839 --> 00:24:23,559
but I spent a lot of time back then before

451
00:24:23,759 --> 00:24:29,000
node really working on socket based servers that juggled multiple

452
00:24:29,000 --> 00:24:33,279
clients and the problems with that, especially scaling and especially

453
00:24:33,359 --> 00:24:38,640
dealing with net garbage collection. Sometimes the sockets would get

454
00:24:39,160 --> 00:24:42,240
moved around and so you had to pin them in memory.

455
00:24:42,359 --> 00:24:46,680
Like just a whole bunch of plumbing that nobody even

456
00:24:46,720 --> 00:24:49,680
thinks about anymore. You know, that's hard stuff.

457
00:24:49,880 --> 00:24:53,960
Speaker 4: Yeah, I think to a large extent like this is

458
00:24:54,000 --> 00:24:57,799
alleviated but I think, you know, doing this at larger

459
00:24:57,880 --> 00:25:01,359
scales is still kind of open questions that people are

460
00:25:01,400 --> 00:25:03,400
working on. So if you know, if you have a

461
00:25:03,440 --> 00:25:07,680
single server, you know, single instance server, you know, maybe

462
00:25:07,720 --> 00:25:10,599
you can handle a thousand connections at once or so,

463
00:25:11,200 --> 00:25:14,599
but what what do you do when you have a

464
00:25:14,680 --> 00:25:18,319
million connections? Right that? Like, how do you structure that?

465
00:25:18,440 --> 00:25:20,519
How do you do this like in a serverless way?

466
00:25:20,599 --> 00:25:25,240
Because you know, frankly, I'm so bullish that serverless is

467
00:25:25,519 --> 00:25:27,680
kind of the future of cloud. You know, how do

468
00:25:27,839 --> 00:25:29,480
how do you do this at the edge? How do

469
00:25:29,559 --> 00:25:31,920
you like there's kind of you know, we've kind of

470
00:25:31,960 --> 00:25:35,160
moved on to to like larger scale problems, and those

471
00:25:35,799 --> 00:25:37,839
are not worked out yet.

472
00:25:38,720 --> 00:25:41,799
Speaker 1: Definitively, I'm interested to hear what you think about signal R.

473
00:25:43,000 --> 00:25:45,400
I'll tell you my opinions of it. I think it's

474
00:25:45,440 --> 00:25:48,319
really good for some things. But the thing that it's missing,

475
00:25:48,480 --> 00:25:51,440
and it becomes quite obvious when you use it, is

476
00:25:51,559 --> 00:25:56,079
any kind of any kind of cash, you know, And

477
00:25:56,160 --> 00:26:00,920
so if your client is not connected, while when the

478
00:26:00,960 --> 00:26:04,640
server sends you something, you miss it, it's gone, right,

479
00:26:04,720 --> 00:26:07,559
And I guess that's why messaging and all those things

480
00:26:08,200 --> 00:26:10,839
are they are the way they are is because hey,

481
00:26:10,880 --> 00:26:12,880
I might go down and I might come back and

482
00:26:12,920 --> 00:26:14,240
I want to get all my messages.

483
00:26:15,160 --> 00:26:17,400
Speaker 4: I have zero experience with dot net.

484
00:26:18,319 --> 00:26:22,680
Speaker 1: Okay, signal artisan just dot net. It's a JavaScript as well,

485
00:26:23,599 --> 00:26:27,680
so yeah, but it's an implementation of web sockets, right

486
00:26:28,519 --> 00:26:30,200
all right, Well, anyway we can move on from that.

487
00:26:30,279 --> 00:26:33,000
But it's just, uh, you know something that I was

488
00:26:33,079 --> 00:26:33,799
curious about.

489
00:26:34,599 --> 00:26:37,359
Speaker 2: Yeah, I mean, I'm always jumpy about direct connections between

490
00:26:37,359 --> 00:26:40,240
a client and a server for longer than that's absolutely necessary,

491
00:26:40,319 --> 00:26:43,519
like m but I, you know, cut my chops on

492
00:26:43,599 --> 00:26:47,119
scaling where get in get out, like maybe yeah, turn

493
00:26:47,160 --> 00:26:49,279
the resources quickly as possible. As soon as you're doing

494
00:26:49,279 --> 00:26:51,920
anyone to run relationships like that, you're going to run

495
00:26:51,920 --> 00:26:57,000
out of resources pretty fast. That being said that real

496
00:26:57,039 --> 00:27:01,079
time stuff's cool, like they they continue the animated dashboard,

497
00:27:01,079 --> 00:27:02,480
that kind of thing. It's just as long as you

498
00:27:02,519 --> 00:27:04,240
got the user count under control, you're fine.

499
00:27:04,480 --> 00:27:04,880
Speaker 3: Mm hmm.

500
00:27:05,319 --> 00:27:07,319
Speaker 2: It's you know, what's the problem space you're working And

501
00:27:07,359 --> 00:27:09,759
I think it's one of the challenges with with web

502
00:27:09,799 --> 00:27:11,920
in general is there's so many things you can do

503
00:27:11,960 --> 00:27:15,680
with it. Thinking about any one pattern, you're probably wrong.

504
00:27:16,039 --> 00:27:20,279
Speaker 4: I think that's that's a truism. Yeah, it's exciting as well.

505
00:27:20,319 --> 00:27:22,640
I mean you can can do kind of anything with it,

506
00:27:23,119 --> 00:27:25,000
so everybody can be very creative.

507
00:27:25,240 --> 00:27:28,359
Speaker 2: Yeah, just an experiment, like you go down different paths.

508
00:27:28,359 --> 00:27:31,480
The problem is to applying a pattern suitiment suited to

509
00:27:31,559 --> 00:27:34,359
a high scaling technique to a highly interative technique and

510
00:27:34,400 --> 00:27:36,839
now you're fighting with it or going highly interactive on

511
00:27:36,839 --> 00:27:38,400
something needs to scale and so on.

512
00:27:38,519 --> 00:27:41,400
Speaker 1: Sounds like we're opening up the airing of grievances for

513
00:27:41,519 --> 00:27:44,200
web technology here. Who wants to start?

514
00:27:47,839 --> 00:27:50,640
Speaker 2: Why don't we take the break first and we can

515
00:27:50,680 --> 00:27:52,559
do the second half as grievances.

516
00:27:52,720 --> 00:27:55,359
Speaker 1: That sounds good. All right, we'll be right back after

517
00:27:55,400 --> 00:27:58,720
these very important messages. Do you have a complex dot

518
00:27:58,799 --> 00:28:02,359
net monolith you'd like to factor to a micro services architecture?

519
00:28:02,920 --> 00:28:06,640
The micro Service Extractor for dot Net tool visualizes your

520
00:28:06,680 --> 00:28:11,039
app and helps progressively extract code into micro services. Learn

521
00:28:11,039 --> 00:28:17,920
more at aws dot Amazon dot com, slash modernize, and

522
00:28:18,000 --> 00:28:21,799
we're back. It's dot Netrocksom, Carl Franklin, It's Richard Campbell. Hey,

523
00:28:22,119 --> 00:28:25,599
and that's our friend Ryan Dahl and the inventor of

524
00:28:25,680 --> 00:28:28,640
no JS. And just a reminder If you don't want

525
00:28:28,640 --> 00:28:30,240
to hear these ads, you can sign up for a

526
00:28:30,240 --> 00:28:33,359
Patreon five bucks a month. I'll get you an ad

527
00:28:33,400 --> 00:28:36,640
free RSS feed that you could probably use with follow.

528
00:28:37,079 --> 00:28:41,319
I don't know. I'm just fascinated, totally. I'm totally fascinating.

529
00:28:41,359 --> 00:28:44,000
I downloaded it. After this show, I'm going to run it.

530
00:28:44,039 --> 00:28:46,519
I'm going to see what it is. Anyway, we're talking

531
00:28:46,519 --> 00:28:50,160
about the airing of grievances of web technologies, which is

532
00:28:50,200 --> 00:28:52,200
a topic I suggested we don't have to go down

533
00:28:52,240 --> 00:28:56,559
this rope, but I'll start that. One of the things

534
00:28:56,559 --> 00:29:00,319
I don't like about modern web applications is you know,

535
00:29:01,240 --> 00:29:04,440
your your site is half rendered, and then you see

536
00:29:04,440 --> 00:29:07,519
a button that's available, and you go to click on it,

537
00:29:07,599 --> 00:29:10,559
and just before you click, boom, it moves over and

538
00:29:10,680 --> 00:29:13,079
another button you clicked on that you didn't intend to

539
00:29:13,079 --> 00:29:15,799
click on, which is going to call the fire department

540
00:29:15,960 --> 00:29:21,519
or something. Right, And these aren't necessarily things that are

541
00:29:21,559 --> 00:29:23,680
bad that are built into the web that you must

542
00:29:23,720 --> 00:29:27,359
always have, but but it, you know, like my wife says,

543
00:29:27,640 --> 00:29:36,440
I blame the programmer. Stupid programmers. Somebody built this thing. Yeah,

544
00:29:37,640 --> 00:29:39,880
anybody got a comment or aggrievance.

545
00:29:40,720 --> 00:29:46,400
Speaker 4: I mean I think, you know, that style of bug

546
00:29:46,920 --> 00:29:52,920
is something that ideally the platform should provide. I mean,

547
00:29:53,119 --> 00:29:56,359
obviously you can kind of code around these things, but yeah,

548
00:29:56,839 --> 00:30:00,240
in general, like it would be good if the web

549
00:30:00,279 --> 00:30:04,000
platform did the right thing by default. And I'm not

550
00:30:04,079 --> 00:30:06,480
exactly sure who's to blame here. Is is it the

551
00:30:06,799 --> 00:30:10,880
you know iOS or is it Safari or is it

552
00:30:10,960 --> 00:30:15,720
the CSSPEC you know? Probably different in different situations, but

553
00:30:16,119 --> 00:30:19,759
in general, I think the philosophy of like should be

554
00:30:21,599 --> 00:30:24,599
not broken by default or the easiest thing should you know,

555
00:30:24,839 --> 00:30:26,799
the right thing should be the easiest thing to do,

556
00:30:26,920 --> 00:30:29,079
and like the wrong thing should be the hard thing

557
00:30:29,119 --> 00:30:31,880
to do, is right, And probably in the case of

558
00:30:32,160 --> 00:30:36,279
jumping buttons that is a little flipped around.

559
00:30:36,839 --> 00:30:39,559
Speaker 1: It's just an easy thing to fix. If you're a programmer.

560
00:30:39,799 --> 00:30:43,039
Is just to not enable any of your UI until

561
00:30:43,079 --> 00:30:46,880
it's fully formed, you know, And if the user has

562
00:30:46,920 --> 00:30:50,359
to wait for that, that's a good thing. I think, yeah,

563
00:30:50,480 --> 00:30:51,880
as long as they can see it, as long as

564
00:30:51,920 --> 00:30:53,759
they can see it, as long as sometimes when it's

565
00:30:53,759 --> 00:30:56,839
not fully formed, it looks formed and you just don't know, right,

566
00:30:56,920 --> 00:31:00,559
you're an interpret state spinny button you want to pull

567
00:31:00,599 --> 00:31:03,759
out of one to debate. This goes all the way

568
00:31:03,759 --> 00:31:07,279
back to the Node days too. It's promises and ASYNC

569
00:31:07,680 --> 00:31:11,160
coding in general for JavaScript. I mean, this scripting language

570
00:31:11,160 --> 00:31:14,119
that was supposed to be very linear and just part

571
00:31:14,160 --> 00:31:16,359
of helping and render a page, and it's grown into

572
00:31:16,400 --> 00:31:19,599
this crazy thing. But we need a sync programming like

573
00:31:19,640 --> 00:31:21,599
that to me was a battle. I don't know where

574
00:31:21,640 --> 00:31:23,720
you fall on this, Ryan, I think you talked about

575
00:31:23,759 --> 00:31:25,440
promises right at the beginning of Note.

576
00:31:26,400 --> 00:31:30,079
Speaker 4: Promises were in a very very early version of Node.

577
00:31:30,680 --> 00:31:34,480
I took them out because I was worried about the

578
00:31:34,880 --> 00:31:39,920
garbage collection pressure that creating many objects created, but clearly

579
00:31:39,960 --> 00:31:42,680
that was a mistake. It was long before there was

580
00:31:42,720 --> 00:31:44,599
like a spec for promises, so we are kind of

581
00:31:44,640 --> 00:31:49,000
inventing the API for it. But I mean it's a

582
00:31:49,039 --> 00:31:51,960
pretty straightforward API, and.

583
00:31:53,559 --> 00:31:54,160
Speaker 2: It is now.

584
00:31:54,319 --> 00:31:58,240
Speaker 4: It is back then too. I mean, you know, you

585
00:31:58,599 --> 00:32:00,759
have an object to you, you have call back attached

586
00:32:00,759 --> 00:32:06,200
to that object. So yeah, I mean, I'm glad that

587
00:32:06,240 --> 00:32:08,119
it's been specked out now and there's like a clear

588
00:32:08,160 --> 00:32:11,839
way of doing ACYNC programming. And of course you know

589
00:32:11,880 --> 00:32:15,960
in DNO now, like all the APIs are very much

590
00:32:16,000 --> 00:32:19,200
promise based, and that just makes everything much nicer with

591
00:32:19,240 --> 00:32:22,559
like a sinkle weight, a single weight back in no

592
00:32:22,720 --> 00:32:28,480
development times was in a crazy idea that nobody could

593
00:32:28,640 --> 00:32:32,960
actually imagine coming to pass. And yeah, those those compiler

594
00:32:33,000 --> 00:32:37,319
guys made it happen. It's like it's a fantastic kind

595
00:32:37,359 --> 00:32:41,599
of sugar on the syntax to on top of kind

596
00:32:41,599 --> 00:32:44,720
of promises to allow a single weight.

597
00:32:44,559 --> 00:32:47,480
Speaker 2: And that's you know you talk about typescript acincle weight

598
00:32:47,519 --> 00:32:51,319
that sanders as well, right, like they got that thing

599
00:32:51,359 --> 00:32:53,599
to work and see sharp and it really seemed to

600
00:32:53,640 --> 00:32:56,640
propagate after that. Was that twenty ten?

601
00:32:57,240 --> 00:33:01,920
Speaker 4: Yeah, yeah, I don't know the origin of where that

602
00:33:01,920 --> 00:33:02,200
came from.

603
00:33:02,240 --> 00:33:03,079
Speaker 1: Yeah, that's it, and.

604
00:33:04,480 --> 00:33:06,039
Speaker 2: You know you made it when the C plus plus

605
00:33:06,079 --> 00:33:08,160
guys want to implement it.

606
00:33:07,720 --> 00:33:11,079
Speaker 1: Like John Skeet from Google was smitten with a sink

607
00:33:11,119 --> 00:33:15,039
away so much that he reverse engineered and figured out

608
00:33:15,039 --> 00:33:17,279
how it worked. We did a d n R TV

609
00:33:17,400 --> 00:33:19,559
on that and it was just amazing.

610
00:33:19,839 --> 00:33:22,440
Speaker 2: Imagine want to do this. But you know the concept

611
00:33:22,480 --> 00:33:26,480
is simple, The implementation is the hard part. When do

612
00:33:26,559 --> 00:33:31,599
you abandon the socket the holder Like I've been awaiting

613
00:33:31,960 --> 00:33:34,799
but it's never getting here now what like there is

614
00:33:34,839 --> 00:33:36,960
a sense here like you said at the garbagelastion angle,

615
00:33:37,039 --> 00:33:39,599
it's the when is this a dead package? Like it's

616
00:33:39,640 --> 00:33:42,119
never going to arrive? And how do you cope with that?

617
00:33:42,400 --> 00:33:46,160
Speaker 4: I mean, my primary programming language is actually not a script.

618
00:33:46,160 --> 00:33:49,880
It's it's Rust, right, and rust implementation of a sinc

619
00:33:50,039 --> 00:33:53,559
awaight is just just fantastic, right. I mean the answer

620
00:33:53,640 --> 00:33:55,440
to that question, of course, is like you have some

621
00:33:55,480 --> 00:33:59,920
sort of timer object, wrap the promise in or the future,

622
00:34:00,079 --> 00:34:03,680
and rust with with some something that times out and

623
00:34:04,279 --> 00:34:08,559
uh has it has a deadline to it. All of

624
00:34:08,559 --> 00:34:11,559
that stuff can be structured very very nicely in Rust

625
00:34:11,639 --> 00:34:15,559
and compiles down to like, you know, just just the

626
00:34:16,039 --> 00:34:20,519
tightest assembly code possible. And it's it's just a fantastic

627
00:34:20,719 --> 00:34:21,880
language to work in.

628
00:34:22,519 --> 00:34:25,719
Speaker 2: MMM. I've heard it described as the modern C plus

629
00:34:25,719 --> 00:34:29,199
plus Like it's absolutely it's the low level language you

630
00:34:29,199 --> 00:34:32,079
want to as well. Recentovich is on board, like pieces

631
00:34:32,079 --> 00:34:34,800
of Windows are being rewritten in it, pieces of Azure

632
00:34:34,840 --> 00:34:38,119
being ready written in it. It's going into places where

633
00:34:38,119 --> 00:34:38,679
it matters.

634
00:34:38,840 --> 00:34:41,360
Speaker 4: I will never start a new C plus plus project,

635
00:34:41,480 --> 00:34:42,039
that's for sure.

636
00:34:42,159 --> 00:34:42,639
Speaker 2: You're done.

637
00:34:43,480 --> 00:34:46,400
Speaker 1: I wonder what Kate Gregory thinks of Rust. It's really

638
00:34:46,400 --> 00:34:49,639
cool to to hear our world's colliding. You know that

639
00:34:49,639 --> 00:34:52,960
that it's just one big ecosystem software development and we're

640
00:34:52,960 --> 00:34:56,320
all learning from each other. I like that, can't we

641
00:34:56,360 --> 00:34:57,599
all just get along next?

642
00:34:57,960 --> 00:35:00,719
Speaker 2: Because you didn't start up with Rust for Dino, right,

643
00:35:00,840 --> 00:35:02,320
did you? Wasn't it originally a Go.

644
00:35:02,360 --> 00:35:06,679
Speaker 4: Project, very very early, like the first? So I did

645
00:35:06,840 --> 00:35:09,280
this demo for this this ten things I hate about

646
00:35:09,360 --> 00:35:13,960
node talk, and I spent like thirty days, you know,

647
00:35:14,000 --> 00:35:17,159
putting the demo together. And Go. Actually I had been

648
00:35:17,199 --> 00:35:21,199
playing around with Go plus V eight for years before that,

649
00:35:21,320 --> 00:35:24,960
kind of looking for ways that you could restructure a

650
00:35:25,039 --> 00:35:29,039
JavaScript VM and kind of you know, just just through

651
00:35:29,599 --> 00:35:32,800
the tools that I had to handle together. But yeah,

652
00:35:33,400 --> 00:35:36,119
Go has a garbage collector, as says V eight, right,

653
00:35:36,440 --> 00:35:40,039
Go has a run time, and you know, in a

654
00:35:40,119 --> 00:35:43,559
complex system like a JavaScript runtime, like you need to

655
00:35:43,639 --> 00:35:47,400
control everything you can, like you really need you cannot

656
00:35:47,440 --> 00:35:51,679
have like GC randomly popping up in the background. V

657
00:35:51,800 --> 00:35:54,599
eight obviously has the GC and will randomly pop up

658
00:35:54,639 --> 00:35:56,519
in the background. But like, let's leave it to one,

659
00:35:56,639 --> 00:35:59,719
let's not have two. So you know, I think Rust

660
00:35:59,880 --> 00:36:02,400
was a you know, a bit of a leap in

661
00:36:03,079 --> 00:36:12,159
twenty nineteen or I think that's decision, but it's paid

662
00:36:12,159 --> 00:36:16,280
off greatly. Like it's just just fantastic to be able

663
00:36:16,320 --> 00:36:21,440
to build on Rust build on top of you know,

664
00:36:21,440 --> 00:36:25,440
we have a wrapper around V eight that exposes essentially

665
00:36:25,480 --> 00:36:28,159
the same C plus plus API that V eight uses

666
00:36:28,320 --> 00:36:33,119
in Rust, but memory safe and really structured. And then

667
00:36:33,199 --> 00:36:35,280
on top of that we kind of layer all of

668
00:36:35,039 --> 00:36:40,880
our Dino stuff. And what's great is, you know, actually

669
00:36:41,199 --> 00:36:46,079
C plus plus the syntax and is fine. I mean,

670
00:36:46,480 --> 00:36:50,519
you know pointers, Like I don't find that so problematic,

671
00:36:50,639 --> 00:36:54,760
like the fact that it's not memory safe. It's the

672
00:36:54,800 --> 00:36:57,159
build system that's really a problem, like the fact that

673
00:36:57,199 --> 00:37:00,639
you just can't pull in dependencies that you know, you've

674
00:37:00,639 --> 00:37:03,440
got to kind of wrangle seamake and make and like

675
00:37:03,800 --> 00:37:07,000
you know, autocomf and all sorts of stuff, and it

676
00:37:07,079 --> 00:37:09,559
just becomes a real headache to be able to pull

677
00:37:09,599 --> 00:37:13,840
in external code in Rust. In modern languages, like you know,

678
00:37:13,880 --> 00:37:16,760
there's there's a.

679
00:37:15,880 --> 00:37:17,920
Speaker 2: There's a package manager, and there's a pipeline and.

680
00:37:17,920 --> 00:37:20,039
Speaker 4: There's a package Yeah, exactly, you can just you can

681
00:37:20,159 --> 00:37:23,119
just add independencies and that allows us to just go

682
00:37:23,280 --> 00:37:24,039
so much faster.

683
00:37:24,199 --> 00:37:27,840
Speaker 1: And Carnigan and Richie made C to be the cross

684
00:37:27,880 --> 00:37:30,599
platform language, right, I mean that's back in the day.

685
00:37:30,639 --> 00:37:32,800
Back in the day, that was the promise, and C

686
00:37:32,920 --> 00:37:36,119
plus plus certainly, I mean it was cross platform for

687
00:37:36,159 --> 00:37:36,400
a while.

688
00:37:36,400 --> 00:37:38,400
Speaker 2: I was supposed to be this safe version.

689
00:37:38,760 --> 00:37:39,320
Speaker 1: Yeah right.

690
00:37:40,079 --> 00:37:43,239
Speaker 2: See, you know my mistake when you when I first

691
00:37:43,239 --> 00:37:45,239
saw this was go lying in V eight duh, they're

692
00:37:45,239 --> 00:37:47,079
both googleed. They should love each other. I just don't

693
00:37:47,119 --> 00:37:47,639
know they do.

694
00:37:48,039 --> 00:37:49,960
Speaker 4: Yeah, I think they have nothing to do with each other.

695
00:37:51,679 --> 00:37:55,119
Speaker 2: I think that's fair. That's very fair. And yeah, to

696
00:37:55,119 --> 00:37:58,079
talk about rust in twenty nineteen, that's challenging. Those are

697
00:37:58,119 --> 00:37:58,719
early days.

698
00:37:58,920 --> 00:38:00,719
Speaker 4: Yeah, maybe even twenty seventeen.

699
00:38:00,920 --> 00:38:04,079
Speaker 2: I don't know, man even no, yeah, no, no, no kidding.

700
00:38:04,800 --> 00:38:07,880
So in the end, we're still in a lot of ways.

701
00:38:07,880 --> 00:38:10,280
I feel like Dino's got the same sort of philosophy

702
00:38:10,280 --> 00:38:13,960
of just what you need to build a web resource

703
00:38:14,039 --> 00:38:18,000
or whatever whatever your project needs. Am I wrong there? Like,

704
00:38:18,320 --> 00:38:20,119
I don't think your philosophy's changed much.

705
00:38:20,440 --> 00:38:24,239
Speaker 4: So. Inde, Node, you need to know a lot about

706
00:38:24,239 --> 00:38:27,280
the ecosystem to really get ramped up right. Node is

707
00:38:27,320 --> 00:38:30,280
the run time, but you need to add on your

708
00:38:30,400 --> 00:38:33,599
Typescript compiler. You need to add on your linter. You

709
00:38:33,639 --> 00:38:35,679
need to add you need to know that prettier is

710
00:38:35,719 --> 00:38:37,960
the way that you code format. You need to know

711
00:38:38,000 --> 00:38:41,800
how to set up a project structure. In Dino, the

712
00:38:41,960 --> 00:38:44,599
entire tool chain is literally executable.

713
00:38:44,719 --> 00:38:44,880
Speaker 1: Right.

714
00:38:44,880 --> 00:38:47,920
Speaker 4: There's a Dno dot ex that you can install on

715
00:38:47,960 --> 00:38:51,039
your Windows computer that has everything in it. Right, It's

716
00:38:51,079 --> 00:38:55,559
a single file distribution. And this has the code formatting,

717
00:38:55,760 --> 00:38:59,800
you know, Dino format subcommand. It has very much inspired

718
00:38:59,800 --> 00:39:03,719
by Go of course, you know, has a Dino lint subcommand.

719
00:39:04,039 --> 00:39:08,199
It has obviously the runtime execution. It has type checking

720
00:39:08,440 --> 00:39:12,559
Dino check to type check typescript. All of this is

721
00:39:12,639 --> 00:39:17,199
kind of packaged together and thought about cohesively, so that

722
00:39:17,599 --> 00:39:22,239
you know, maybe for the advanced node programmer, maybe not

723
00:39:22,639 --> 00:39:25,880
a huge difference because they kind of know how to

724
00:39:25,920 --> 00:39:26,960
operate in this world.

725
00:39:27,119 --> 00:39:30,239
Speaker 2: They assembled the same set of tools themselves.

726
00:39:30,400 --> 00:39:30,599
Speaker 4: Yeah.

727
00:39:30,639 --> 00:39:33,280
Speaker 2: I mean, I would also see in advanced node developer going, hey,

728
00:39:33,679 --> 00:39:36,000
you're making choices I want to make myself.

729
00:39:36,840 --> 00:39:39,920
Speaker 4: Sure. Yeah, But for you know, the c sharp developer,

730
00:39:39,960 --> 00:39:42,880
who's who's coming to JavaScript or just you know, doesn't

731
00:39:43,199 --> 00:39:45,880
you know, like many people hates JavaScript, but it's forced

732
00:39:45,880 --> 00:39:48,559
to work in it for whatever reason, you know, somebody

733
00:39:48,599 --> 00:39:54,639
coming from Java or just just people less steeped in nodisms.

734
00:39:55,480 --> 00:39:57,719
It's pretty great to be able to be like here's

735
00:39:57,760 --> 00:40:02,000
your Dino dot exx file. You know, run run Dino

736
00:40:02,079 --> 00:40:05,840
help and get started right, and you probably already know

737
00:40:05,920 --> 00:40:08,719
JavaScript more or less. Uh, you know, we have the

738
00:40:08,800 --> 00:40:12,519
Dino LSP that hooks into vs code, so like get

739
00:40:12,559 --> 00:40:16,719
all your intellisence and and tab completion stuff working out

740
00:40:16,760 --> 00:40:19,480
of the box. You'll get the code formatting kind of happening.

741
00:40:20,000 --> 00:40:23,360
And uh yeah, it's just a delightful experience, which for

742
00:40:23,440 --> 00:40:25,679
a scripting language. You know, like I said, I'm a

743
00:40:25,760 --> 00:40:30,480
RUSS programmer. Uh uh, you know, my my programming Rust

744
00:40:30,559 --> 00:40:33,320
is not as delightful as JavaScript. But you know the

745
00:40:33,360 --> 00:40:35,920
reason that you might work, you know, I like Rust

746
00:40:35,960 --> 00:40:37,880
of course because you can write fast code. You can

747
00:40:37,960 --> 00:40:41,280
control exactly what you are what the CPU is going

748
00:40:41,320 --> 00:40:44,519
to execute. But uh, you know, there's a time and

749
00:40:44,559 --> 00:40:47,559
place for scripting languages where you just want to move fast.

750
00:40:47,760 --> 00:40:51,679
And when you're moving fast, like let's remove all the bs,

751
00:40:51,719 --> 00:40:56,440
like let's let's focus on let's just get the scripting language.

752
00:40:56,800 --> 00:40:58,800
Like who wants to set up, you know, spend a

753
00:40:58,800 --> 00:41:02,199
bunch of time setting up a structure for a for

754
00:41:02,239 --> 00:41:04,519
a freaking scripting language. I'll do that for C plus

755
00:41:04,559 --> 00:41:07,480
plus because, like, you know, there's some benefit that I'm

756
00:41:07,480 --> 00:41:09,880
getting there. But you know, I'm working a scripting language,

757
00:41:09,880 --> 00:41:12,440
for god sakes, let's let's make it. Let's make it

758
00:41:12,719 --> 00:41:13,639
easy to use.

759
00:41:14,400 --> 00:41:16,559
Speaker 2: Yeah, it's not just a scripting language anymore. Ryan, I

760
00:41:16,599 --> 00:41:18,599
don't know if you'd noticed, but it's been up to stuff.

761
00:41:19,960 --> 00:41:23,679
I do like the tagline uncomplicate JavaScript, but I almost

762
00:41:23,679 --> 00:41:25,719
feel like it's more uncomplicate web dev.

763
00:41:25,920 --> 00:41:29,039
Speaker 4: Sure. I mean, yeah, JavaScript, that's a core of web dev.

764
00:41:29,840 --> 00:41:33,920
You know, uncomplicate Typeescript as well, I mean Typescript. Traditionally

765
00:41:33,960 --> 00:41:36,760
you have to have your tsconfig dot json like set

766
00:41:36,800 --> 00:41:39,760
a bunch of configurations. You know, people have complained that

767
00:41:39,840 --> 00:41:42,639
it's not one language, but like a suite of languages,

768
00:41:42,719 --> 00:41:46,159
depending on which different options you're enabling. We make all

769
00:41:46,199 --> 00:41:48,519
those choices for you. I mean, you can drop in

770
00:41:48,559 --> 00:41:51,199
your ts can fig, but like you know, is zero

771
00:41:51,320 --> 00:41:54,239
can fig like literally just open a file, pull in

772
00:41:54,280 --> 00:42:00,079
an MPM dependency, no package json, no no necessity to

773
00:42:01,639 --> 00:42:02,480
do anything else.

774
00:42:02,719 --> 00:42:06,320
Speaker 2: It seems far more opinionated than Node ever was. Oh

775
00:42:06,360 --> 00:42:08,920
for sure, yeah, like no kind of left you open

776
00:42:09,000 --> 00:42:11,159
for and in some ways left you wandering the desert,

777
00:42:11,239 --> 00:42:12,840
like do you know what bits the light up?

778
00:42:12,880 --> 00:42:13,199
Speaker 3: First?

779
00:42:13,360 --> 00:42:16,079
Speaker 2: Like it you work through sub tutorial to try and

780
00:42:16,119 --> 00:42:18,039
get anything to run a node at first, where this

781
00:42:18,079 --> 00:42:20,199
one's going. Now we do it this way, here you go.

782
00:42:20,360 --> 00:42:24,519
Speaker 4: I mean, I think I don't regret this, but I

783
00:42:24,519 --> 00:42:28,119
mean I think this is a result of me stepping

784
00:42:28,119 --> 00:42:30,880
away from the project. Right. Had I stayed in the project,

785
00:42:30,880 --> 00:42:34,320
I would have been very opinionated and like dictated things.

786
00:42:34,480 --> 00:42:39,159
Node is a democracy, and you know, is a kind

787
00:42:39,159 --> 00:42:42,119
of free democracy that's nice in many ways, but it

788
00:42:42,199 --> 00:42:44,760
also means, you know, it goes in all sorts of

789
00:42:44,800 --> 00:42:48,880
different different directions and there's not necessarily hard decisions being made.

790
00:42:49,039 --> 00:42:51,280
Do you know makes hard decisions and people you know

791
00:42:51,719 --> 00:42:56,199
violently disagree with us sometimes, but you know, it does

792
00:42:56,280 --> 00:42:59,800
kind of result in, you know, frankly zero configu you know,

793
00:43:00,039 --> 00:43:04,239
very little boilerplate, and I think that is absolutely delightful

794
00:43:04,360 --> 00:43:07,960
for people who you know, the majority who just do

795
00:43:07,960 --> 00:43:10,719
not give a crap a lot of those decisions.

796
00:43:11,440 --> 00:43:14,519
Speaker 1: You can change the default configuration if you want to, right,

797
00:43:14,599 --> 00:43:16,960
I mean, nobody's saying that this is the way everything

798
00:43:17,079 --> 00:43:21,320
must be done. It's just the default convention over configuration.

799
00:43:21,159 --> 00:43:24,000
Speaker 4: That's right. Yeah, So the principle with with Dino is

800
00:43:24,039 --> 00:43:26,440
like you can start with a single file. You can.

801
00:43:26,559 --> 00:43:29,119
You don't need to have a package Jason, or a

802
00:43:29,159 --> 00:43:32,320
product project structure. Like literally a single file is all

803
00:43:32,360 --> 00:43:35,280
you need to get started and go pretty far with that.

804
00:43:35,519 --> 00:43:38,519
But you can of course have a Dino dot json

805
00:43:38,679 --> 00:43:42,159
to set configurations. You can have a ts canfig you

806
00:43:42,199 --> 00:43:45,199
can set configurations in there. You can have a package Jason.

807
00:43:46,039 --> 00:43:48,360
You know, a big part of what we're doing with

808
00:43:48,480 --> 00:43:51,400
Dino two is kind of scaling Dino up to more

809
00:43:51,480 --> 00:43:54,920
complex project structures because yeah, frankly, there's a lot of

810
00:43:54,960 --> 00:43:57,800
people out there with very large JavaScript code bases, and

811
00:43:57,880 --> 00:43:59,639
for sure we want we want to make sure that

812
00:44:00,480 --> 00:44:04,119
Deno scales to support very complex setups as well.

813
00:44:04,239 --> 00:44:06,760
Speaker 2: Okay, talk to me about the differ between Dino and

814
00:44:06,880 --> 00:44:08,159
Dino Fresh.

815
00:44:08,280 --> 00:44:11,920
Speaker 4: So Fresh is a web framework built on top of

816
00:44:12,039 --> 00:44:15,360
dinum So dinos. The runtime Fresh is Fresh is a

817
00:44:15,400 --> 00:44:21,920
way of doing reacty sort of websites. So it has

818
00:44:22,000 --> 00:44:28,800
kind of server side rendering of jsx React style style JavaScript,

819
00:44:29,599 --> 00:44:34,239
and it has Yeah, it's designed to be very fast

820
00:44:34,320 --> 00:44:37,840
has It has a pretty simple structure with a technique

821
00:44:37,840 --> 00:44:41,000
called islands where you kind of segment your client side

822
00:44:41,000 --> 00:44:43,079
code with your server side code. It is a full

823
00:44:43,119 --> 00:44:47,159
stack web framework, meaning that you write client side and

824
00:44:47,239 --> 00:44:51,000
server side code, which you know, frankly is a great

825
00:44:51,000 --> 00:44:53,880
way to build websites as the benefit of JavaScript is

826
00:44:53,920 --> 00:44:56,559
that you can kind of share code between between the

827
00:44:56,960 --> 00:45:01,320
two sides, and by default, uh, you know you can

828
00:45:01,400 --> 00:45:06,000
you can kind of it's build static websites. So by default,

829
00:45:06,039 --> 00:45:08,199
like you can write a bunch of React code, actually

830
00:45:08,239 --> 00:45:11,480
it uses Preact, but you know, same thing. For for

831
00:45:11,519 --> 00:45:14,280
all intents and purposes, you can write a bunch of

832
00:45:14,440 --> 00:45:18,639
server side React code. It'll just render to a static

833
00:45:18,679 --> 00:45:22,840
site and there will actually be no client side JavaScript.

834
00:45:22,960 --> 00:45:25,480
And but you know, as as necessary, if you need

835
00:45:25,519 --> 00:45:28,679
to add on interactive bits, you can kind of pull

836
00:45:28,719 --> 00:45:33,320
those in pretty easily and generally follows kind of Dino's

837
00:45:34,199 --> 00:45:38,960
philosophy of zero can fig zero boiler plate. It feels

838
00:45:39,119 --> 00:45:41,480
really simple and nice to use, and.

839
00:45:41,559 --> 00:45:43,920
Speaker 2: Is it obvious what should be client? What should be server?

840
00:45:44,280 --> 00:45:46,239
Do you get in any debates of where any stuff

841
00:45:46,280 --> 00:45:48,480
that needs to live? I guess you can switch if

842
00:45:48,519 --> 00:45:48,880
you want to.

843
00:45:49,079 --> 00:45:51,679
Speaker 4: I mean, if if you have a button that changes

844
00:45:51,719 --> 00:45:53,920
color when you click on it or whatever, then then

845
00:45:54,079 --> 00:45:55,679
you know client side.

846
00:45:57,880 --> 00:46:01,519
Speaker 2: Yeah, so it's always question mark when's the codes living

847
00:46:01,519 --> 00:46:03,679
in two places? Like do I need to pick? How

848
00:46:03,719 --> 00:46:07,639
big of the deal? Is this fairly open?

849
00:46:09,360 --> 00:46:12,039
Speaker 4: I think it's usually pretty clear, but I guess in

850
00:46:12,519 --> 00:46:15,599
kind of the limit when you get into very complicated applications,

851
00:46:15,599 --> 00:46:17,519
maybe it's a little tricky.

852
00:46:17,599 --> 00:46:19,400
Speaker 2: Should be a parent most of the time, but once

853
00:46:19,440 --> 00:46:20,079
in a while you're going.

854
00:46:20,079 --> 00:46:20,679
Speaker 4: To get an a question.

855
00:46:21,519 --> 00:46:24,679
Speaker 2: So two point zero is imminent? What make you what

856
00:46:24,760 --> 00:46:27,519
makes you do a new version number? Like, what are

857
00:46:27,519 --> 00:46:28,440
you thinking? So?

858
00:46:28,800 --> 00:46:31,320
Speaker 4: Yeah, like I said, we are kind of working on

859
00:46:31,480 --> 00:46:38,679
scaling up to big, bigger, more complex javascripts and typeescript projects.

860
00:46:39,039 --> 00:46:42,480
So the big thing that's happening in Dino two is

861
00:46:42,480 --> 00:46:47,239
that we can essentially execute any node project. Now, modern

862
00:46:47,280 --> 00:46:50,360
node projects you do need to use ESM like exmascript

863
00:46:50,440 --> 00:46:54,920
module syntax, not require but import, but you should be

864
00:46:54,920 --> 00:46:57,840
able to drop into any kind of modern ish node

865
00:46:57,840 --> 00:47:02,960
project and use DNO to execute the code in Dino itself.

866
00:47:03,199 --> 00:47:05,360
Whether you're in kind of a node project or not.

867
00:47:06,199 --> 00:47:11,320
You can pull in NPM dependencies. Pretty pretty nicely. And

868
00:47:11,360 --> 00:47:16,719
we've also introduced this new package registry called JSR where

869
00:47:16,719 --> 00:47:23,079
people can publish JavaScript and typescript code and it is well,

870
00:47:23,119 --> 00:47:26,320
I don't know how much you guys interact with NPM,

871
00:47:26,480 --> 00:47:31,039
but post get Hub acquisition, NPM is really not changing

872
00:47:31,199 --> 00:47:34,000
at all. And that is kind of a shame for

873
00:47:34,679 --> 00:47:38,920
the world's most popular programming language, where there's like vibrant, exciting,

874
00:47:39,000 --> 00:47:42,960
creative things happening, publishing the NPM is still very much

875
00:47:42,960 --> 00:47:46,280
stuck in the common JS era. It's really hard to

876
00:47:46,960 --> 00:47:50,400
for people to figure out how to take typescript and

877
00:47:50,519 --> 00:47:57,320
compile it down and publish it for different different situations.

878
00:47:58,039 --> 00:48:00,480
And yeah, frankly, we live in a world that is

879
00:48:00,480 --> 00:48:03,840
not just Node. Now. There's there's a number of run times.

880
00:48:03,599 --> 00:48:07,239
There's there's a note of course, but Dino and Bun

881
00:48:07,400 --> 00:48:12,159
and cloud flare workers and browsers of course. So JSR

882
00:48:12,440 --> 00:48:17,320
is a modern package registry for JavaScript and typescript that

883
00:48:17,519 --> 00:48:22,119
makes it just delightful to publish ads, say, for example,

884
00:48:24,440 --> 00:48:29,159
auto generated documentation for consumers of these modules, and is

885
00:48:30,239 --> 00:48:33,199
cross platform like can work with all of these different

886
00:48:33,639 --> 00:48:34,199
run times.

887
00:48:34,559 --> 00:48:37,280
Speaker 2: Ind you say that of an NPM, because on one hand,

888
00:48:37,360 --> 00:48:39,400
when get up acquired. You're like, oh good, it's safe.

889
00:48:39,440 --> 00:48:42,280
Now we won't have to worry anymore. It doesn't have

890
00:48:42,320 --> 00:48:43,559
to figure out how to make money or any of

891
00:48:43,559 --> 00:48:45,800
those sorts of things. It's now living in that big ecosystem.

892
00:48:45,880 --> 00:48:49,400
But like there's in inertia. I wonder if they lost

893
00:48:49,519 --> 00:48:53,239
key people like that. There's just they're afraid to do

894
00:48:53,360 --> 00:48:54,079
much to NPM.

895
00:48:54,880 --> 00:48:57,360
Speaker 4: Yeah, I think it's hard to change anything because it's

896
00:48:57,400 --> 00:49:00,719
so large at this point and there's no real all uh,

897
00:49:01,400 --> 00:49:03,480
there's no real business there. I mean that was always

898
00:49:03,480 --> 00:49:07,280
the problem with as a company that like they couldn't

899
00:49:07,280 --> 00:49:09,960
figure out the business. And so I think, yeah, it's safe,

900
00:49:10,199 --> 00:49:11,320
that's that's a good thing.

901
00:49:11,360 --> 00:49:14,960
Speaker 2: Package managers in general aren't a business. We all need them, right,

902
00:49:15,079 --> 00:49:16,639
none of well none of us will pay for them.

903
00:49:16,719 --> 00:49:19,360
Speaker 4: Yes, I totally agree, which is, by the way, is

904
00:49:19,679 --> 00:49:24,639
which why JSR is kind of a completely open source

905
00:49:24,719 --> 00:49:29,639
unlike NPM is completely open source. And although I'm managing

906
00:49:29,639 --> 00:49:31,880
it right now, the Dino company is managing it. It

907
00:49:31,960 --> 00:49:37,880
is a aims to be a kind of public service,

908
00:49:38,000 --> 00:49:40,719
and I hope to put it into a foundation of

909
00:49:40,719 --> 00:49:41,159
some sort.

910
00:49:42,159 --> 00:49:44,960
Speaker 1: I'll have to check that out. Coming from New gat

911
00:49:45,039 --> 00:49:47,800
in the ease of which I can use that in

912
00:49:47,800 --> 00:49:51,719
my environment. NPM was a real kind of learning curve

913
00:49:51,760 --> 00:49:54,639
for me, So I'm hoping that I'm hoping this is

914
00:49:54,679 --> 00:49:57,599
going to be nicer, and it sounds like it already is.

915
00:49:59,079 --> 00:50:01,400
Speaker 4: It's it's super delightful if.

916
00:50:02,880 --> 00:50:03,840
Speaker 1: That's the way it should be.

917
00:50:03,880 --> 00:50:06,320
Speaker 2: I don't know. The perfect packing manager is when I

918
00:50:06,400 --> 00:50:09,039
never think about it, just is what I needed to do. Yeah,

919
00:50:09,360 --> 00:50:11,719
and the moment it pops up and interrupts me, look

920
00:50:11,760 --> 00:50:14,559
at you and you yet, yeah, then it's wrong. Right,

921
00:50:14,920 --> 00:50:16,239
That's a that's a problem.

922
00:50:16,559 --> 00:50:18,880
Speaker 1: Sometimes you do want to make sure that you're not

923
00:50:19,559 --> 00:50:22,760
getting the newer version that isn't compatible with another package,

924
00:50:22,760 --> 00:50:25,119
that isn't compatible with another I mean you do kind

925
00:50:25,119 --> 00:50:26,280
of need that control.

926
00:50:26,400 --> 00:50:30,159
Speaker 4: But assuming speaking of like never needing a package manager

927
00:50:30,360 --> 00:50:32,519
like in Diino two. If you want to pull in

928
00:50:32,559 --> 00:50:36,400
an NPM dependency, for example, a common one is Express

929
00:50:36,599 --> 00:50:39,880
kind of a web you know, simple simple web framework.

930
00:50:40,440 --> 00:50:43,280
You can just import and PM call and express like

931
00:50:43,320 --> 00:50:46,079
you don't need to set up and do kind of

932
00:50:46,079 --> 00:50:50,400
an NPM AD or create a package Jason. You can

933
00:50:50,440 --> 00:50:53,519
really kind of scale down your your stuff and just

934
00:50:53,559 --> 00:50:59,480
have these kind of single line imports, that's defined education

935
00:50:59,800 --> 00:51:04,480
and yeah, and Dino knows how. Dino included in the

936
00:51:04,519 --> 00:51:07,519
Dino ex single file is a package manager and knows

937
00:51:07,519 --> 00:51:11,000
how to pull down the MPM dependencies. And you know,

938
00:51:11,039 --> 00:51:14,119
you don't have this problem of having a node modules

939
00:51:14,119 --> 00:51:20,039
folder in your local project. Uh maybe you want that,

940
00:51:20,039 --> 00:51:23,719
that's an option, of course, but uh, generally it stores

941
00:51:23,760 --> 00:51:25,880
these things in a global cash and so yeah, it

942
00:51:25,960 --> 00:51:28,280
has a generally clean feel to it.

943
00:51:28,440 --> 00:51:31,000
Speaker 1: So when Dino is done and you're on that trajectory

944
00:51:31,079 --> 00:51:33,440
again and you're you're looking around and saying, you know,

945
00:51:33,920 --> 00:51:35,559
I think I want to go on to the next thing.

946
00:51:35,599 --> 00:51:37,360
Do you have something in mind that you want to

947
00:51:37,400 --> 00:51:38,800
do that you can share with us.

948
00:51:41,480 --> 00:51:47,119
Speaker 4: I was just saying to my wife earlier today, like

949
00:51:47,360 --> 00:51:50,039
I want to return to my Pinterest app and get

950
00:51:50,039 --> 00:51:54,000
this this uh this social network going because I hate Pinterest.

951
00:51:54,039 --> 00:51:56,639
It's so terrible. I need it, don't you kind of

952
00:51:56,679 --> 00:51:59,480
need it? I never I never a lot of random

953
00:51:59,519 --> 00:52:04,159
ideas that I would love to pursue, random id manager,

954
00:52:04,280 --> 00:52:09,039
some of them are I pursue with with Dino. You know,

955
00:52:09,039 --> 00:52:13,920
we we just released this JavaScript trademark open letter a

956
00:52:13,920 --> 00:52:16,519
couple of days ago, which is kind of a pet

957
00:52:16,559 --> 00:52:19,639
project of mind fighting Oracle for did you know that

958
00:52:19,800 --> 00:52:26,280
Oracle owns the JavaScript trademark? I hate them and why

959
00:52:26,320 --> 00:52:28,800
do they own it? And how confusing that is, and

960
00:52:30,519 --> 00:52:33,039
especially for people who you know, have something called the

961
00:52:33,119 --> 00:52:42,519
Dino JavaScript runtime. It's just very annoying. Yeah, a lot

962
00:52:42,559 --> 00:52:47,000
of a lot of fun, fun undertakings I continue to do.

963
00:52:47,679 --> 00:52:50,800
Speaker 1: Kind of thinking. There's a little sarcasm in that word

964
00:52:50,880 --> 00:52:52,679
fun coming out of your mouth there.

965
00:52:54,360 --> 00:52:56,280
Speaker 2: But there is a whole initiative going on to try

966
00:52:56,280 --> 00:52:58,199
and get them just to render the trademark. Like right,

967
00:52:58,360 --> 00:53:00,840
you're not doing anything with it, it's not important to Heck,

968
00:53:00,880 --> 00:53:03,400
you barely pay attention to Java. Why you have the

969
00:53:03,480 --> 00:53:07,239
JavaScript trademark as well? Like just it makes everything confusing.

970
00:53:07,400 --> 00:53:10,719
It's just because Sun registered at the time, not that

971
00:53:10,760 --> 00:53:11,880
it was important to them.

972
00:53:12,880 --> 00:53:16,079
Speaker 4: I mean, the Java trademark might actually be important because

973
00:53:16,119 --> 00:53:19,639
that is something that they continue to develop and presumably

974
00:53:19,679 --> 00:53:22,760
have a business around. I'm not against trademarks, of course,

975
00:53:22,840 --> 00:53:30,800
but it is the JavaScript one is very problematic. You

976
00:53:31,039 --> 00:53:33,719
can check out check out this open letter that I'm writing.

977
00:53:33,760 --> 00:53:36,840
So I'm planning on filing. I just learned about this

978
00:53:36,880 --> 00:53:39,599
process a couple of months ago, I'm planning to file

979
00:53:40,119 --> 00:53:45,360
a petition with the USPTO, the Patent and Trademark Office

980
00:53:45,719 --> 00:53:50,440
to cancel oracles JavaScript trademark because I think it is

981
00:53:51,000 --> 00:53:54,880
it is actually invalids as defined in the US Code,

982
00:53:54,880 --> 00:53:57,000
And I go through that in this in this open letter,

983
00:53:58,800 --> 00:54:01,480
and yeah, I think I think next month we'll actually

984
00:54:01,480 --> 00:54:01,880
file this.

985
00:54:02,119 --> 00:54:04,960
Speaker 2: Great, I mean, good for you. They should actually just

986
00:54:05,039 --> 00:54:06,880
release it and try and make themselves look like the

987
00:54:06,920 --> 00:54:09,199
good guy. But it is Oracle. There's not a lot

988
00:54:09,199 --> 00:54:09,760
of good guy there.

989
00:54:09,800 --> 00:54:10,679
Speaker 4: Yeah.

990
00:54:10,760 --> 00:54:14,679
Speaker 1: Yeah, let's let's hold open source developers feet to the

991
00:54:14,679 --> 00:54:17,360
fire so that they can't use our trademark.

992
00:54:17,679 --> 00:54:20,880
Speaker 2: Nice, stupid. There's nothing they could do with it that

993
00:54:20,920 --> 00:54:23,039
would be useful in any way or.

994
00:54:23,079 --> 00:54:25,360
Speaker 1: Profitable for them, right, what's the point? Yeah?

995
00:54:25,400 --> 00:54:27,599
Speaker 4: I think the best best thing they could do is

996
00:54:27,880 --> 00:54:31,480
release it and get the goodwill for it. But as

997
00:54:31,800 --> 00:54:36,960
Brian Cantrell has said, don't anthromorphize the lawnmower, Oracle being

998
00:54:37,400 --> 00:54:38,000
the lawnmower.

999
00:54:38,679 --> 00:54:41,599
Speaker 2: A lot more that collects is licensing fees along the way,

1000
00:54:41,880 --> 00:54:45,599
oh man, a licensing strategy known as so how much

1001
00:54:45,639 --> 00:54:47,719
money do you have? Yeah? Right, all right?

1002
00:54:48,000 --> 00:54:49,440
Speaker 1: The leaf sucker.

1003
00:54:51,880 --> 00:54:53,639
Speaker 2: Hey, Ryan's so much fun to talk to you. Thanks

1004
00:54:53,679 --> 00:54:55,239
so much for all the great work you do. It's

1005
00:54:55,280 --> 00:54:56,320
really a pleasure.

1006
00:54:56,000 --> 00:54:57,719
Speaker 1: And it was delightful talk to you as well.

1007
00:54:58,079 --> 00:54:58,360
Speaker 2: Great.

1008
00:54:58,599 --> 00:55:00,800
Speaker 4: Thanks, It's fun all right, and.

1009
00:55:00,800 --> 00:55:03,800
Speaker 1: We'll talk to you, dear listener next time on dot

1010
00:55:03,920 --> 00:55:26,400
net rocks. Dot net Rocks is brought to you by

1011
00:55:26,480 --> 00:55:31,199
Franklin's Net and produced by Pop Studios, a full service audio,

1012
00:55:31,280 --> 00:55:35,719
video and post production facility located physically in New London, Connecticut,

1013
00:55:36,000 --> 00:55:40,800
and of course in the cloud online at pwop dot com.

1014
00:55:41,000 --> 00:55:43,119
Speaker 5: Visit our website at d O T N E t

1015
00:55:43,360 --> 00:55:47,360
R O c k S dot com for RSS feeds, downloads,

1016
00:55:47,519 --> 00:55:51,199
mobile apps, comments, and access to the full archives going

1017
00:55:51,239 --> 00:55:54,639
back to show number one, recorded in September two thousand

1018
00:55:54,639 --> 00:55:54,920
and two.

1019
00:55:55,519 --> 00:55:57,880
Speaker 1: And make sure you check out our sponsors. They keep

1020
00:55:57,960 --> 00:56:01,079
us in business. Now go write some Oh see you

1021
00:56:01,159 --> 00:56:08,199
next time. Got trade middle vands do the summer time

1022
00:56:09,440 --> 00:56:13,320
that means home than my Texas a line d

