WEBVTT

1
00:00:05.240 --> 00:00:09.839
<v Speaker 1>Hello, everybody, Welcome to another exciting ever episode of javascripts Jabber.

2
00:00:09.880 --> 00:00:11.880
<v Speaker 1>I am Steve Edwards, the host with the face for

3
00:00:12.000 --> 00:00:13.800
<v Speaker 1>radio as you can see in the voice for being

4
00:00:13.800 --> 00:00:17.519
<v Speaker 1>a mine, but I'm still your host with me Today

5
00:00:17.600 --> 00:00:20.000
<v Speaker 1>on the panel, we have mister Dan Shapiro coming live

6
00:00:20.039 --> 00:00:22.359
<v Speaker 1>from tell Abev, Israel. How you doing, Dan, But well.

7
00:00:22.239 --> 00:00:24.839
<v Speaker 2>You know it's hot here as surprise, surprise.

8
00:00:25.559 --> 00:00:27.719
<v Speaker 1>Yeah, we're going back and forth here. It was pretty

9
00:00:27.719 --> 00:00:29.600
<v Speaker 1>warm last couple weeks and now it's a little cool

10
00:00:29.640 --> 00:00:32.600
<v Speaker 1>and cloudy and it's gonna be pretty mellow, so pretty nice.

11
00:00:32.759 --> 00:00:35.039
<v Speaker 1>As we're getting to the end of August, I'm going

12
00:00:35.079 --> 00:00:39.240
<v Speaker 1>to let Dan introduce our special returning guests, So go for.

13
00:00:39.240 --> 00:00:39.560
<v Speaker 3>It, Dan.

14
00:00:39.920 --> 00:00:43.719
<v Speaker 2>Yeah. So I'm really excited about today's guests. We have

15
00:00:43.799 --> 00:00:47.560
<v Speaker 2>two of them, which means it's double the pleasure, and

16
00:00:47.640 --> 00:00:50.359
<v Speaker 2>they are both a living testament to the fact that

17
00:00:50.679 --> 00:00:53.799
<v Speaker 2>you don't need to work at Google or at Meta

18
00:00:53.960 --> 00:00:56.359
<v Speaker 2>or at some other fang in order to make a

19
00:00:56.479 --> 00:01:01.119
<v Speaker 2>huge impact on web development. So we have Ryan Carneato

20
00:01:01.719 --> 00:01:05.040
<v Speaker 2>and we have Tanner Lindsley. Hi, guys, want to introduce

21
00:01:05.079 --> 00:01:08.359
<v Speaker 2>yourselves in case somebody somehow doesn't know who you.

22
00:01:08.319 --> 00:01:12.560
<v Speaker 1>Are Oh sorry, I hit the plauser. Okay, I got

23
00:01:12.599 --> 00:01:15.319
<v Speaker 1>to get that crowd to control themselves. Lots of fun.

24
00:01:15.760 --> 00:01:20.200
<v Speaker 4>Yeah, I'm Brian Carneado, probably most known for creating solid

25
00:01:20.239 --> 00:01:24.400
<v Speaker 4>Jazz and my work on Signals CEO of Signals and Tanner.

26
00:01:25.079 --> 00:01:26.400
<v Speaker 3>I'm the tan Stack guy.

27
00:01:26.680 --> 00:01:29.480
<v Speaker 2>And for those who don't happen to know, Tanstack is

28
00:01:29.560 --> 00:01:32.519
<v Speaker 2>also where react query came from.

29
00:01:32.560 --> 00:01:37.280
<v Speaker 3>Now tanstack query right, React Query I even I still

30
00:01:37.319 --> 00:01:38.760
<v Speaker 3>call it that, which is fine.

31
00:01:38.840 --> 00:01:42.879
<v Speaker 2>And also lots of other great tools. You've recently introduced

32
00:01:42.879 --> 00:01:43.319
<v Speaker 2>a couple.

33
00:01:43.519 --> 00:01:48.560
<v Speaker 3>Yeah, we we have just a couple. We're working on

34
00:01:48.599 --> 00:01:52.879
<v Speaker 3>a new framework inspired by solid Start called tan sax Start.

35
00:01:53.920 --> 00:01:57.959
<v Speaker 3>We have a router. We have a new library called pacer,

36
00:01:58.120 --> 00:02:03.599
<v Speaker 3>which is about like debound throttling, ate leming stuff. We

37
00:02:03.640 --> 00:02:09.719
<v Speaker 3>have the controversial name tan stack dB, which is a

38
00:02:09.800 --> 00:02:13.840
<v Speaker 3>reactive client store. I mean it's a database, but it's

39
00:02:13.879 --> 00:02:15.639
<v Speaker 3>only for like the client on the front end. It's

40
00:02:15.639 --> 00:02:20.520
<v Speaker 3>pretty sweet, guys, except that it isn't right. Yeah, it's

41
00:02:21.319 --> 00:02:24.319
<v Speaker 3>it's an awesome library. That's all you need to know. Uh.

42
00:02:25.080 --> 00:02:28.879
<v Speaker 3>And we've got like table and form as well virtual

43
00:02:29.879 --> 00:02:33.120
<v Speaker 3>h We've got a couple. We're even working on something

44
00:02:33.159 --> 00:02:36.319
<v Speaker 3>called tan Sak dev tools right now, which is oh

45
00:02:36.400 --> 00:02:37.520
<v Speaker 3>yeah about that.

46
00:02:37.599 --> 00:02:39.879
<v Speaker 2>We will have to bring either you or somebody else

47
00:02:39.919 --> 00:02:41.960
<v Speaker 2>on the team on to talk about that when you're

48
00:02:41.960 --> 00:02:44.759
<v Speaker 2>different than you guys already h and I have to

49
00:02:44.800 --> 00:02:51.520
<v Speaker 2>also mention create tense ten stack start or whatever Jack

50
00:02:52.479 --> 00:02:53.199
<v Speaker 2>these days.

51
00:02:53.280 --> 00:02:55.800
<v Speaker 3>Whatever we're going gonna call it, and it might even

52
00:02:55.840 --> 00:02:58.919
<v Speaker 3>just be called create tan Stacking like that.

53
00:02:58.840 --> 00:03:01.159
<v Speaker 2>For those of you don't know that is. We actually

54
00:03:01.280 --> 00:03:03.680
<v Speaker 2>had Jack Harrington on the show to talk about it.

55
00:03:03.680 --> 00:03:07.879
<v Speaker 2>It's an awesome replacement for create react at least.

56
00:03:08.280 --> 00:03:10.159
<v Speaker 3>Yeah, we have some fun plans for it.

57
00:03:10.280 --> 00:03:13.240
<v Speaker 1>So it's Tanstack Ranger. I'm looking at a last.

58
00:03:13.560 --> 00:03:19.439
<v Speaker 3>Ranger is kind of a throwback to my old open

59
00:03:19.439 --> 00:03:21.960
<v Speaker 3>source days. It's it's I needed a library to do

60
00:03:22.159 --> 00:03:28.199
<v Speaker 3>multi range inputs, so like sliders with multiple handles. I

61
00:03:28.639 --> 00:03:32.560
<v Speaker 3>made a headless version of it. I called it Ranger,

62
00:03:33.560 --> 00:03:34.360
<v Speaker 3>which is kind of fun.

63
00:03:34.639 --> 00:03:37.759
<v Speaker 1>See I'm thinking like Park Ranger and uh, you know

64
00:03:37.840 --> 00:03:40.759
<v Speaker 1>Jellystone Park and I remember that.

65
00:03:42.000 --> 00:03:47.599
<v Speaker 3>Yeah, it's probably it's it's the most niche library that

66
00:03:47.639 --> 00:03:50.639
<v Speaker 3>we have, which it's cool. I still use it every

67
00:03:50.639 --> 00:03:51.120
<v Speaker 3>now and then.

68
00:03:51.879 --> 00:03:54.120
<v Speaker 2>And one more thing about you, Tanner, correct me if

69
00:03:54.159 --> 00:03:58.080
<v Speaker 2>I'm wrong, but you're now you've transitioned to work full

70
00:03:58.159 --> 00:04:00.159
<v Speaker 2>time on your open source staf.

71
00:04:00.319 --> 00:04:02.879
<v Speaker 3>Right, yeah, about a year and a half ago.

72
00:04:03.039 --> 00:04:08.039
<v Speaker 2>That is awesome. So basically you're the guy not making

73
00:04:08.039 --> 00:04:09.800
<v Speaker 2>a living, so the rest of us can.

74
00:04:10.039 --> 00:04:15.719
<v Speaker 3>I mean as of nine months ago, I'm making a

75
00:04:15.759 --> 00:04:16.439
<v Speaker 3>good living now.

76
00:04:17.079 --> 00:04:19.399
<v Speaker 1>So yeah, so what is your business model for that?

77
00:04:19.439 --> 00:04:25.480
<v Speaker 3>Then? Well, it's it's different than most others, I think,

78
00:04:25.519 --> 00:04:31.680
<v Speaker 3>so I abhor VC around oss. I've done venture capital

79
00:04:31.720 --> 00:04:37.040
<v Speaker 3>for my last company, and I've also bootstrapped plenty of things.

80
00:04:37.839 --> 00:04:39.600
<v Speaker 3>I didn't want to do that for tanse Dec. So

81
00:04:40.240 --> 00:04:45.199
<v Speaker 3>Tensex basically run like a media company right now, as

82
00:04:45.240 --> 00:04:51.040
<v Speaker 3>like a business side of things, so marketing, advertising, partnership,

83
00:04:51.160 --> 00:04:55.439
<v Speaker 3>brand deals and the like. And that's how tanse Dec

84
00:04:56.000 --> 00:05:01.720
<v Speaker 3>is making money and paying both me and also now

85
00:05:01.800 --> 00:05:05.600
<v Speaker 3>contributing a lot towards contributors as well, and that's just

86
00:05:05.600 --> 00:05:07.959
<v Speaker 3>going to grow over time hopefully.

87
00:05:08.000 --> 00:05:12.319
<v Speaker 2>Does that mean running ads within your website, within your

88
00:05:13.040 --> 00:05:14.680
<v Speaker 2>products or something else?

89
00:05:15.360 --> 00:05:18.759
<v Speaker 3>Yeah, So tan stack dot com is the revenue generator

90
00:05:19.480 --> 00:05:25.160
<v Speaker 3>and the libraries are just guests on the tan stack

91
00:05:25.199 --> 00:05:28.879
<v Speaker 3>dot com show every day.

92
00:05:28.519 --> 00:05:32.279
<v Speaker 2>That's interesting. Yeah, I'm really happy that it's working for you.

93
00:05:33.000 --> 00:05:36.439
<v Speaker 3>Yeah, it's working so far, so we'll we'll see. I

94
00:05:36.439 --> 00:05:40.839
<v Speaker 3>don't know if it's scalable or not, but it works

95
00:05:40.879 --> 00:05:43.240
<v Speaker 3>for me, and I think that's that's good enough for now.

96
00:05:43.319 --> 00:05:46.680
<v Speaker 2>And how about you, Ryan, how are things with you?

97
00:05:46.720 --> 00:05:47.160
<v Speaker 1>Pretty good?

98
00:05:47.839 --> 00:05:52.279
<v Speaker 4>I've been at Century now for almost a year, so okay, Yeah,

99
00:05:52.399 --> 00:05:54.959
<v Speaker 4>like this week coming up marks a year Century So

100
00:05:55.800 --> 00:06:00.360
<v Speaker 4>they've been great, been able to obviously support my U,

101
00:06:00.879 --> 00:06:02.240
<v Speaker 4>R and D. I've been doing a lot this year

102
00:06:02.240 --> 00:06:05.759
<v Speaker 4>because I've been working a lot of new areas kind

103
00:06:05.800 --> 00:06:10.720
<v Speaker 4>of for upcoming releases of Solid and and they've been

104
00:06:10.720 --> 00:06:12.879
<v Speaker 4>supporting lots of other ways. I've been getting closer with

105
00:06:12.920 --> 00:06:14.319
<v Speaker 4>the syntax FM guys.

106
00:06:15.160 --> 00:06:16.600
<v Speaker 1>I was gonna ask if you worked with them.

107
00:06:17.079 --> 00:06:20.040
<v Speaker 4>Yeah, So we've been talking about how to up my

108
00:06:20.079 --> 00:06:24.199
<v Speaker 4>game on video content and different kinds of media stuff

109
00:06:24.319 --> 00:06:25.399
<v Speaker 4>like better promotion.

110
00:06:25.759 --> 00:06:28.720
<v Speaker 2>So I'm guessing they told you you need to make

111
00:06:28.759 --> 00:06:29.879
<v Speaker 2>longer videos.

112
00:06:30.480 --> 00:06:33.759
<v Speaker 1>Yeah, that's funny, No, they were.

113
00:06:34.120 --> 00:06:36.199
<v Speaker 4>Everyone's been really stoked on those shorter videos that I've

114
00:06:36.199 --> 00:06:38.399
<v Speaker 4>been doing recently. They said they were like a little crunched,

115
00:06:38.800 --> 00:06:42.560
<v Speaker 4>could do some more production value, but generally speaking, I

116
00:06:42.639 --> 00:06:46.439
<v Speaker 4>usually stream for like five hours ish you know, maybe

117
00:06:46.439 --> 00:06:49.920
<v Speaker 4>every other Friday or so. And I started in the

118
00:06:49.959 --> 00:06:53.120
<v Speaker 4>last couple of months doing like ten minute videos, and

119
00:06:53.639 --> 00:06:55.319
<v Speaker 4>for me, doing ten minute videos very hard.

120
00:06:55.319 --> 00:06:56.079
<v Speaker 1>It's condensed.

121
00:06:56.120 --> 00:07:00.959
<v Speaker 4>It's like because I picked really deep topics, but I

122
00:07:01.040 --> 00:07:03.079
<v Speaker 4>just needed a place to point people too. When people

123
00:07:03.079 --> 00:07:05.600
<v Speaker 4>are like, you know, signals, blah blah blah blah blah,

124
00:07:05.600 --> 00:07:07.360
<v Speaker 4>you know, like complains. You know, I'm a React developer.

125
00:07:07.399 --> 00:07:09.120
<v Speaker 4>I don't get why they important. It's just like, okay, well,

126
00:07:09.199 --> 00:07:11.759
<v Speaker 4>can I make an FAQ basically as a video. And

127
00:07:12.199 --> 00:07:15.120
<v Speaker 4>that's sort of what I've been trying to do. Find

128
00:07:15.160 --> 00:07:18.079
<v Speaker 4>content that's sure enough that people will not like bulk

129
00:07:18.319 --> 00:07:22.360
<v Speaker 4>looking at the whole length of the video, but then

130
00:07:22.439 --> 00:07:26.600
<v Speaker 4>still get a lot of unique content in there. It's

131
00:07:26.639 --> 00:07:29.879
<v Speaker 4>difficult because my expertise is I said, very very deep.

132
00:07:30.720 --> 00:07:33.759
<v Speaker 4>You don't really find content like I do in most

133
00:07:34.040 --> 00:07:36.240
<v Speaker 4>video content. Like you guys sometimes get really deep on

134
00:07:36.279 --> 00:07:38.519
<v Speaker 4>your podcast, which is why I love this podcast. But

135
00:07:38.600 --> 00:07:42.079
<v Speaker 4>a lot of video content isn't the same sort of thing.

136
00:07:42.319 --> 00:07:44.199
<v Speaker 4>You know, it's either like how do you do this?

137
00:07:45.000 --> 00:07:49.720
<v Speaker 4>Or it's like the most beginner intro level of stuff.

138
00:07:49.759 --> 00:07:52.759
<v Speaker 4>So being able to ask the whys, I think is

139
00:07:52.800 --> 00:07:55.120
<v Speaker 4>really really important and like looking at the design stuff.

140
00:07:55.160 --> 00:07:57.480
<v Speaker 4>So I'm going to try and bridge that gap, you know,

141
00:07:57.519 --> 00:08:00.920
<v Speaker 4>maybe pick smaller topics that I can actually talk about,

142
00:08:00.959 --> 00:08:02.879
<v Speaker 4>you know, in seven to ten minutes.

143
00:08:03.439 --> 00:08:06.160
<v Speaker 2>So you kind of remind me of that. I think

144
00:08:06.199 --> 00:08:08.759
<v Speaker 2>it's Mark Twain who said I didn't have the time

145
00:08:08.800 --> 00:08:11.800
<v Speaker 2>to write your long letters short letters, so I wrote

146
00:08:11.839 --> 00:08:15.199
<v Speaker 2>you a long one. So yeah, it's exactly much much

147
00:08:15.199 --> 00:08:19.800
<v Speaker 2>more challenging to create short and concise and to the

148
00:08:19.879 --> 00:08:20.759
<v Speaker 2>point content.

149
00:08:21.319 --> 00:08:23.959
<v Speaker 4>Yeah, especially if you spend all your time like like

150
00:08:24.199 --> 00:08:27.759
<v Speaker 4>really like like just kind of exploring ideas and stuff,

151
00:08:27.800 --> 00:08:30.279
<v Speaker 4>you know, and taking stuff which way to actually come

152
00:08:30.360 --> 00:08:32.879
<v Speaker 4>up to a consolidated messages way more work. I can

153
00:08:32.879 --> 00:08:35.120
<v Speaker 4>stream for five hours, but then I'm like mostly done.

154
00:08:36.080 --> 00:08:38.080
<v Speaker 4>The video is going to take me at least two

155
00:08:38.200 --> 00:08:40.000
<v Speaker 4>or three days.

156
00:08:39.720 --> 00:08:43.559
<v Speaker 2>You know, that's for sure. Well, let's put it this way.

157
00:08:43.600 --> 00:08:45.519
<v Speaker 2>I think that once you get the hang of it,

158
00:08:45.679 --> 00:08:48.759
<v Speaker 2>you'll be able to do it much more effectively. Maybe

159
00:08:48.759 --> 00:08:50.840
<v Speaker 2>you should also consult about it with THEO.

160
00:08:51.320 --> 00:08:51.519
<v Speaker 3>Yeah.

161
00:08:51.600 --> 00:08:56.279
<v Speaker 4>Yeah, he's been waiting for me to like level up that.

162
00:08:56.559 --> 00:08:58.200
<v Speaker 4>He was like, yeah, I just keep on doing what

163
00:08:58.240 --> 00:08:59.960
<v Speaker 4>you're doing, but when it's time come see me you know,

164
00:09:00.240 --> 00:09:02.799
<v Speaker 4>like better gear, better stuff, you know.

165
00:09:03.080 --> 00:09:06.399
<v Speaker 1>So yeah, yeah, I did one video for for you

166
00:09:06.639 --> 00:09:11.759
<v Speaker 1>Mastery a couple of years ago, And the amount of

167
00:09:11.799 --> 00:09:14.399
<v Speaker 1>work it takes to get to just to put together

168
00:09:15.159 --> 00:09:18.519
<v Speaker 1>simple videos is crazy. Whether it's recording, I would assume

169
00:09:18.519 --> 00:09:20.879
<v Speaker 1>that once you get your setup in place, you know,

170
00:09:20.960 --> 00:09:23.799
<v Speaker 1>your your software and your different artwork components and your

171
00:09:23.840 --> 00:09:25.519
<v Speaker 1>speakers and all that stuff, and you know what you're doing,

172
00:09:25.559 --> 00:09:29.000
<v Speaker 1>it's probably a lot quicker. But that's that's got to

173
00:09:29.039 --> 00:09:31.120
<v Speaker 1>be a learning curve just in getting set up to

174
00:09:31.159 --> 00:09:32.879
<v Speaker 1>do video production like that.

175
00:09:33.440 --> 00:09:36.840
<v Speaker 4>Yeah, and I like editing stuff in I'm a big

176
00:09:36.879 --> 00:09:39.960
<v Speaker 4>fan of fireship videos and even my articles are like that.

177
00:09:40.000 --> 00:09:42.759
<v Speaker 4>I've always done a lot of meme pictures and like

178
00:09:42.759 --> 00:09:45.879
<v Speaker 4>like images to back up what I'm saying, Yes, can

179
00:09:45.919 --> 00:09:47.679
<v Speaker 4>I keep it going? Even my conference talks are like

180
00:09:47.720 --> 00:09:50.320
<v Speaker 4>that too. So I find the video editing actuallyising a

181
00:09:50.320 --> 00:09:52.039
<v Speaker 4>long time because I need to find just the perfect

182
00:09:52.200 --> 00:09:57.000
<v Speaker 4>clip or the perfect like image to kind of overlay

183
00:09:57.600 --> 00:10:01.000
<v Speaker 4>the different parts. So like it's like it's almost on

184
00:10:01.039 --> 00:10:04.519
<v Speaker 4>like a twenty second cadence, so like it's you know,

185
00:10:04.639 --> 00:10:05.679
<v Speaker 4>twenty minute video.

186
00:10:05.960 --> 00:10:07.159
<v Speaker 1>You know, that's a lot of clips.

187
00:10:07.600 --> 00:10:09.399
<v Speaker 3>Well, just let AI do it for you.

188
00:10:10.240 --> 00:10:11.799
<v Speaker 1>Well, you know, I have the same struggle with always

189
00:10:11.840 --> 00:10:14.120
<v Speaker 1>trying to find a perfect dad joke to publish on

190
00:10:14.159 --> 00:10:15.960
<v Speaker 1>a daily basis and to throw in here and there

191
00:10:16.000 --> 00:10:18.279
<v Speaker 1>so I can somewhat they all perfect.

192
00:10:18.279 --> 00:10:19.639
<v Speaker 2>Stage, they're all perfect.

193
00:10:20.120 --> 00:10:21.840
<v Speaker 1>Oh boy, I got to tell you some stories about

194
00:10:21.840 --> 00:10:24.919
<v Speaker 1>how they're not always, but that's a topic for another time.

195
00:10:25.200 --> 00:10:28.039
<v Speaker 2>Yeah, I think we need to finally get to the

196
00:10:28.320 --> 00:10:30.919
<v Speaker 2>to the crux to the main issue.

197
00:10:31.080 --> 00:10:33.080
<v Speaker 1>We had a topic for today, any topic that we're

198
00:10:33.120 --> 00:10:34.639
<v Speaker 1>here to discuss, gotcha.

199
00:10:34.720 --> 00:10:39.320
<v Speaker 2>So again, I'll give a brief background. A while back,

200
00:10:39.399 --> 00:10:43.519
<v Speaker 2>I had this idea of le let's go even further back.

201
00:10:43.639 --> 00:10:49.000
<v Speaker 2>I started noticing a certain pattern that was occurring in

202
00:10:49.080 --> 00:10:53.440
<v Speaker 2>a lot of frameworks, especially as they were becoming meta frameworks,

203
00:10:53.840 --> 00:10:56.480
<v Speaker 2>and that's kind of and I termed it to come

204
00:10:56.480 --> 00:10:59.919
<v Speaker 2>back of RPC, and we'll talk about what RPC is

205
00:11:00.360 --> 00:11:04.799
<v Speaker 2>and why it's making this comeback now. But when I

206
00:11:04.960 --> 00:11:07.559
<v Speaker 2>noticed that, it occurred to me that this could be

207
00:11:07.559 --> 00:11:11.039
<v Speaker 2>an interesting topic for a conference talk, which I created

208
00:11:11.080 --> 00:11:15.120
<v Speaker 2>and already gave once at JS Heroes in Romania. But

209
00:11:15.200 --> 00:11:17.679
<v Speaker 2>I reached out to a lot of my friends, people

210
00:11:17.799 --> 00:11:24.240
<v Speaker 2>like Ryan, like Tanner, like Rich Harris and others, and

211
00:11:24.320 --> 00:11:28.720
<v Speaker 2>started in Jack Harrington, whom we mentioned, and started talking

212
00:11:28.759 --> 00:11:33.080
<v Speaker 2>with them about this whole thing, and I realized that

213
00:11:33.120 --> 00:11:36.840
<v Speaker 2>a lot of them had very different viewpoints about what

214
00:11:36.879 --> 00:11:40.559
<v Speaker 2>our PC is, how it should or should not be used,

215
00:11:41.159 --> 00:11:46.559
<v Speaker 2>why it's interesting or maybe not. And what this ended

216
00:11:46.679 --> 00:11:50.799
<v Speaker 2>up is this conversation here. I basically asked both Ryan

217
00:11:50.879 --> 00:11:53.519
<v Speaker 2>and Tanner if they'd like to come on the show

218
00:11:53.960 --> 00:11:57.639
<v Speaker 2>and talk about this, so, you know, take it away, guys.

219
00:11:57.919 --> 00:12:02.440
<v Speaker 4>Yeah, I start because I feel like this starts with

220
00:12:03.240 --> 00:12:06.759
<v Speaker 4>stuff that I was doing. But to be fair, this

221
00:12:06.799 --> 00:12:08.879
<v Speaker 4>is stuff that Tenor definitely relates to right off the bat,

222
00:12:08.919 --> 00:12:11.360
<v Speaker 4>because the first thing you hit when you're writing a

223
00:12:11.360 --> 00:12:14.759
<v Speaker 4>meta framework, like the most obvious thing is actually meta

224
00:12:14.759 --> 00:12:18.759
<v Speaker 4>frameworks are centered around routing, right and the router And

225
00:12:19.679 --> 00:12:21.360
<v Speaker 4>I know this has nothing to do with RPC right

226
00:12:21.399 --> 00:12:22.320
<v Speaker 4>off the bat, but like.

227
00:12:23.000 --> 00:12:26.279
<v Speaker 2>Maybe we should define our PC before we dive into it.

228
00:12:26.559 --> 00:12:31.879
<v Speaker 4>Yeah, okay, sure, A remote procedure call basically this idea

229
00:12:31.879 --> 00:12:34.639
<v Speaker 4>that you can in different environments call a function from

230
00:12:34.679 --> 00:12:35.559
<v Speaker 4>the other environment.

231
00:12:36.039 --> 00:12:38.320
<v Speaker 1>Because I thought it was really popular comedy for a moment,

232
00:12:38.399 --> 00:12:38.960
<v Speaker 1>glad read.

233
00:12:40.519 --> 00:12:44.240
<v Speaker 2>I like to use a slightly different definition the way

234
00:12:44.240 --> 00:12:49.600
<v Speaker 2>that I like to define it is basically as a

235
00:12:49.639 --> 00:12:55.120
<v Speaker 2>method for invoking a service or obtaining data from another process,

236
00:12:55.559 --> 00:12:59.679
<v Speaker 2>even on another computer across the network, using a function

237
00:12:59.799 --> 00:13:04.679
<v Speaker 2>call paradigm. Are you okay with this definition? Yes, So

238
00:13:04.720 --> 00:13:07.440
<v Speaker 2>it's basically it looks like a function call. It feels

239
00:13:07.519 --> 00:13:10.600
<v Speaker 2>like a function call. You. It's as easy to use

240
00:13:10.639 --> 00:13:13.360
<v Speaker 2>as a natural to use as a function call, but

241
00:13:13.600 --> 00:13:17.320
<v Speaker 2>instead of just actually being a function call, it translates

242
00:13:17.360 --> 00:13:18.960
<v Speaker 2>to an operation across the net.

243
00:13:19.120 --> 00:13:19.360
<v Speaker 1>Yeah.

244
00:13:19.799 --> 00:13:22.039
<v Speaker 4>The funniest thing is, like my first introduction to rpcs

245
00:13:22.080 --> 00:13:24.759
<v Speaker 4>didn't feel as easy or natural to use as function calls.

246
00:13:25.200 --> 00:13:26.360
<v Speaker 1>I was using a.

247
00:13:26.519 --> 00:13:31.799
<v Speaker 4>Like soap in Microsoft stuff back in the early two thousands,

248
00:13:31.879 --> 00:13:34.840
<v Speaker 4>And if anyone's us that it's like all XML based

249
00:13:34.919 --> 00:13:38.960
<v Speaker 4>and they call they get categorized under RPC. But that

250
00:13:39.080 --> 00:13:42.679
<v Speaker 4>like in my head when someone says RPC to me, traditionally,

251
00:13:42.720 --> 00:13:44.600
<v Speaker 4>that's what I thought of. I thought of these like

252
00:13:45.120 --> 00:13:49.960
<v Speaker 4>XML end points from like Microsoft Server from like two

253
00:13:50.039 --> 00:13:52.799
<v Speaker 4>thousand and two.

254
00:13:52.879 --> 00:13:53.399
<v Speaker 1>Memories.

255
00:13:53.720 --> 00:13:56.159
<v Speaker 2>Yeah, I'm a bit of a history buff. I'm a

256
00:13:56.159 --> 00:14:00.440
<v Speaker 2>bit of a history buff. So it's interesting because it

257
00:14:00.600 --> 00:14:04.159
<v Speaker 2>was that period in time where RPC was effectively dying

258
00:14:04.840 --> 00:14:07.960
<v Speaker 2>so our PC was really RPC. The term was coined

259
00:14:08.000 --> 00:14:11.960
<v Speaker 2>in the eighties. It became really popular in the nineties

260
00:14:12.120 --> 00:14:17.720
<v Speaker 2>with the native platforms for it like Corba or Dcom

261
00:14:18.080 --> 00:14:22.399
<v Speaker 2>from Microsoft, and then the Web happened, which kind of

262
00:14:22.519 --> 00:14:27.039
<v Speaker 2>killed it. Soap was an attempt to somehow continue to

263
00:14:27.120 --> 00:14:30.879
<v Speaker 2>do RPC despite the Web, and we can talk about

264
00:14:30.919 --> 00:14:33.559
<v Speaker 2>why the web killed RPC for a while at least,

265
00:14:34.279 --> 00:14:37.240
<v Speaker 2>and now it's making a comeback in a much more

266
00:14:37.360 --> 00:14:40.600
<v Speaker 2>natural way, which is in a lot of ways very

267
00:14:40.639 --> 00:14:45.159
<v Speaker 2>reminiscent of how it was in the nineties, but compatible

268
00:14:45.279 --> 00:14:48.200
<v Speaker 2>with the modern technologies that we use nowadays.

269
00:14:48.440 --> 00:14:51.600
<v Speaker 4>Right, Yeah, yeah, I mean that sounds about right, Like

270
00:14:51.679 --> 00:14:55.039
<v Speaker 4>no one was touching RPC after that early mid two

271
00:14:55.080 --> 00:14:58.840
<v Speaker 4>thousands period until maybe like twenty twenty.

272
00:14:58.919 --> 00:15:03.720
<v Speaker 1>Is they're like in the web technology, But.

273
00:15:03.960 --> 00:15:09.039
<v Speaker 4>I mean yes, obviously, when we start designing these surver

274
00:15:09.080 --> 00:15:14.080
<v Speaker 4>rendered meta frameworks where we actually have the server and

275
00:15:14.120 --> 00:15:18.240
<v Speaker 4>the client being developed in the same place, you start

276
00:15:18.360 --> 00:15:21.080
<v Speaker 4>going like, well, if I control both sides, why not

277
00:15:21.159 --> 00:15:22.600
<v Speaker 4>like make that pipe easier.

278
00:15:23.039 --> 00:15:24.840
<v Speaker 1>But I mean that was the motivation.

279
00:15:24.960 --> 00:15:28.080
<v Speaker 4>The thing for me personally when I started looking at

280
00:15:28.080 --> 00:15:31.039
<v Speaker 4>this stuff was I wasn't I was aware of this

281
00:15:31.159 --> 00:15:34.039
<v Speaker 4>the soap stuff you know and that, But I was

282
00:15:34.080 --> 00:15:36.679
<v Speaker 4>just trying to like I was looking at other meta frameworks,

283
00:15:36.840 --> 00:15:38.759
<v Speaker 4>was this is the beginning of all start Like twenty

284
00:15:38.799 --> 00:15:41.159
<v Speaker 4>twenty one is actually before I even really sold at

285
00:15:41.200 --> 00:15:42.799
<v Speaker 4>one point zero, And I was like looking at other

286
00:15:42.840 --> 00:15:45.879
<v Speaker 4>meta frameworks a bit, and I was looking like next

287
00:15:45.960 --> 00:15:50.879
<v Speaker 4>JS and and mostly and like you know sapper from

288
00:15:51.200 --> 00:15:55.720
<v Speaker 4>and like next and they all had these like API

289
00:15:55.919 --> 00:15:58.000
<v Speaker 4>end points, like like where you'd like do this file

290
00:15:58.279 --> 00:16:03.639
<v Speaker 4>based routing system with apien points. And the thing that

291
00:16:03.679 --> 00:16:04.919
<v Speaker 4>was weird for me is I used to be a

292
00:16:05.000 --> 00:16:07.759
<v Speaker 4>real guy for a bit, so like you would define

293
00:16:07.799 --> 00:16:11.360
<v Speaker 4>like like in the file system, you'd define I guess

294
00:16:11.360 --> 00:16:13.120
<v Speaker 4>not a file system was an auto madeive.

295
00:16:12.879 --> 00:16:13.639
<v Speaker 1>Filesism, but whatever.

296
00:16:13.679 --> 00:16:17.519
<v Speaker 4>You you skelton out these like models essentially and API

297
00:16:17.600 --> 00:16:20.279
<v Speaker 4>n points and they would describe the whole collection of

298
00:16:20.320 --> 00:16:24.080
<v Speaker 4>the whole model of things, and the filesystem approached a

299
00:16:24.080 --> 00:16:26.600
<v Speaker 4>lot of these APIs had taken was kind of it

300
00:16:26.600 --> 00:16:30.120
<v Speaker 4>felt weird to me because you'd have like a different

301
00:16:30.159 --> 00:16:35.120
<v Speaker 4>file for like the general like groups versus like group

302
00:16:35.159 --> 00:16:37.279
<v Speaker 4>I D like you didn't put all the crowd commands

303
00:16:37.320 --> 00:16:41.120
<v Speaker 4>together like it would like separate based on the URL path,

304
00:16:41.200 --> 00:16:45.039
<v Speaker 4>not based on the conceptual model, if that makes any sense,

305
00:16:45.039 --> 00:16:47.480
<v Speaker 4>Like instead of being talking about groups as a single thing,

306
00:16:47.600 --> 00:16:50.559
<v Speaker 4>you would have like groups and groups slash.

307
00:16:50.600 --> 00:16:52.639
<v Speaker 1>I d like it's a funny thing.

308
00:16:53.000 --> 00:16:54.960
<v Speaker 4>But I was looking at these API shapes and I

309
00:16:55.000 --> 00:16:56.799
<v Speaker 4>was like, this is such a hassle to like every

310
00:16:56.840 --> 00:16:59.080
<v Speaker 4>time I do this to build out these files.

311
00:17:01.600 --> 00:17:03.919
<v Speaker 1>I saw Remix. I think this was for me.

312
00:17:04.680 --> 00:17:07.680
<v Speaker 4>They did their big reveal in spring twenty twenty one,

313
00:17:07.720 --> 00:17:10.960
<v Speaker 4>and I know this, and when I saw their loaders

314
00:17:11.039 --> 00:17:13.079
<v Speaker 4>and actions and the way that they doubled it up

315
00:17:13.079 --> 00:17:15.200
<v Speaker 4>on the API side, I'm like, this is kind of nice.

316
00:17:15.559 --> 00:17:19.599
<v Speaker 4>It's like turned into a single approach, because what was

317
00:17:19.680 --> 00:17:22.039
<v Speaker 4>kind of awkward was that people would build their app

318
00:17:22.039 --> 00:17:23.960
<v Speaker 4>in one folder and then they'd build their API and

319
00:17:24.000 --> 00:17:26.200
<v Speaker 4>another folder, and it was getting kind of clunky. You

320
00:17:26.359 --> 00:17:28.839
<v Speaker 4>do everything twice, kind of connecting it up. And they

321
00:17:28.920 --> 00:17:30.480
<v Speaker 4>were like, no, you can just kind of stick it

322
00:17:30.519 --> 00:17:32.799
<v Speaker 4>all in the same place, follow the same kind of pattern.

323
00:17:33.440 --> 00:17:35.799
<v Speaker 4>The challenge I had Remix is because I've been working

324
00:17:35.799 --> 00:17:39.880
<v Speaker 4>on routing for a while and nested routing and with

325
00:17:40.000 --> 00:17:43.279
<v Speaker 4>you know, parallel data fetching and all these things. Is

326
00:17:43.680 --> 00:17:47.519
<v Speaker 4>the remix loader basically said that this part of the

327
00:17:47.599 --> 00:17:51.880
<v Speaker 4>UL loads this data, and that wasn't granular enough for me.

328
00:17:51.960 --> 00:17:54.039
<v Speaker 4>I was working a solid gazz which is based on singles.

329
00:17:54.039 --> 00:17:57.519
<v Speaker 4>So as you can imagine, there's multiple different data sources.

330
00:17:57.519 --> 00:17:59.839
<v Speaker 4>You want them to update independently, right, you want to

331
00:17:59.839 --> 00:18:03.039
<v Speaker 4>be to refresh them independently. You only want to update

332
00:18:03.079 --> 00:18:05.279
<v Speaker 4>certain parts of the page. Treating the whole page like

333
00:18:05.319 --> 00:18:09.680
<v Speaker 4>it was like a single data flow was not particularly

334
00:18:10.279 --> 00:18:12.920
<v Speaker 4>nice for me. So I was like, okay, can I

335
00:18:12.960 --> 00:18:16.759
<v Speaker 4>take my kind of like route loaders, which are they're

336
00:18:16.799 --> 00:18:19.319
<v Speaker 4>not really loaders, they're isomorphic. They run on both sides,

337
00:18:19.680 --> 00:18:23.440
<v Speaker 4>these kind of nested rout kind of areas where you

338
00:18:23.440 --> 00:18:26.359
<v Speaker 4>can fetch data and instead of you know, hitting API

339
00:18:26.440 --> 00:18:28.759
<v Speaker 4>calls like we used to, instead of using one single loader,

340
00:18:28.960 --> 00:18:32.480
<v Speaker 4>can we make it more ergonomic to define individual pieces

341
00:18:32.480 --> 00:18:35.759
<v Speaker 4>of data you can fetch. And I was looking when

342
00:18:35.759 --> 00:18:37.200
<v Speaker 4>I was doing the client side, and I'm like, I

343
00:18:37.240 --> 00:18:39.920
<v Speaker 4>love this. You know I can put you know, you know,

344
00:18:40.119 --> 00:18:42.079
<v Speaker 4>solid query. This is like a ten I rack in

345
00:18:42.119 --> 00:18:44.079
<v Speaker 4>the conversation for a second, but like I can put

346
00:18:44.279 --> 00:18:47.519
<v Speaker 4>like my different data fetching things inside this loading and

347
00:18:47.559 --> 00:18:49.799
<v Speaker 4>I can manage them separately. If I'm on this page,

348
00:18:49.880 --> 00:18:53.000
<v Speaker 4>can I can grab users and their posts and have

349
00:18:53.079 --> 00:18:57.519
<v Speaker 4>multiple things and call them and invalidate them separately. And

350
00:18:57.559 --> 00:19:00.160
<v Speaker 4>I'm like, this is a great pattern. It works on

351
00:19:00.160 --> 00:19:03.200
<v Speaker 4>the server, works on the client. The only problem is

352
00:19:03.400 --> 00:19:06.240
<v Speaker 4>you have to call these extra API in points. So

353
00:19:07.079 --> 00:19:10.319
<v Speaker 4>I started working on a solution, which was, what if

354
00:19:10.359 --> 00:19:13.079
<v Speaker 4>I could use the file system in a nicer way,

355
00:19:13.200 --> 00:19:15.599
<v Speaker 4>like better than the API in points, where instead of

356
00:19:15.799 --> 00:19:18.400
<v Speaker 4>being quite as bulky and like having these URLs, I

357
00:19:18.400 --> 00:19:21.240
<v Speaker 4>could use like a proxy or something like where you

358
00:19:21.279 --> 00:19:24.359
<v Speaker 4>could maybe make some types for an object, and based

359
00:19:24.400 --> 00:19:26.519
<v Speaker 4>on what path you go through the object, it would

360
00:19:26.559 --> 00:19:28.960
<v Speaker 4>construct the URL on the client and then know what

361
00:19:29.079 --> 00:19:32.039
<v Speaker 4>endpoint to hit on the server. And I kind of

362
00:19:32.079 --> 00:19:35.200
<v Speaker 4>put this together and I call them actions after remixes actions.

363
00:19:35.240 --> 00:19:39.079
<v Speaker 4>And the difference is they weren't really exactly actions, or

364
00:19:39.119 --> 00:19:41.000
<v Speaker 4>they were both actions and loaders. You could basically hit

365
00:19:41.000 --> 00:19:43.640
<v Speaker 4>these URLs both on data fetching and on mutation, and

366
00:19:43.680 --> 00:19:47.559
<v Speaker 4>you could call them They're just like autogeneratid APIs. And

367
00:19:48.119 --> 00:19:50.799
<v Speaker 4>I remember I put that out around April. I made

368
00:19:50.839 --> 00:19:53.759
<v Speaker 4>some demos around April twenty twenty one, but then Solid

369
00:19:53.799 --> 00:19:55.279
<v Speaker 4>one point zero needed to get released, and I put

370
00:19:55.279 --> 00:19:59.559
<v Speaker 4>it aside, and I basically was like showing people and

371
00:19:59.799 --> 00:20:01.920
<v Speaker 4>talk like how cool this was going to be, but

372
00:20:02.319 --> 00:20:04.240
<v Speaker 4>you know, people just like, oh, yeah, yeah, whatever, Ryan,

373
00:20:04.440 --> 00:20:07.720
<v Speaker 4>and and then and then it was almost a year later.

374
00:20:08.200 --> 00:20:10.759
<v Speaker 2>It could be fair half of us don't know, don't

375
00:20:11.400 --> 00:20:13.680
<v Speaker 2>often don't understand what you're talking about, so.

376
00:20:13.640 --> 00:20:17.079
<v Speaker 1>That that's that's perfectly fair. But some people did.

377
00:20:17.119 --> 00:20:20.480
<v Speaker 4>And I was talking to someone in December or like

378
00:20:20.480 --> 00:20:22.680
<v Speaker 4>around Christmas time, and they're like, oh, isn't that what

379
00:20:22.720 --> 00:20:26.920
<v Speaker 4>blitz JS is. I'm like, Blitz, isn't that next JSS thing?

380
00:20:27.400 --> 00:20:29.440
<v Speaker 4>And I look at it, and sure enough, that is

381
00:20:29.559 --> 00:20:33.400
<v Speaker 4>actually what blitz was. I basically independently also came up

382
00:20:33.440 --> 00:20:34.960
<v Speaker 4>something similar to what Blitz was.

383
00:20:34.920 --> 00:20:37.440
<v Speaker 2>Which is blitz what is it?

384
00:20:37.440 --> 00:20:37.720
<v Speaker 3>It was?

385
00:20:37.799 --> 00:20:40.799
<v Speaker 4>It was it was kind of like a meta framework

386
00:20:40.839 --> 00:20:43.960
<v Speaker 4>on top of Next. I thought it was like Redwood,

387
00:20:44.039 --> 00:20:46.119
<v Speaker 4>like it was one of those more opinionated meta frameworks

388
00:20:46.160 --> 00:20:49.200
<v Speaker 4>on top of Next. But eventually they just became like

389
00:20:49.240 --> 00:20:53.079
<v Speaker 4>a Next plug in and kind of downscaled it because

390
00:20:53.119 --> 00:20:54.799
<v Speaker 4>but originally it was like a separate product, like you

391
00:20:54.880 --> 00:20:58.839
<v Speaker 4>when installed Next, you install Blitz, and it was it

392
00:20:58.880 --> 00:21:02.200
<v Speaker 4>was a React meta frame essentially. But it's cool feature

393
00:21:02.319 --> 00:21:06.759
<v Speaker 4>was that it had these basically kind of generated API

394
00:21:07.039 --> 00:21:09.839
<v Speaker 4>functions in the same kind of way that I was describing,

395
00:21:10.799 --> 00:21:16.279
<v Speaker 4>where you could just kind of put these basically API

396
00:21:16.359 --> 00:21:18.720
<v Speaker 4>call things in a file folder structure and then call

397
00:21:18.759 --> 00:21:21.519
<v Speaker 4>them directly without like the fetch and the ceremony around

398
00:21:21.559 --> 00:21:23.720
<v Speaker 4>like that. You could just call them basically it's functions

399
00:21:23.839 --> 00:21:26.880
<v Speaker 4>via like a proxy like I was talking about, because

400
00:21:27.359 --> 00:21:30.279
<v Speaker 4>the cool thing that the proxy approaches you can have

401
00:21:30.279 --> 00:21:32.519
<v Speaker 4>the proxy return whatever you want, so it just wraps

402
00:21:32.559 --> 00:21:35.720
<v Speaker 4>the details of the fetch away from you. So it

403
00:21:35.799 --> 00:21:37.799
<v Speaker 4>is kind of the beginning of this RPC thing because

404
00:21:37.799 --> 00:21:40.160
<v Speaker 4>you still have the API point where you have a

405
00:21:40.160 --> 00:21:43.559
<v Speaker 4>file system running telling you like basically where these functions are.

406
00:21:43.640 --> 00:21:45.559
<v Speaker 4>But then you could use the path on the proxy

407
00:21:45.680 --> 00:21:49.559
<v Speaker 4>like get users dot get or like whatever to actually

408
00:21:49.559 --> 00:21:53.359
<v Speaker 4>construct the URL and obscure the fetching. And I know

409
00:21:53.400 --> 00:21:55.680
<v Speaker 4>this is kind of crazy history, but you know, like

410
00:21:56.000 --> 00:21:57.799
<v Speaker 4>beyond where we ended up, but it was important for

411
00:21:57.839 --> 00:21:59.039
<v Speaker 4>me to get there because when I went back to

412
00:21:59.039 --> 00:22:01.480
<v Speaker 4>solid Start and after playing with this again, by this

413
00:22:01.559 --> 00:22:04.559
<v Speaker 4>time I had met Nikhil Sarah, who was kind of

414
00:22:04.799 --> 00:22:08.880
<v Speaker 4>responsible for a lot of stuff in solid ecosystem. He

415
00:22:09.119 --> 00:22:11.240
<v Speaker 4>did a lot of the heavy lifting on the original

416
00:22:11.240 --> 00:22:15.519
<v Speaker 4>salt Start release, and he also created Vinci, which we

417
00:22:15.680 --> 00:22:18.160
<v Speaker 4>used to actually base salts Start and tasks Start initially.

418
00:22:18.519 --> 00:22:21.599
<v Speaker 4>And he was like, man, veat is amazing. We don't

419
00:22:21.599 --> 00:22:23.640
<v Speaker 4>need to use all this proxy stuff. We can just

420
00:22:23.839 --> 00:22:27.480
<v Speaker 4>use a compiler and split these things out, like even

421
00:22:27.519 --> 00:22:29.559
<v Speaker 4>in the middle of the files, like it doesn't matter.

422
00:22:29.559 --> 00:22:32.440
<v Speaker 4>He started doing crazy stuff where he was analyzing like

423
00:22:33.400 --> 00:22:36.279
<v Speaker 4>things further down the tree and hoisting them automatically and

424
00:22:36.279 --> 00:22:38.799
<v Speaker 4>doing like all this stuff. And I'm like, this is crazy.

425
00:22:38.880 --> 00:22:43.240
<v Speaker 4>I can't even wrap my head around what's happening. But

426
00:22:43.519 --> 00:22:45.240
<v Speaker 4>he's like, look, as long as we have a symbol,

427
00:22:45.400 --> 00:22:47.079
<v Speaker 4>like some way of it's saying like this is a

428
00:22:47.839 --> 00:22:50.240
<v Speaker 4>is a function call, we don't need to use the

429
00:22:50.240 --> 00:22:52.279
<v Speaker 4>file system. We can just go like this is a

430
00:22:52.359 --> 00:22:55.799
<v Speaker 4>server function or whatever, and we passed the function to it,

431
00:22:56.119 --> 00:22:59.920
<v Speaker 4>and now that function will always be called on the server.

432
00:23:00.759 --> 00:23:03.240
<v Speaker 2>This is where you guys invented bling. I think you

433
00:23:03.359 --> 00:23:04.720
<v Speaker 2>called it back then, right.

434
00:23:04.680 --> 00:23:06.680
<v Speaker 1>Yes, almost.

435
00:23:06.799 --> 00:23:10.079
<v Speaker 4>Bling would come very soon soon when we brought Tanner in.

436
00:23:10.119 --> 00:23:15.240
<v Speaker 4>On Tanner, what this I actually presented our original version

437
00:23:15.519 --> 00:23:18.640
<v Speaker 4>like this at vcomp the first b COMP back in

438
00:23:19.000 --> 00:23:22.279
<v Speaker 4>September twenty twenty two, and that's when people were like, oh,

439
00:23:22.480 --> 00:23:24.119
<v Speaker 4>this is actually kind of cool, you know, because it

440
00:23:24.200 --> 00:23:26.920
<v Speaker 4>had types like when you start having functions and you

441
00:23:26.920 --> 00:23:28.839
<v Speaker 4>can write them like functions where you can just import

442
00:23:28.880 --> 00:23:31.240
<v Speaker 4>them the types match up.

443
00:23:32.000 --> 00:23:35.559
<v Speaker 2>Yeah, And I'll get to that because it brings an

444
00:23:35.599 --> 00:23:40.440
<v Speaker 2>interesting point from my perspective about why RPC is so

445
00:23:40.519 --> 00:23:44.880
<v Speaker 2>attractive and what changed, because we talked about how the

446
00:23:44.920 --> 00:23:47.839
<v Speaker 2>web kind of killed RPC, so it's interesting to talk

447
00:23:47.880 --> 00:23:51.039
<v Speaker 2>about how RPC was able to make this kind of comeback.

448
00:23:51.319 --> 00:23:53.640
<v Speaker 2>But before we go there, Tanner, I really want to

449
00:23:53.640 --> 00:23:55.519
<v Speaker 2>bring you into the conversation finally.

450
00:23:56.079 --> 00:23:59.400
<v Speaker 4>So I mean, it is basically almost at that point

451
00:23:59.440 --> 00:24:04.079
<v Speaker 4>because Tanner is really into types. So after I demoed

452
00:24:04.119 --> 00:24:06.559
<v Speaker 4>this stuff and the type stuff, what came out in

453
00:24:07.519 --> 00:24:09.279
<v Speaker 4>the world that we realized that, like, what's cool, You

454
00:24:09.319 --> 00:24:11.400
<v Speaker 4>can literally write the function as is. You don't you

455
00:24:11.440 --> 00:24:13.200
<v Speaker 4>know a lot of type things that graft you or whatever.

456
00:24:13.200 --> 00:24:15.640
<v Speaker 4>You'd have to write these schemas were this the types

457
00:24:15.880 --> 00:24:19.839
<v Speaker 4>inherent off the functions simply from importing them automatical transferred.

458
00:24:19.880 --> 00:24:21.240
<v Speaker 4>You didn't have to do anything you wouldn't be doing

459
00:24:21.319 --> 00:24:25.680
<v Speaker 4>usually for typing. So once once we uh basically realized that,

460
00:24:27.000 --> 00:24:31.240
<v Speaker 4>uh you know, uh, I started kind of publishing it

461
00:24:31.279 --> 00:24:34.720
<v Speaker 4>out there and talking to other people. I was like, man,

462
00:24:35.279 --> 00:24:37.599
<v Speaker 4>I still couldn't get over how magical it felt. And

463
00:24:37.640 --> 00:24:39.599
<v Speaker 4>then I looked over it Quick and I was like,

464
00:24:40.000 --> 00:24:42.039
<v Speaker 4>maybe we just need a better symbol. So I was like,

465
00:24:42.160 --> 00:24:44.720
<v Speaker 4>let's add a dollar sign on it. And I actually

466
00:24:44.759 --> 00:24:46.720
<v Speaker 4>told the Quick guys like they didn't know I did this,

467
00:24:46.759 --> 00:24:50.039
<v Speaker 4>and I was like, I was tarting to manual In

468
00:24:50.519 --> 00:24:52.599
<v Speaker 4>at a conference in that fall, and I was like, man,

469
00:24:53.119 --> 00:24:55.400
<v Speaker 4>I think Quick could add this. I honestly stole your

470
00:24:55.400 --> 00:24:58.240
<v Speaker 4>guys's dollar sign just because it's like a good indicator.

471
00:24:58.279 --> 00:25:00.279
<v Speaker 1>And I'm like, we can just like you. It's just

472
00:25:00.319 --> 00:25:01.480
<v Speaker 1>the reverse of what Quick does.

473
00:25:01.559 --> 00:25:03.559
<v Speaker 4>Quick it was really good at pulling out these little

474
00:25:03.559 --> 00:25:06.279
<v Speaker 4>pieces on the client. This is like pulling out these

475
00:25:06.279 --> 00:25:08.720
<v Speaker 4>little pieces for the server. It's just like inverse Quick

476
00:25:08.759 --> 00:25:12.200
<v Speaker 4>and they added it to their meta framework within a

477
00:25:12.200 --> 00:25:14.640
<v Speaker 4>month after that conversation, like they were just like, yeah,

478
00:25:14.640 --> 00:25:17.279
<v Speaker 4>we already have everything here, and they did it almost immediately.

479
00:25:17.519 --> 00:25:21.359
<v Speaker 4>And as said, that's when tanner Gun involved around that point. Oh,

480
00:25:21.400 --> 00:25:23.440
<v Speaker 4>actually it might have been even a little bit later,

481
00:25:23.640 --> 00:25:27.240
<v Speaker 4>is around when next Uh and React they were like

482
00:25:27.640 --> 00:25:30.160
<v Speaker 4>saw this stuff too, and they're like, oh, and they

483
00:25:30.200 --> 00:25:33.279
<v Speaker 4>came up with like use server, but it was specific

484
00:25:33.279 --> 00:25:38.440
<v Speaker 4>for their for their rpcs, for their server function communication.

485
00:25:38.039 --> 00:25:41.039
<v Speaker 2>Their Initially they actually had it in the fine names

486
00:25:41.039 --> 00:25:44.880
<v Speaker 2>if you recall the dot server dot ts and dot

487
00:25:44.920 --> 00:25:45.839
<v Speaker 2>client dot t s.

488
00:25:46.319 --> 00:25:48.480
<v Speaker 3>That was that was the catalyst for me right there.

489
00:25:48.640 --> 00:25:50.359
<v Speaker 4>Yeah, I mean there there was there was like a

490
00:25:50.400 --> 00:25:56.920
<v Speaker 4>subtle different like put it because technically server functions start

491
00:25:56.960 --> 00:26:00.240
<v Speaker 4>on the server and there's like a naming convention where

492
00:26:00.240 --> 00:26:02.079
<v Speaker 4>they're like, okay, these are server, these are client, and

493
00:26:02.119 --> 00:26:06.279
<v Speaker 4>these are shared. But then like it's a different scenario

494
00:26:06.359 --> 00:26:08.599
<v Speaker 4>because the server stuff can be done all in a

495
00:26:08.640 --> 00:26:11.759
<v Speaker 4>single pass, like in a single go. They when they

496
00:26:11.799 --> 00:26:14.680
<v Speaker 4>originally came up with that, that was to denote server functions,

497
00:26:14.720 --> 00:26:19.599
<v Speaker 4>but not sorry, server components, not necessarily server functions, right or.

498
00:26:19.480 --> 00:26:24.440
<v Speaker 2>Like they didn't have an aultation. Use client came as

499
00:26:24.480 --> 00:26:28.519
<v Speaker 2>an alternative to dot server and dot client my fine names.

500
00:26:28.799 --> 00:26:33.519
<v Speaker 2>They didn't have anything for you server, which came around.

501
00:26:33.240 --> 00:26:36.680
<v Speaker 4>Later, right exactly, So they started proposing this stuff and

502
00:26:37.000 --> 00:26:38.839
<v Speaker 4>I mean, yeah, Tenner can jump in at this point,

503
00:26:38.880 --> 00:26:40.839
<v Speaker 4>but I think he saw what they were doing and

504
00:26:40.839 --> 00:26:42.119
<v Speaker 4>it was just like, what the hell is this?

505
00:26:43.799 --> 00:26:46.200
<v Speaker 3>I didn't I mean, I thought it was neat. I

506
00:26:46.240 --> 00:26:49.240
<v Speaker 3>was more interested in, like what they were doing under

507
00:26:49.240 --> 00:26:52.359
<v Speaker 3>the hood with like the compilation, what was actually happening

508
00:26:52.440 --> 00:26:57.039
<v Speaker 3>to the build and transforming that the AST and whatnot.

509
00:26:57.160 --> 00:27:03.720
<v Speaker 3>But I did not really like the approach to like

510
00:27:04.599 --> 00:27:08.880
<v Speaker 3>use client use server at least for like RPC. I

511
00:27:08.920 --> 00:27:13.240
<v Speaker 3>looked at it and I was excited about like, oh,

512
00:27:13.359 --> 00:27:16.720
<v Speaker 3>I can just throw this token in there and all

513
00:27:16.720 --> 00:27:19.599
<v Speaker 3>of a sudden creat an RPC, and like that part's cool.

514
00:27:20.400 --> 00:27:23.839
<v Speaker 3>But then all these questions started bubbling up about like, Okay,

515
00:27:24.640 --> 00:27:30.000
<v Speaker 3>clearly they don't believe that like configuring and RPC is

516
00:27:30.039 --> 00:27:33.839
<v Speaker 3>as simple as a one string Like that's ridiculous.

517
00:27:33.960 --> 00:27:36.720
<v Speaker 2>So I want to touch that briefly again to give

518
00:27:37.240 --> 00:27:40.640
<v Speaker 2>a little bit of context to our listeners. So we

519
00:27:40.720 --> 00:27:45.119
<v Speaker 2>talked about the fact that RPC is about invoking a

520
00:27:45.240 --> 00:27:49.039
<v Speaker 2>function somewhere else as if it's a local fun a

521
00:27:49.079 --> 00:27:54.359
<v Speaker 2>local function, and specifically in the context of full stack frameworks,

522
00:27:54.720 --> 00:27:59.759
<v Speaker 2>it's basically invoking a server side function from client side

523
00:27:59.759 --> 00:28:03.160
<v Speaker 2>code using the function called paradigm. So it looks and

524
00:28:03.200 --> 00:28:05.640
<v Speaker 2>feels like a function. Now, in order to be able

525
00:28:05.720 --> 00:28:08.720
<v Speaker 2>to do that, you kind of need to have, from

526
00:28:08.759 --> 00:28:12.960
<v Speaker 2>my perspective, three things. First of all, you need to

527
00:28:13.000 --> 00:28:17.359
<v Speaker 2>have type safety. Otherwise what's the point and going back

528
00:28:17.400 --> 00:28:21.039
<v Speaker 2>to your or to your point, Ryan ab when disappeared,

529
00:28:21.079 --> 00:28:25.279
<v Speaker 2>Obviously it only came into being after Typescript really went mainstream,

530
00:28:25.400 --> 00:28:32.799
<v Speaker 2>because before Typescript, the whole typing thing was irrelevant. And

531
00:28:33.240 --> 00:28:37.279
<v Speaker 2>the other thing that you need is to be able

532
00:28:37.319 --> 00:28:41.400
<v Speaker 2>to simulate blocking you call to the remote function. You

533
00:28:41.440 --> 00:28:45.240
<v Speaker 2>want to have it to feel like a local function,

534
00:28:45.319 --> 00:28:49.720
<v Speaker 2>which means you don't get the execution back until that

535
00:28:49.759 --> 00:28:53.640
<v Speaker 2>remote function finishes and provides a value. And we only

536
00:28:53.680 --> 00:28:55.640
<v Speaker 2>got that after we got a sinkle weight.

537
00:28:56.240 --> 00:28:59.880
<v Speaker 4>Basically, yeah, yeah, I mean, I'm native support of promise is,

538
00:29:00.039 --> 00:29:03.359
<v Speaker 4>but more specific to this conversation, when framework started having

539
00:29:04.079 --> 00:29:05.839
<v Speaker 4>tools to do what they think, which secularly you know.

540
00:29:06.160 --> 00:29:10.119
<v Speaker 2>And which brings me back to the final point is ideally,

541
00:29:10.480 --> 00:29:14.599
<v Speaker 2>not necessarily, but ideally you also want what you mentioned

542
00:29:14.640 --> 00:29:20.079
<v Speaker 2>about vat, the ability to effectively instrument the code basically

543
00:29:20.279 --> 00:29:24.000
<v Speaker 2>write something that looks like a function call, identify that

544
00:29:24.079 --> 00:29:25.920
<v Speaker 2>this code is going to be running on the client,

545
00:29:26.240 --> 00:29:28.480
<v Speaker 2>this code is going to be running on the server

546
00:29:28.880 --> 00:29:32.799
<v Speaker 2>and generate all the magic code that makes this thing work. Basically,

547
00:29:32.839 --> 00:29:37.119
<v Speaker 2>it's it's a stub and on the client and on

548
00:29:37.160 --> 00:29:41.920
<v Speaker 2>the server that handles the whole networking layer underneath that

549
00:29:42.200 --> 00:29:42.960
<v Speaker 2>function call.

550
00:29:43.559 --> 00:29:45.440
<v Speaker 3>Now I'm mentioning that you don't.

551
00:29:45.359 --> 00:29:51.839
<v Speaker 2>Necessarily have to have it because types trpc does without it,

552
00:29:52.559 --> 00:29:58.799
<v Speaker 2>which makes it less magical and and also less fun. Potentially,

553
00:30:00.160 --> 00:30:03.599
<v Speaker 2>going back to I want to give Tanner, I basically

554
00:30:03.640 --> 00:30:08.039
<v Speaker 2>stole the mic from Tanner. So Tanner, you said that

555
00:30:08.319 --> 00:30:12.359
<v Speaker 2>you looked at that the fact that they introduced this

556
00:30:12.480 --> 00:30:15.119
<v Speaker 2>kind of magic string and all of a sudden it

557
00:30:15.319 --> 00:30:18.599
<v Speaker 2>kind of worked, and you had thoughts about.

558
00:30:18.359 --> 00:30:27.160
<v Speaker 3>That, Yeah, because like details matter eventually, details matter a lot.

559
00:30:27.480 --> 00:30:31.960
<v Speaker 3>Like I think what you see is like you you

560
00:30:32.119 --> 00:30:37.079
<v Speaker 3>write use server and a function, and that's that's really magical,

561
00:30:37.599 --> 00:30:40.400
<v Speaker 3>and it's it's magical both in a sense of like

562
00:30:40.880 --> 00:30:44.039
<v Speaker 3>it's doing a lot under the hood for you, but

563
00:30:44.119 --> 00:30:50.720
<v Speaker 3>it's also a magical experience for most like basic operations

564
00:30:50.799 --> 00:30:55.400
<v Speaker 3>or basic use cases. It's so simple, it's deceptively simple

565
00:30:55.519 --> 00:30:57.480
<v Speaker 3>that it's like, oh, that's all it takes, right, and

566
00:30:57.519 --> 00:31:00.720
<v Speaker 3>you just you put U server in there, But there's

567
00:31:00.799 --> 00:31:05.799
<v Speaker 3>so many details that bubble up that you cannot get

568
00:31:05.799 --> 00:31:10.319
<v Speaker 3>away from the fact that this is happening over the network.

569
00:31:10.759 --> 00:31:17.400
<v Speaker 3>There are implementation details there that matter sometimes and there

570
00:31:17.559 --> 00:31:27.039
<v Speaker 3>for example, yeah, caching protocol methods, header's authentication. There's there's

571
00:31:27.119 --> 00:31:31.839
<v Speaker 3>like edge case flexibility that needs to be inherently in

572
00:31:31.880 --> 00:31:34.599
<v Speaker 3>the system to allow you to do things that you

573
00:31:34.839 --> 00:31:38.079
<v Speaker 3>maybe don't do ninety percent of the time, but you

574
00:31:38.119 --> 00:31:42.079
<v Speaker 3>will need to do. One of the basic ones was

575
00:31:44.000 --> 00:31:48.640
<v Speaker 3>you server defaults to a post sorry not be defaults.

576
00:31:48.680 --> 00:31:53.400
<v Speaker 3>It is a post request in like next jays and

577
00:31:53.480 --> 00:31:56.359
<v Speaker 3>React reacts to kind of spec right.

578
00:31:56.519 --> 00:31:59.279
<v Speaker 2>You also don't have any control, like you said, either

579
00:31:59.359 --> 00:32:01.559
<v Speaker 2>over the end point all the protocol.

580
00:32:01.440 --> 00:32:05.240
<v Speaker 3>No or headers or anything like that. You're you can

581
00:32:05.839 --> 00:32:08.119
<v Speaker 3>kind of get it some of the implementation, but only

582
00:32:08.200 --> 00:32:11.480
<v Speaker 3>at like a global place. But if you wanted to

583
00:32:11.519 --> 00:32:14.559
<v Speaker 3>customize any of that other stuff, you can't really do that,

584
00:32:14.759 --> 00:32:16.759
<v Speaker 3>and you have to break out of the system entirely.

585
00:32:17.440 --> 00:32:21.119
<v Speaker 3>And I didn't like that because immediately I was like, well,

586
00:32:21.160 --> 00:32:24.640
<v Speaker 3>I want to use this with reac query, and that's

587
00:32:24.640 --> 00:32:27.720
<v Speaker 3>great for cashing, But wouldn't it be great if if

588
00:32:27.759 --> 00:32:31.319
<v Speaker 3>the browser could actually just cash this get request that

589
00:32:31.359 --> 00:32:35.119
<v Speaker 3>I'm making, it's totally capable of doing that. And then

590
00:32:35.119 --> 00:32:39.160
<v Speaker 3>there's questions of well, how is that URL formulated in

591
00:32:39.200 --> 00:32:42.039
<v Speaker 3>a way that's going to be stable for the browser

592
00:32:42.039 --> 00:32:44.720
<v Speaker 3>to cash, And there's lots of questions that came up

593
00:32:44.720 --> 00:32:47.640
<v Speaker 3>for me around that, and I just knew at one

594
00:32:47.720 --> 00:32:51.480
<v Speaker 3>point we're going to need to like ninety percent of

595
00:32:51.519 --> 00:32:54.920
<v Speaker 3>the time same experience as just use server. Just create

596
00:32:54.960 --> 00:32:57.039
<v Speaker 3>a function, give it some kind of a symbol, a

597
00:32:57.119 --> 00:33:00.759
<v Speaker 3>dollar sign or something that would make it easy for

598
00:33:01.039 --> 00:33:04.200
<v Speaker 3>a bulk of the use cases, and then have at

599
00:33:04.319 --> 00:33:08.880
<v Speaker 3>least the ability or the option to expand and and

600
00:33:09.119 --> 00:33:13.599
<v Speaker 3>make that configuration advanced. I just don't understand when people

601
00:33:13.680 --> 00:33:18.480
<v Speaker 3>create APIs that cannot be ripped away easily or like

602
00:33:18.559 --> 00:33:22.119
<v Speaker 3>dug into easily. I don't understand it. And these directives

603
00:33:22.160 --> 00:33:25.839
<v Speaker 3>of use server or use cash or whatever are like

604
00:33:25.960 --> 00:33:28.160
<v Speaker 3>the biggest offenders of that principle for me.

605
00:33:28.839 --> 00:33:34.000
<v Speaker 4>So it's it's funny because as you get guys may

606
00:33:34.039 --> 00:33:36.680
<v Speaker 4>not know actually I started with server functions, solid uses

607
00:33:36.759 --> 00:33:42.200
<v Speaker 4>use server today because compatibility with react or like conceptually

608
00:33:42.480 --> 00:33:44.759
<v Speaker 4>there yes, wrapper functions are.

609
00:33:45.559 --> 00:33:49.039
<v Speaker 3>By the way, like intense sex start you can write

610
00:33:49.160 --> 00:33:52.200
<v Speaker 3>use server ye and you'll get the same experience.

611
00:33:52.279 --> 00:33:56.519
<v Speaker 4>But it's yeah, like rapper functions are as tenders that

612
00:33:56.559 --> 00:34:01.480
<v Speaker 4>are almost necessary for configuration. And that's like positively at

613
00:34:01.519 --> 00:34:07.039
<v Speaker 4>least is that because this configuration comes from the client,

614
00:34:07.359 --> 00:34:09.840
<v Speaker 4>wrapping is definitely something you can do, Like you can

615
00:34:10.239 --> 00:34:13.280
<v Speaker 4>compose these kind of pieces on top of server functions

616
00:34:13.320 --> 00:34:17.679
<v Speaker 4>because the server parts on the server, the use server,

617
00:34:17.840 --> 00:34:21.800
<v Speaker 4>the server offs and represents the split between the like

618
00:34:21.880 --> 00:34:23.440
<v Speaker 4>this goes on server, this goes in the client.

619
00:34:23.559 --> 00:34:25.000
<v Speaker 3>So it's basically.

620
00:34:26.880 --> 00:34:29.239
<v Speaker 2>One of the things that kind of enabled I'll give

621
00:34:29.239 --> 00:34:31.840
<v Speaker 2>you in a second just mentioning that one of the

622
00:34:31.880 --> 00:34:34.960
<v Speaker 2>things that enabled this whole thing is like you mentioned

623
00:34:34.960 --> 00:34:38.760
<v Speaker 2>when we talked about VAT, is that smart bundler that's

624
00:34:39.079 --> 00:34:42.519
<v Speaker 2>that's analyzing the code in any event, sees it and

625
00:34:42.559 --> 00:34:45.519
<v Speaker 2>then knows to generate different code for the server and

626
00:34:45.639 --> 00:34:48.440
<v Speaker 2>different code for the client from the same source code. Right,

627
00:34:49.039 --> 00:34:50.360
<v Speaker 2>That's the sweet magic.

628
00:34:50.800 --> 00:34:53.119
<v Speaker 4>We should talk about beat here for a little bit more,

629
00:34:53.239 --> 00:34:57.519
<v Speaker 4>because the thing is at this point Tenner and I

630
00:34:57.599 --> 00:35:00.679
<v Speaker 4>are talking the keel and we're like every framework could

631
00:35:00.760 --> 00:35:00.920
<v Speaker 4>use this.

632
00:35:00.960 --> 00:35:01.840
<v Speaker 1>Why just use this.

633
00:35:01.800 --> 00:35:05.239
<v Speaker 4>Only in solid Why have you know, you know, quick

634
00:35:05.320 --> 00:35:08.760
<v Speaker 4>make their own version. Why have next make their own version?

635
00:35:10.000 --> 00:35:14.360
<v Speaker 4>And Antenner was like, okay, let's let's like just make

636
00:35:14.400 --> 00:35:16.679
<v Speaker 4>a generic plugin for this, right, So that's where Blain

637
00:35:16.800 --> 00:35:19.760
<v Speaker 4>came about. When it was like Kennedy, he picked it

638
00:35:19.800 --> 00:35:22.440
<v Speaker 4>up and he was like, let's let's make this generic.

639
00:35:22.480 --> 00:35:23.880
<v Speaker 1>The thing that is.

640
00:35:23.840 --> 00:35:28.239
<v Speaker 4>Bling didn't quite survive in the same form because what

641
00:35:28.280 --> 00:35:32.039
<v Speaker 4>we realized was Blain was basically like a was it

642
00:35:32.079 --> 00:35:34.440
<v Speaker 4>a Babel plug in. It was basically a transform. It

643
00:35:34.519 --> 00:35:41.559
<v Speaker 4>basically transformed a code without bundler awareness, which does work

644
00:35:42.559 --> 00:35:45.159
<v Speaker 4>a lot in this in the simple cases, but it

645
00:35:45.199 --> 00:35:49.159
<v Speaker 4>doesn't work in the more complicate cases, mainly that if

646
00:35:50.159 --> 00:35:52.320
<v Speaker 4>how do you register these endpoints?

647
00:35:53.039 --> 00:35:53.239
<v Speaker 3>Right?

648
00:35:53.480 --> 00:35:56.880
<v Speaker 4>Real apps have code splitting, so you might not load

649
00:35:56.920 --> 00:35:58.960
<v Speaker 4>all the code in the client, or you might not

650
00:35:59.000 --> 00:36:02.000
<v Speaker 4>load all the code on the server. And what ended

651
00:36:02.079 --> 00:36:05.840
<v Speaker 4>up happening with the just doing a compiler approach was

652
00:36:06.000 --> 00:36:09.159
<v Speaker 4>that we would sometimes navigate to a page on the

653
00:36:09.159 --> 00:36:13.119
<v Speaker 4>client that hadn't been navigated to on the server, which

654
00:36:13.199 --> 00:36:15.800
<v Speaker 4>means the endpoint wouldn't be registered yet.

655
00:36:15.639 --> 00:36:18.199
<v Speaker 3>It didn't exist yet, so it didn't even occur to me.

656
00:36:18.920 --> 00:36:22.800
<v Speaker 4>So like basically, this generic approach, it wasn't enough just

657
00:36:22.800 --> 00:36:25.079
<v Speaker 4>to stop a babble and a compiler. We needed something

658
00:36:25.119 --> 00:36:28.239
<v Speaker 4>that would actually go through the whole module graph and

659
00:36:28.960 --> 00:36:33.199
<v Speaker 4>oist out these things, and it had to be bundler level.

660
00:36:33.320 --> 00:36:36.760
<v Speaker 4>So this is that's that's actually why Blaine died. In

661
00:36:36.760 --> 00:36:38.480
<v Speaker 4>a sense, Tannor has remade.

662
00:36:38.880 --> 00:36:42.880
<v Speaker 3>It was repurposed, right. Actually, what's funny is like a

663
00:36:42.880 --> 00:36:46.519
<v Speaker 3>lot of the code from Bling made it into VINI.

664
00:36:47.239 --> 00:36:50.159
<v Speaker 1>Yes, yeah, yeah, I mean at the VAT.

665
00:36:50.039 --> 00:36:52.920
<v Speaker 3>Level, right, And then what's funny is then eventually we

666
00:36:53.039 --> 00:36:54.400
<v Speaker 3>ripped it back out.

667
00:36:54.719 --> 00:36:56.679
<v Speaker 4>Right, and the other part of Vinci ended up going

668
00:36:56.679 --> 00:37:00.559
<v Speaker 4>directly to VAT when VEAT adopted the environment's API, because

669
00:37:00.599 --> 00:37:04.920
<v Speaker 4>we're building these things and the VAT team had, I

670
00:37:04.920 --> 00:37:07.239
<v Speaker 4>guess their own problem with deployment, like the solved with

671
00:37:07.239 --> 00:37:09.440
<v Speaker 4>the deployment environments, like you have cloud Flare, which is

672
00:37:09.440 --> 00:37:12.079
<v Speaker 4>different than Netlify and Bursell, and you could build for

673
00:37:12.199 --> 00:37:15.800
<v Speaker 4>like different outputs like workers versus pages and all these

674
00:37:15.840 --> 00:37:19.239
<v Speaker 4>things people wanted to have, like you know and client preserved.

675
00:37:19.400 --> 00:37:23.599
<v Speaker 4>They want to have these different environments. Vinci actually did

676
00:37:23.639 --> 00:37:26.440
<v Speaker 4>that because VAT didn't. It was hard to manage these

677
00:37:26.519 --> 00:37:30.920
<v Speaker 4>kind of things, and.

678
00:37:29.199 --> 00:37:31.000
<v Speaker 1>That's why we created it. And in the end.

679
00:37:31.400 --> 00:37:33.960
<v Speaker 4>As I said, VINCI now has kind of been dismantled,

680
00:37:34.320 --> 00:37:37.960
<v Speaker 4>but the environment API now exists in Beat very similar

681
00:37:38.199 --> 00:37:40.199
<v Speaker 4>seeing usage to how we used to do it in VINCI,

682
00:37:40.639 --> 00:37:45.559
<v Speaker 4>and we still have the server functions plug in in

683
00:37:45.599 --> 00:37:48.400
<v Speaker 4>the form of what what's under Tanstak that's now used

684
00:37:48.440 --> 00:37:51.039
<v Speaker 4>both by Soul, certain tank Tack start Tanner.

685
00:37:51.320 --> 00:37:55.280
<v Speaker 2>You're very polite. You raise your hand.

686
00:37:56.079 --> 00:37:59.760
<v Speaker 3>Oh, I was. I was gonna say. One of your

687
00:38:00.039 --> 00:38:02.559
<v Speaker 3>questions went unanswered, and I wanted to answer it before

688
00:38:02.599 --> 00:38:05.519
<v Speaker 3>we went too deep into compiler land. And it was

689
00:38:05.559 --> 00:38:10.360
<v Speaker 3>about type safety, and that is a massive part of

690
00:38:11.519 --> 00:38:16.159
<v Speaker 3>another massive reason of why it all went this direction

691
00:38:16.239 --> 00:38:21.880
<v Speaker 3>for me, and it's it's also because type safety. A

692
00:38:21.920 --> 00:38:24.599
<v Speaker 3>lot of people think, well, it's just defining, you know,

693
00:38:24.880 --> 00:38:29.920
<v Speaker 3>the types that this function can take on. But in

694
00:38:29.960 --> 00:38:34.360
<v Speaker 3>reality you're not just writing typescript types and expecting those

695
00:38:34.400 --> 00:38:39.760
<v Speaker 3>to get extracted away into validation. Because that's another that's

696
00:38:39.800 --> 00:38:42.960
<v Speaker 3>another part where like just sending, just treating it like

697
00:38:43.000 --> 00:38:47.920
<v Speaker 3>a function still is not totally safe. I mean, I

698
00:38:48.039 --> 00:38:49.840
<v Speaker 3>like it that we that we want to get to

699
00:38:49.880 --> 00:38:52.960
<v Speaker 3>this functional zintax of just calling the function and having

700
00:38:53.039 --> 00:38:57.000
<v Speaker 3>it be awaited, and it's it's really nice, but under

701
00:38:57.000 --> 00:38:59.480
<v Speaker 3>the hood, it's these details you need to be aware

702
00:38:59.519 --> 00:39:01.840
<v Speaker 3>of them, and one of them is that you're going

703
00:39:01.840 --> 00:39:06.320
<v Speaker 3>across the network. So type safety without validation is a

704
00:39:06.360 --> 00:39:11.320
<v Speaker 3>complete lie. You can validate anytime you go across a

705
00:39:11.440 --> 00:39:15.960
<v Speaker 3>serialization boundary, even into the URL or local storage, anywhere

706
00:39:16.400 --> 00:39:18.960
<v Speaker 3>you have to validate or it's just a lie.

707
00:39:19.440 --> 00:39:22.719
<v Speaker 2>So yeah, it's really I'll let you continue in a second.

708
00:39:22.719 --> 00:39:26.639
<v Speaker 2>I'm just clarifying again the terminology. It's that distinction between

709
00:39:27.119 --> 00:39:31.000
<v Speaker 2>dev time type safety, maybe even build time type safety

710
00:39:31.400 --> 00:39:33.800
<v Speaker 2>and run time type safety.

711
00:39:33.480 --> 00:39:39.000
<v Speaker 3>Static type checking versus actually run time validation.

712
00:39:38.960 --> 00:39:43.679
<v Speaker 2>And exactly in Typescript very intentionally does not do any

713
00:39:44.239 --> 00:39:47.199
<v Speaker 2>run type type checking. So the fact that you're building

714
00:39:47.400 --> 00:39:51.079
<v Speaker 2>on that you're leveraging Typescript types is really cool. You

715
00:39:51.119 --> 00:39:55.320
<v Speaker 2>get completion, you get squiggly lines during development, but at

716
00:39:55.400 --> 00:39:59.119
<v Speaker 2>runtime over the network, anything might be sent, especially if

717
00:39:59.159 --> 00:40:01.159
<v Speaker 2>it's like a public point.

718
00:40:00.880 --> 00:40:03.280
<v Speaker 3>Right and you know, you might feel like you're just

719
00:40:03.360 --> 00:40:07.239
<v Speaker 3>writing a function and it might feel secure, But no

720
00:40:07.280 --> 00:40:09.800
<v Speaker 3>one in their right mind would create a rest endpoint

721
00:40:10.280 --> 00:40:14.159
<v Speaker 3>straight into their back end and not validate the inputs

722
00:40:14.199 --> 00:40:18.719
<v Speaker 3>that they're getting from people. And so the same way here,

723
00:40:18.760 --> 00:40:21.840
<v Speaker 3>like you you want to be validating the inputs going

724
00:40:21.840 --> 00:40:26.960
<v Speaker 3>across these functions in a special way that isn't just oh,

725
00:40:27.039 --> 00:40:29.320
<v Speaker 3>it's a typescript type. So I'm just going to trust

726
00:40:29.360 --> 00:40:32.360
<v Speaker 3>that I'm the only one calling it and that my

727
00:40:32.480 --> 00:40:34.599
<v Speaker 3>system is the only one that has access to this

728
00:40:35.039 --> 00:40:39.239
<v Speaker 3>public RPC endpoint. Like all this stuff is easily reverse

729
00:40:39.320 --> 00:40:41.800
<v Speaker 3>engineered and abused.

730
00:40:42.119 --> 00:40:46.480
<v Speaker 2>It's even worse because when you're doing posts like straight

731
00:40:46.559 --> 00:40:51.360
<v Speaker 2>on RESTful APIs, you know that you know that you're

732
00:40:51.400 --> 00:40:53.400
<v Speaker 2>going to have to check the types. You're going to

733
00:40:53.480 --> 00:40:55.119
<v Speaker 2>have to effectively cast the types.

734
00:40:55.440 --> 00:40:59.519
<v Speaker 3>Yeah, because when you're losing the types perfectly going into

735
00:40:59.559 --> 00:41:03.199
<v Speaker 3>this exactly on transform mechanism and pulling them back out

736
00:41:03.280 --> 00:41:06.960
<v Speaker 3>on the server side, you know you you have to

737
00:41:06.960 --> 00:41:09.519
<v Speaker 3>do the same thing coming back out. Otherwise it's like, well,

738
00:41:09.519 --> 00:41:11.800
<v Speaker 3>this is just a blob of whatever, you know.

739
00:41:13.679 --> 00:41:17.039
<v Speaker 2>I think, yeah, and with and and I forget if

740
00:41:17.039 --> 00:41:20.519
<v Speaker 2>it was Rich Harris or Lirental who literally showed me

741
00:41:20.599 --> 00:41:25.079
<v Speaker 2>an example I think where they used typescript and instead

742
00:41:25.159 --> 00:41:29.360
<v Speaker 2>of a certain value pass vr PC being like saying

743
00:41:29.440 --> 00:41:32.360
<v Speaker 2>just a string, they said it needs to be like

744
00:41:33.679 --> 00:41:40.880
<v Speaker 2>the quote unquote quote child or quote teacher and nothing

745
00:41:40.920 --> 00:41:43.639
<v Speaker 2>at run time validates that some other string is not

746
00:41:43.760 --> 00:41:48.440
<v Speaker 2>passed in so you so typescript literally lies to you

747
00:41:48.519 --> 00:41:51.159
<v Speaker 2>in this case if you're not careful.

748
00:41:51.079 --> 00:41:54.159
<v Speaker 3>Which typescript needs to come after that, which is it

749
00:41:54.199 --> 00:41:58.920
<v Speaker 3>needs to be a byproduct. And that's exactly why we

750
00:41:58.920 --> 00:42:02.400
<v Speaker 3>we did two things. One we adopted Standard Schema. I mean,

751
00:42:02.440 --> 00:42:06.760
<v Speaker 3>we helped kind of push standard Schema into reality. It

752
00:42:06.800 --> 00:42:09.840
<v Speaker 3>was created by all the brilliant people that build these

753
00:42:09.920 --> 00:42:16.679
<v Speaker 3>validation libraries like yeah, like like ZOD and type, archetype

754
00:42:16.719 --> 00:42:19.840
<v Speaker 3>and stuff like that. But but we needed validation, so

755
00:42:19.880 --> 00:42:22.639
<v Speaker 3>we did validation first. And what's interesting is with with

756
00:42:22.719 --> 00:42:28.320
<v Speaker 3>our APIs to create our PCs, we do not allow you.

757
00:42:29.440 --> 00:42:31.119
<v Speaker 3>I mean, you can do anything you want, but I mean,

758
00:42:31.159 --> 00:42:35.159
<v Speaker 3>the the happy path of our API is that you

759
00:42:35.239 --> 00:42:39.719
<v Speaker 3>do not get types in your server functions in your

760
00:42:39.840 --> 00:42:45.119
<v Speaker 3>rpcs unless you provide validation that gives you those types.

761
00:42:45.559 --> 00:42:48.159
<v Speaker 3>If you try, like, we don't have a generic API

762
00:42:48.280 --> 00:42:53.440
<v Speaker 3>to just cast the the types coming back with just

763
00:42:53.519 --> 00:42:57.280
<v Speaker 3>typescript because we we think it's unsafe. So that is

764
00:42:57.320 --> 00:42:59.880
<v Speaker 3>the happy path. You have to use a ZOD schema

765
00:43:00.079 --> 00:43:04.400
<v Speaker 3>or an archetypes or whatever to to get that validation

766
00:43:04.719 --> 00:43:06.000
<v Speaker 3>and turn it into types.

767
00:43:06.800 --> 00:43:08.840
<v Speaker 1>It's funny how full circle this is going.

768
00:43:09.280 --> 00:43:11.480
<v Speaker 4>And this happens to me a lot, I have to admit,

769
00:43:11.519 --> 00:43:16.960
<v Speaker 4>because of the lookliness. Like the reason that RPC died

770
00:43:17.000 --> 00:43:20.280
<v Speaker 4>in the first place was because it was clunky to

771
00:43:21.440 --> 00:43:23.760
<v Speaker 4>in my opinion, there's many reasons, but part of it

772
00:43:23.840 --> 00:43:27.079
<v Speaker 4>was that it was clunky to define stuff. And like

773
00:43:27.280 --> 00:43:30.199
<v Speaker 4>it's a challenge like graft Tuel going away because you

774
00:43:30.199 --> 00:43:32.239
<v Speaker 4>know you're defining these like.

775
00:43:32.159 --> 00:43:33.079
<v Speaker 1>To define the types.

776
00:43:34.480 --> 00:43:38.599
<v Speaker 4>So people get these Jason APIs and then and the

777
00:43:38.760 --> 00:43:41.199
<v Speaker 4>people did the Jason on APIs and they like, you know,

778
00:43:41.559 --> 00:43:44.079
<v Speaker 4>manage themselves, but it wasn't schema basis through the code

779
00:43:44.079 --> 00:43:44.719
<v Speaker 4>at run time.

780
00:43:45.280 --> 00:43:47.400
<v Speaker 1>And then like but there's a lots of holes there.

781
00:43:47.519 --> 00:43:50.480
<v Speaker 4>So now people have reinforced on types, which obviously again

782
00:43:50.599 --> 00:43:53.000
<v Speaker 4>gets us back to RPC. But like, it's funny the

783
00:43:53.039 --> 00:43:55.159
<v Speaker 4>framework author's side, like let's say like deeper on the

784
00:43:55.239 --> 00:43:57.760
<v Speaker 4>UI frame side, Like say, guys like myself or people

785
00:43:57.800 --> 00:44:00.000
<v Speaker 4>working on React, we're looking at this and we're like, okay, McKenna,

786
00:44:00.639 --> 00:44:04.800
<v Speaker 4>this works nice. It's ergonomic as thing. People can build

787
00:44:05.159 --> 00:44:07.719
<v Speaker 4>stuff on top of it if they need to. But

788
00:44:08.239 --> 00:44:10.119
<v Speaker 4>I have the pieces I need to do what I

789
00:44:10.159 --> 00:44:13.880
<v Speaker 4>need to mechanically, and it's and it's smooth, but then

790
00:44:14.719 --> 00:44:17.000
<v Speaker 4>we we get to a point where we add back

791
00:44:17.159 --> 00:44:20.400
<v Speaker 4>our own friction because of like best practices.

792
00:44:21.360 --> 00:44:23.920
<v Speaker 1>So that's what it was. Kind of kind of like the.

793
00:44:25.000 --> 00:44:27.559
<v Speaker 2>Nice things on the web, that's truism.

794
00:44:28.400 --> 00:44:30.639
<v Speaker 4>So yeah, it's kind of it's kind of interesting because

795
00:44:30.679 --> 00:44:32.360
<v Speaker 4>because like, yeah, I mean, I love, you know, the

796
00:44:32.400 --> 00:44:34.599
<v Speaker 4>standard schema, A big fan of Valabot and all that

797
00:44:34.639 --> 00:44:36.280
<v Speaker 4>kind of stuff, But it's but it was, it's like

798
00:44:36.280 --> 00:44:38.199
<v Speaker 4>one of those things where like the people building UI

799
00:44:38.280 --> 00:44:41.039
<v Speaker 4>frameworks usually maybe the meta frameworks can, but the UI

800
00:44:41.119 --> 00:44:45.039
<v Speaker 4>frameworks can't. Can't generally won't push those kind of things

801
00:44:45.039 --> 00:44:48.039
<v Speaker 4>on you because they're like they're not they're not in

802
00:44:48.079 --> 00:44:50.559
<v Speaker 4>our range of to be enforced because people will have

803
00:44:50.599 --> 00:44:52.159
<v Speaker 4>different opinions, things will change over.

804
00:44:52.039 --> 00:44:55.480
<v Speaker 3>Time, too much opinion coming from right exactly.

805
00:44:55.519 --> 00:44:57.280
<v Speaker 1>So it's like we.

806
00:44:57.199 --> 00:44:59.400
<v Speaker 3>Being a meta framework, then you get to enforce a

807
00:44:59.480 --> 00:45:00.800
<v Speaker 3>little bit more those opinions.

808
00:45:00.920 --> 00:45:04.599
<v Speaker 4>Yeah, it's just tricky because meta frameworks have a shorter

809
00:45:04.800 --> 00:45:06.760
<v Speaker 4>shouldn't theory have a shorter shelf life?

810
00:45:06.519 --> 00:45:07.760
<v Speaker 1>Because of that, Like.

811
00:45:08.239 --> 00:45:09.960
<v Speaker 4>This was always the struggle I had on was work

812
00:45:09.960 --> 00:45:12.039
<v Speaker 4>on all start because I like didn't want to make

813
00:45:12.119 --> 00:45:14.800
<v Speaker 4>meta framework. I just wanted to make a like a

814
00:45:15.000 --> 00:45:17.440
<v Speaker 4>create React app that work on the servers. This kind

815
00:45:17.440 --> 00:45:20.280
<v Speaker 4>of kind of tension is interesting for the science space.

816
00:45:20.960 --> 00:45:23.519
<v Speaker 4>There was something I wanted to say. You said, there's

817
00:45:23.519 --> 00:45:25.280
<v Speaker 4>three things you need for rpcs to come back.

818
00:45:25.920 --> 00:45:30.920
<v Speaker 2>Yeah, I mentioned, I'll said again, maybe it'll jog your memory. Basically,

819
00:45:31.079 --> 00:45:36.239
<v Speaker 2>it was a type for the underlying system to be

820
00:45:36.400 --> 00:45:39.679
<v Speaker 2>typed or type safe that at least a development time.

821
00:45:39.760 --> 00:45:43.400
<v Speaker 2>Otherwise there's no point. So you probably wouldn't do RPC

822
00:45:43.519 --> 00:45:47.920
<v Speaker 2>if you've just got JavaScript, a weight so that you

823
00:45:47.960 --> 00:45:52.679
<v Speaker 2>can quote unquote block until that remote function finishes, and

824
00:45:53.239 --> 00:45:59.599
<v Speaker 2>optionally the compiler slash bundler so that you can automatically

825
00:45:59.679 --> 00:46:02.840
<v Speaker 2>general rate the stub code to do to translate that

826
00:46:02.960 --> 00:46:07.599
<v Speaker 2>function called into you know, do the serializations, send the

827
00:46:07.639 --> 00:46:10.840
<v Speaker 2>message across the wire, do the de serialization on the

828
00:46:10.840 --> 00:46:12.559
<v Speaker 2>other side and back again?

829
00:46:13.119 --> 00:46:16.039
<v Speaker 4>Right yeah, yeah, And you just mentioned it twice because

830
00:46:16.760 --> 00:46:19.320
<v Speaker 4>I said at the beginning I wasn't trying to build RPC.

831
00:46:19.559 --> 00:46:22.360
<v Speaker 4>I think the final piece that access cemented it for

832
00:46:22.480 --> 00:46:27.679
<v Speaker 4>me was the serialization part. Because we don't communicate in

833
00:46:28.039 --> 00:46:30.559
<v Speaker 4>Jason anymore with these you don't.

834
00:46:31.039 --> 00:46:32.760
<v Speaker 1>No, no, no, I think.

835
00:46:32.639 --> 00:46:36.480
<v Speaker 2>You do, don't you the call over the wire is

836
00:46:36.519 --> 00:46:40.079
<v Speaker 2>it Jason or is it something else for server functions?

837
00:46:40.199 --> 00:46:45.440
<v Speaker 3>Yeah, yes, by default, yes it's Jason. Yeah.

838
00:46:45.639 --> 00:46:48.639
<v Speaker 4>See didn't And this is one of the attractive to

839
00:46:48.679 --> 00:46:51.119
<v Speaker 4>be though. Yeah, this is one of the attractive things

840
00:46:51.119 --> 00:46:53.679
<v Speaker 4>for us time because you can trouble sides. So this

841
00:46:53.760 --> 00:46:56.360
<v Speaker 4>is like react love this, we love this, framework has

842
00:46:56.360 --> 00:46:58.079
<v Speaker 4>love this. This is this is where you can go

843
00:46:58.119 --> 00:47:01.519
<v Speaker 4>back and to what framework wanted is. At the exact

844
00:47:01.559 --> 00:47:03.599
<v Speaker 4>same time I was working on this, we were updating

845
00:47:03.599 --> 00:47:07.119
<v Speaker 4>our approach to doing streaming SSR and stuff, and we

846
00:47:07.159 --> 00:47:09.920
<v Speaker 4>were making it faster and more efficient. Like every framework

847
00:47:09.960 --> 00:47:14.039
<v Speaker 4>has their own serializer. Some are publicly available like solid seabo,

848
00:47:15.000 --> 00:47:21.280
<v Speaker 4>Marco's warp nine devalue from spelp, and we were.

849
00:47:21.119 --> 00:47:23.159
<v Speaker 2>Going to need to give a little bit more context

850
00:47:23.280 --> 00:47:25.960
<v Speaker 2>I think. Okay, so to some of our listeners about

851
00:47:26.079 --> 00:47:28.719
<v Speaker 2>why it is that you need this sort of civilization

852
00:47:28.880 --> 00:47:29.920
<v Speaker 2>for SSR.

853
00:47:29.880 --> 00:47:31.239
<v Speaker 3>I think that'll be really useful.

854
00:47:31.519 --> 00:47:32.440
<v Speaker 1>Yeah, okay, sorry.

855
00:47:33.199 --> 00:47:36.000
<v Speaker 4>Basically you're sending HTML, which you're like, okay, that's great,

856
00:47:36.599 --> 00:47:39.800
<v Speaker 4>but the problem is now you have something ASIC so

857
00:47:41.280 --> 00:47:45.239
<v Speaker 4>you can send the HTML in chunks. Let's say, so

858
00:47:45.280 --> 00:47:50.480
<v Speaker 4>you're sending you know yes or it's streaming is basically

859
00:47:50.480 --> 00:47:54.880
<v Speaker 4>the problem. You want to be able to not only

860
00:47:54.920 --> 00:47:58.119
<v Speaker 4>send the HTML markup, but you want to be able

861
00:47:58.119 --> 00:48:01.239
<v Speaker 4>to send the data across and if you wait for

862
00:48:01.280 --> 00:48:03.519
<v Speaker 4>it all to finish, then just send the Jason and

863
00:48:03.559 --> 00:48:05.679
<v Speaker 4>the HTML. Then you show the whole page at the end.

864
00:48:06.199 --> 00:48:09.519
<v Speaker 4>But if you can, if you can send different types

865
00:48:09.559 --> 00:48:13.760
<v Speaker 4>of serialization values, it's possible to send pieces of the

866
00:48:13.800 --> 00:48:16.679
<v Speaker 4>app in parts and then for the client to go, oh,

867
00:48:17.360 --> 00:48:21.000
<v Speaker 4>you serialize a promise, for example, and the client go okay,

868
00:48:21.159 --> 00:48:25.000
<v Speaker 4>I know this data is coming. That's the most fundamental

869
00:48:25.039 --> 00:48:27.360
<v Speaker 4>way of doing it, where we basically describe a promise

870
00:48:27.360 --> 00:48:29.880
<v Speaker 4>over the wire. So when you know it starts hydrating

871
00:48:29.880 --> 00:48:31.480
<v Speaker 4>part of the page and the whole page hasn't loaded

872
00:48:31.519 --> 00:48:34.000
<v Speaker 4>in from the server, we can go okay, treat it

873
00:48:34.000 --> 00:48:36.320
<v Speaker 4>like a client side promise, and we know that what

874
00:48:36.360 --> 00:48:38.920
<v Speaker 4>will end up happening is actually on the same website page.

875
00:48:39.159 --> 00:48:42.599
<v Speaker 4>We'll actually stream that Jason later, but then we'll when

876
00:48:42.599 --> 00:48:44.599
<v Speaker 4>it comes in, we'll fulfill the promise on the client.

877
00:48:45.119 --> 00:48:50.920
<v Speaker 2>So again, just to clarify the need, if I understand correctly,

878
00:48:51.079 --> 00:48:56.159
<v Speaker 2>correct me if I'm wrong. It's it's your HTML intrinsic

879
00:48:56.280 --> 00:49:03.679
<v Speaker 2>is intrinsically streaming. So the HTML protocol, unlike JavaScript, essentially

880
00:49:03.800 --> 00:49:06.440
<v Speaker 2>you can stream it and it will just execute. The

881
00:49:06.559 --> 00:49:09.719
<v Speaker 2>problem I think is the order of things is the

882
00:49:09.719 --> 00:49:14.960
<v Speaker 2>fact that you that HTML streams top to bottom, whereas

883
00:49:15.119 --> 00:49:18.119
<v Speaker 2>you want to be able to stream things and inject

884
00:49:18.119 --> 00:49:22.079
<v Speaker 2>them in the middle of things that have already arrived. Right,

885
00:49:23.519 --> 00:49:26.719
<v Speaker 2>and Tanner has raised his hand again, so interrupt.

886
00:49:26.880 --> 00:49:29.159
<v Speaker 3>I just want to punctuate that and say that it's

887
00:49:29.639 --> 00:49:35.800
<v Speaker 3>it's about order. It's about componentization of these calls to

888
00:49:35.800 --> 00:49:40.000
<v Speaker 3>to say I have something that needs this amount of data,

889
00:49:40.880 --> 00:49:43.079
<v Speaker 3>you know, and you can have multiples of those in

890
00:49:43.119 --> 00:49:46.679
<v Speaker 3>whatever order you want, And inside of those responses you

891
00:49:46.760 --> 00:49:52.559
<v Speaker 3>can have immediate, immediately returned partial parts of those responses

892
00:49:52.599 --> 00:49:55.280
<v Speaker 3>and have some of them be delayed. So it's almost

893
00:49:55.360 --> 00:49:58.440
<v Speaker 3>like you get the same experience inside of HTML where

894
00:49:58.480 --> 00:50:01.920
<v Speaker 3>you can give the important stuff really quickly and delay

895
00:50:01.960 --> 00:50:04.960
<v Speaker 3>the other stuff. You get that same capability within each

896
00:50:05.559 --> 00:50:07.360
<v Speaker 3>request response life cycle.

897
00:50:07.880 --> 00:50:10.039
<v Speaker 2>You can see it in this just just to say that.

898
00:50:10.119 --> 00:50:12.280
<v Speaker 2>The joke that I like to say is that the

899
00:50:12.320 --> 00:50:16.280
<v Speaker 2>big difference between old websites and modern websites is that

900
00:50:16.320 --> 00:50:19.039
<v Speaker 2>we've replaced the single large spinner with a lot of

901
00:50:19.079 --> 00:50:20.199
<v Speaker 2>small spinners.

902
00:50:21.480 --> 00:50:24.840
<v Speaker 4>Yeah, we've been trying to solve that.

903
00:50:24.920 --> 00:50:25.159
<v Speaker 3>I mean.

904
00:50:25.199 --> 00:50:28.199
<v Speaker 4>The challenge is you can see in the shape that

905
00:50:28.320 --> 00:50:30.360
<v Speaker 4>ht amount it self, it's x amount or you know,

906
00:50:30.400 --> 00:50:33.480
<v Speaker 4>it's a markup language. So these things are naturally nested.

907
00:50:33.480 --> 00:50:34.960
<v Speaker 4>You see it in your components. You have components and

908
00:50:34.960 --> 00:50:38.199
<v Speaker 4>components and components and components. So like doing it top

909
00:50:38.239 --> 00:50:40.719
<v Speaker 4>the bottom doesn't even work because the outer component hasn't closed,

910
00:50:40.760 --> 00:50:43.440
<v Speaker 4>you know what I mean, like these envelopes. So what

911
00:50:43.599 --> 00:50:46.920
<v Speaker 4>ends up happening is the trick to the h mell.

912
00:50:46.960 --> 00:50:50.880
<v Speaker 4>Actually isn't that difficult mechanically because you can put it

913
00:50:50.920 --> 00:50:53.079
<v Speaker 4>on the end in something invisible like a template, and

914
00:50:53.159 --> 00:50:57.199
<v Speaker 4>have JavaScript move it back into place as it loads.

915
00:50:57.239 --> 00:50:59.519
<v Speaker 4>The hard part is that is the data. If you

916
00:50:59.519 --> 00:51:02.039
<v Speaker 4>actually want to wake up parts of that page before

917
00:51:02.079 --> 00:51:04.719
<v Speaker 4>it all loads, you need to tell you need like

918
00:51:04.840 --> 00:51:08.159
<v Speaker 4>a placeholder for the data. Essentially, you need to be like, look,

919
00:51:08.199 --> 00:51:10.440
<v Speaker 4>this data will be coming or you know.

920
00:51:10.760 --> 00:51:14.800
<v Speaker 3>And that's a promise and that's a problem or a substream.

921
00:51:15.280 --> 00:51:19.480
<v Speaker 4>Right, So we started serializing well, I mean, and then

922
00:51:19.480 --> 00:51:22.199
<v Speaker 4>there's different types of data right, like data objects, you know,

923
00:51:22.239 --> 00:51:25.639
<v Speaker 4>and different things. So like even stuff like TRPC has

924
00:51:25.679 --> 00:51:29.000
<v Speaker 4>like advanced like super JSON or like advanced data types

925
00:51:29.039 --> 00:51:31.920
<v Speaker 4>you know. And but for us promises, we're the key

926
00:51:32.360 --> 00:51:35.639
<v Speaker 4>for and we realized that we could bring that serialization

927
00:51:36.159 --> 00:51:38.519
<v Speaker 4>not just in our original SSR, but use it in

928
00:51:38.599 --> 00:51:44.920
<v Speaker 4>our server functions, so we could serialize anything, you know, HTML, elements, promises, whatever.

929
00:51:45.280 --> 00:51:48.760
<v Speaker 4>And this meant that because both sides, RPC let both

930
00:51:48.760 --> 00:51:50.760
<v Speaker 4>sides understand and this is in a sense like how

931
00:51:50.760 --> 00:51:53.559
<v Speaker 4>server components work and React because they can go we

932
00:51:53.639 --> 00:51:57.400
<v Speaker 4>have our special jsx on format and we can communicate

933
00:51:57.400 --> 00:51:59.639
<v Speaker 4>both sides, and now we can communicate react components of

934
00:51:59.679 --> 00:52:02.039
<v Speaker 4>the wire. As I said, our needs are a little

935
00:52:02.039 --> 00:52:05.119
<v Speaker 4>bit simpler with like promises and streams, but it works

936
00:52:05.119 --> 00:52:08.199
<v Speaker 4>out kind of similar. We it lets us build on

937
00:52:08.440 --> 00:52:12.159
<v Speaker 4>really powerful capabilities on this because you can say, return

938
00:52:12.239 --> 00:52:15.280
<v Speaker 4>some data with a promise encoded in it, and then

939
00:52:15.320 --> 00:52:17.119
<v Speaker 4>like have the data come back in chunks.

940
00:52:17.119 --> 00:52:17.920
<v Speaker 3>You can make an.

941
00:52:17.760 --> 00:52:20.679
<v Speaker 4>ACYNC iterable and basically return the stream so the server

942
00:52:20.760 --> 00:52:23.719
<v Speaker 4>can just keep on yielding data into your server function.

943
00:52:23.960 --> 00:52:26.639
<v Speaker 4>And you write it literally as like an ACE generator function.

944
00:52:26.679 --> 00:52:28.960
<v Speaker 4>So you write it as a like an acing function,

945
00:52:29.320 --> 00:52:33.519
<v Speaker 4>and it'll our generator word yields and will literally be

946
00:52:33.599 --> 00:52:37.360
<v Speaker 4>yielding from server to client. So there's a lot of

947
00:52:37.400 --> 00:52:39.440
<v Speaker 4>really cool mechanics here.

948
00:52:39.639 --> 00:52:43.519
<v Speaker 2>Do you support that in? I know that Quick supports that.

949
00:52:43.679 --> 00:52:46.000
<v Speaker 2>I know that, or RBC supports that. Do you guys

950
00:52:46.000 --> 00:52:50.840
<v Speaker 2>also support that that the ability to stream a response

951
00:52:50.920 --> 00:52:52.280
<v Speaker 2>from ann RBC?

952
00:52:53.159 --> 00:52:56.480
<v Speaker 4>Yeah, Salades, Yeah, it's in. It's in, Sarah Belle. I

953
00:52:56.480 --> 00:52:58.400
<v Speaker 4>don't know if someone Start handles it the best in

954
00:52:58.400 --> 00:53:01.199
<v Speaker 4>all cases, but the core technology support to it.

955
00:53:01.159 --> 00:53:06.679
<v Speaker 3>So I guess side uh side quest here is we

956
00:53:06.679 --> 00:53:10.880
<v Speaker 3>we and we started out building our own serializer I

957
00:53:10.920 --> 00:53:15.159
<v Speaker 3>did for tansex Start that was had. It was a

958
00:53:15.199 --> 00:53:20.079
<v Speaker 3>little bit lighter than something like sarahvel Or or the

959
00:53:20.119 --> 00:53:23.239
<v Speaker 3>big giant serializer that that can do like re ex

960
00:53:23.280 --> 00:53:27.440
<v Speaker 3>server components and stuff. And there's also super Jason there.

961
00:53:27.519 --> 00:53:29.960
<v Speaker 3>There's even one that the remix team built right for

962
00:53:30.039 --> 00:53:30.760
<v Speaker 3>react about.

963
00:53:30.880 --> 00:53:33.719
<v Speaker 2>Somebody on the chat called it a tool boards.

964
00:53:33.079 --> 00:53:35.400
<v Speaker 3>Cha Jason, Right, Yeah, there's there's a couple of these,

965
00:53:36.639 --> 00:53:39.239
<v Speaker 3>and and I wrote a simple one that would kind

966
00:53:39.239 --> 00:53:43.039
<v Speaker 3>of get to m v P for tansex Start Alpha.

967
00:53:43.159 --> 00:53:46.880
<v Speaker 3>And even even the simple one could serialized promises and

968
00:53:46.960 --> 00:53:51.880
<v Speaker 3>serialized streams. But then we we realized that we want

969
00:53:51.920 --> 00:53:56.039
<v Speaker 3>to do more complex stuff. We've decided to adopt Sarahvell.

970
00:53:58.119 --> 00:54:02.239
<v Speaker 3>I think I told you that, Ryan, right, okay for you.

971
00:54:03.199 --> 00:54:06.000
<v Speaker 3>We so we have one that works for tansax start,

972
00:54:06.039 --> 00:54:11.199
<v Speaker 3>but we're adopting Sarall because is beyond just being able

973
00:54:11.199 --> 00:54:13.880
<v Speaker 3>to stream this stuff. Sarahville has some very unique So.

974
00:54:13.800 --> 00:54:16.519
<v Speaker 2>What is Serville I think I missed explanation.

975
00:54:16.800 --> 00:54:20.440
<v Speaker 4>It's it's the serializer used by SOLODJS use both in

976
00:54:20.480 --> 00:54:22.960
<v Speaker 4>our server rendering and in our server functions. I was

977
00:54:22.960 --> 00:54:27.880
<v Speaker 4>built by Alexis Monselek core team members sologs and yeah.

978
00:54:28.519 --> 00:54:33.599
<v Speaker 2>It's basically serializes stuff over the wire and then de

979
00:54:33.719 --> 00:54:37.920
<v Speaker 2>serialize it. But it's not exactly Jason. It's something else,

980
00:54:39.079 --> 00:54:42.239
<v Speaker 2>like like React doesn't use Jason either. In case people

981
00:54:42.239 --> 00:54:42.719
<v Speaker 2>don't know.

982
00:54:42.840 --> 00:54:43.519
<v Speaker 3>For their.

983
00:54:44.800 --> 00:54:48.400
<v Speaker 2>Responses from server from server components, you.

984
00:54:48.360 --> 00:54:50.199
<v Speaker 3>See a lot of them that have like it's it's

985
00:54:50.239 --> 00:54:54.119
<v Speaker 3>like a superset of Jason that they then encode and

986
00:54:54.159 --> 00:54:57.480
<v Speaker 3>decode special characters, special things.

987
00:54:57.519 --> 00:55:00.320
<v Speaker 2>Look for at the very least, you won't command lines

988
00:55:00.320 --> 00:55:02.760
<v Speaker 2>separate the Jason in order to be able to send

989
00:55:02.800 --> 00:55:07.039
<v Speaker 2>multiple messages and not be kind of stuck on on

990
00:55:07.159 --> 00:55:09.519
<v Speaker 2>not closing the bracket or something.

991
00:55:10.679 --> 00:55:15.199
<v Speaker 3>Is I think Saravel is very unique and really cool

992
00:55:15.239 --> 00:55:21.079
<v Speaker 3>because Saravel does not Servell uses javascripts essentially to stream

993
00:55:21.320 --> 00:55:25.840
<v Speaker 3>like to serialize all of this. Saravel uses JavaScript and

994
00:55:25.920 --> 00:55:28.519
<v Speaker 3>streams it and executes it over the wire, and it

995
00:55:28.639 --> 00:55:32.760
<v Speaker 3>is it's incredible to watch it work. Because even beyond that,

996
00:55:32.840 --> 00:55:39.119
<v Speaker 3>I mean super JC yeah, a little bit. Yes, I

997
00:55:39.119 --> 00:55:40.280
<v Speaker 3>wouldn't want to call it that.

998
00:55:40.159 --> 00:55:41.800
<v Speaker 1>But yeah, I mean there is a bit of that.

999
00:55:42.239 --> 00:55:45.880
<v Speaker 4>And in some cases where the security isn't concerned, he's

1000
00:55:46.079 --> 00:55:49.519
<v Speaker 4>he's been looking at alternate serialization formats so that you

1001
00:55:50.079 --> 00:55:54.760
<v Speaker 4>don't have the evil aspect of it. But yeah, it is,

1002
00:55:54.760 --> 00:55:57.400
<v Speaker 4>it is, there is there's.

1003
00:55:56.440 --> 00:55:58.599
<v Speaker 3>Great power comes great responsibility.

1004
00:55:58.880 --> 00:56:01.360
<v Speaker 4>But I mean the power is incredible because this is

1005
00:56:01.519 --> 00:56:05.360
<v Speaker 4>this is what enables future facing patterns. We've never had

1006
00:56:05.480 --> 00:56:08.679
<v Speaker 4>things like single page apps be able to easily do

1007
00:56:09.239 --> 00:56:13.559
<v Speaker 4>basically picture. You know, people familiar with React query where

1008
00:56:13.599 --> 00:56:16.239
<v Speaker 4>you can like do a mutation and invalidate like a

1009
00:56:16.239 --> 00:56:20.440
<v Speaker 4>couple of queries. What if you can do the mutation

1010
00:56:21.159 --> 00:56:23.079
<v Speaker 4>so send it to the server and have the server

1011
00:56:24.000 --> 00:56:27.280
<v Speaker 4>figure out what the invalidate and then while it's still there.

1012
00:56:27.360 --> 00:56:30.159
<v Speaker 4>Start fetching the data, that data on the server and

1013
00:56:30.199 --> 00:56:32.920
<v Speaker 4>send it back, you know, like return right away from

1014
00:56:32.960 --> 00:56:35.920
<v Speaker 4>your mutation, but then have it streaming back the data

1015
00:56:36.000 --> 00:56:37.760
<v Speaker 4>for like the next page you're going to visit right.

1016
00:56:37.800 --> 00:56:39.280
<v Speaker 4>If you have the knowledge of say like a router,

1017
00:56:39.719 --> 00:56:43.400
<v Speaker 4>and you have this capability of serialization, you can do

1018
00:56:43.800 --> 00:56:45.760
<v Speaker 4>like single flight mutations and stuff.

1019
00:56:45.960 --> 00:56:48.800
<v Speaker 1>Crap is gonna restart because of not.

1020
00:56:48.719 --> 00:56:54.519
<v Speaker 3>Just single mutations, but stream Yeah, for a minute or so,

1021
00:56:54.800 --> 00:57:01.719
<v Speaker 3>I'll be back. It looks like, but you'll yeah, it's

1022
00:57:02.039 --> 00:57:04.320
<v Speaker 3>not that it's single flight mutations doesn't been around forever,

1023
00:57:04.400 --> 00:57:07.519
<v Speaker 3>but I mean that's how the web worked anyway. But

1024
00:57:08.800 --> 00:57:11.159
<v Speaker 3>single flight mutations that are streamed, I think that's the

1025
00:57:11.159 --> 00:57:13.719
<v Speaker 3>most important part of it. It's like as you get

1026
00:57:13.719 --> 00:57:15.719
<v Speaker 3>the response, as you get the requests on the server,

1027
00:57:16.119 --> 00:57:18.800
<v Speaker 3>and you start processing things that need to change, you

1028
00:57:19.039 --> 00:57:22.119
<v Speaker 3>don't again, don't need to wait to know all of

1029
00:57:22.119 --> 00:57:23.920
<v Speaker 3>the changes that are going to happen to send them

1030
00:57:23.920 --> 00:57:27.079
<v Speaker 3>back to the client. You can start processing them and

1031
00:57:27.119 --> 00:57:31.800
<v Speaker 3>shipping them as you find them to the client. That

1032
00:57:31.800 --> 00:57:36.599
<v Speaker 3>that is incredible, so that you know you're in Validation

1033
00:57:36.800 --> 00:57:40.320
<v Speaker 3>from the server can essentially be streamed in as soon

1034
00:57:40.400 --> 00:57:42.239
<v Speaker 3>as you know about it to the client in the

1035
00:57:42.280 --> 00:57:43.039
<v Speaker 3>same request.

1036
00:57:43.880 --> 00:57:46.480
<v Speaker 2>The funny thing, though, is that that kind of goes

1037
00:57:46.559 --> 00:57:51.320
<v Speaker 2>beyond RPC. That's more in the territory of SSR, isn't it.

1038
00:57:51.719 --> 00:57:56.880
<v Speaker 3>No, Because we're still just talking about individual requests an

1039
00:57:57.000 --> 00:58:02.960
<v Speaker 3>RPC for instance, to say, you know, I want to

1040
00:58:02.800 --> 00:58:05.599
<v Speaker 3>go the base query maybe and then or say I

1041
00:58:05.639 --> 00:58:08.159
<v Speaker 3>want to update a user. I want to update a

1042
00:58:08.280 --> 00:58:12.360
<v Speaker 3>user capability. Right, I'm adding a capability to a user,

1043
00:58:12.840 --> 00:58:16.079
<v Speaker 3>and you you go to add that capability on the

1044
00:58:16.119 --> 00:58:20.000
<v Speaker 3>server side, You'll you'll receive that mutation, You'll you'll create

1045
00:58:20.039 --> 00:58:22.039
<v Speaker 3>that mutation, and then you're probably going to have a

1046
00:58:22.079 --> 00:58:25.119
<v Speaker 3>bunch of other things that need to be invalidated for

1047
00:58:25.199 --> 00:58:27.880
<v Speaker 3>the user or refresh or streams to the user that

1048
00:58:27.920 --> 00:58:30.639
<v Speaker 3>are going to be new. With that new capability, they'll

1049
00:58:30.639 --> 00:58:36.519
<v Speaker 3>gain access to new items, new things, new collection types

1050
00:58:36.559 --> 00:58:40.679
<v Speaker 3>inside of their application, and some of those items might

1051
00:58:40.679 --> 00:58:45.079
<v Speaker 3>take longer for you to fetch on the server and

1052
00:58:45.119 --> 00:58:48.079
<v Speaker 3>give to them than others, So out of the gate,

1053
00:58:48.519 --> 00:58:50.960
<v Speaker 3>you'll want to ship them a new user object that'll

1054
00:58:50.960 --> 00:58:53.000
<v Speaker 3>be really fast, So you ship that down in the

1055
00:58:53.039 --> 00:58:56.719
<v Speaker 3>same response, you push that down, and then you're still

1056
00:58:56.760 --> 00:58:59.880
<v Speaker 3>working on maybe maybe their team data or their work

1057
00:59:00.039 --> 00:59:02.519
<v Speaker 3>based data, and then as you get those, you ship

1058
00:59:02.599 --> 00:59:06.039
<v Speaker 3>those down as well, and so you can start in

1059
00:59:06.079 --> 00:59:10.360
<v Speaker 3>the same request of just a mutation, the response can contain,

1060
00:59:10.840 --> 00:59:15.440
<v Speaker 3>you know, immediate and streamed data. It's really interesting.

1061
00:59:16.079 --> 00:59:17.840
<v Speaker 2>First of all, you're turning on a lot of light

1062
00:59:17.880 --> 00:59:21.400
<v Speaker 2>bulbs for me, so thank you for that, and you're

1063
00:59:21.599 --> 00:59:25.920
<v Speaker 2>raising and it's interesting because what I'm thinking. I'm old

1064
00:59:26.039 --> 00:59:29.760
<v Speaker 2>enough to remember the original RPC implementations back in the

1065
00:59:29.840 --> 00:59:33.880
<v Speaker 2>nineties and one of the main problems with them was

1066
00:59:34.000 --> 00:59:40.840
<v Speaker 2>the fact that they were built as being synchronous type operations,

1067
00:59:41.519 --> 00:59:45.360
<v Speaker 2>and because the assumption was that it is kind of

1068
00:59:45.480 --> 00:59:50.199
<v Speaker 2>like a function and function calls usually are cheap, so

1069
00:59:50.519 --> 00:59:53.320
<v Speaker 2>you can make one function call for the fast stuff

1070
00:59:53.320 --> 00:59:56.039
<v Speaker 2>and another function called for the for the slow stuff,

1071
00:59:56.159 --> 00:59:59.280
<v Speaker 2>or get the call back or stuff like that, and

1072
00:59:59.679 --> 01:00:02.239
<v Speaker 2>they did I didn't really accommodate for that scenario that

1073
01:00:02.280 --> 01:00:07.800
<v Speaker 2>you're describing, where I'm requesting multiple data items and they

1074
01:00:07.840 --> 01:00:12.039
<v Speaker 2>are available at different at different times, and that I

1075
01:00:12.199 --> 01:00:17.199
<v Speaker 2>can create this kind of a sophisticated staggered response that

1076
01:00:17.599 --> 01:00:20.760
<v Speaker 2>data arrives as soon as it's available, and I don't

1077
01:00:20.760 --> 01:00:23.639
<v Speaker 2>need to make multiple calls in order to get all

1078
01:00:23.639 --> 01:00:27.480
<v Speaker 2>this data. Yeah, I'm giving them mic back to you.

1079
01:00:28.760 --> 01:00:32.440
<v Speaker 3>I think that it even goes He takes that even further.

1080
01:00:32.760 --> 01:00:34.880
<v Speaker 3>Is yes, it works for data that you request you

1081
01:00:34.920 --> 01:00:37.320
<v Speaker 3>may know about, but it also works for data that

1082
01:00:37.440 --> 01:00:40.320
<v Speaker 3>maybe you don't want to know about but needs to

1083
01:00:40.360 --> 01:00:45.000
<v Speaker 3>be sent. Is it leaves room now for this hidden

1084
01:00:45.440 --> 01:00:51.320
<v Speaker 3>layer of meta data, of meta actions or meta code

1085
01:00:51.360 --> 01:00:54.119
<v Speaker 3>that could happen with a request response. So, for example,

1086
01:00:54.840 --> 01:00:58.760
<v Speaker 3>the developer experience that I would want as a developer

1087
01:00:58.960 --> 01:01:02.599
<v Speaker 3>when I say update this user capability, I just want

1088
01:01:02.639 --> 01:01:06.719
<v Speaker 3>to update that user capability. I don't want to I

1089
01:01:06.760 --> 01:01:10.360
<v Speaker 3>don't want to have to be responsible for receiving and

1090
01:01:11.679 --> 01:01:14.360
<v Speaker 3>acting on all of this extra data coming back to

1091
01:01:14.400 --> 01:01:16.280
<v Speaker 3>me though. I just want to trust that it's going

1092
01:01:16.320 --> 01:01:18.400
<v Speaker 3>to work. And so naturally, what do a lot of

1093
01:01:18.440 --> 01:01:19.960
<v Speaker 3>people would say is that say, well, I'm going to

1094
01:01:20.039 --> 01:01:22.559
<v Speaker 3>update this user with a new capability, and then they

1095
01:01:22.599 --> 01:01:25.199
<v Speaker 3>get it back, and what do they expect. They expect

1096
01:01:25.360 --> 01:01:28.840
<v Speaker 3>the response to be a user and the new version

1097
01:01:28.840 --> 01:01:32.239
<v Speaker 3>of the user that has the updated capability. What they're

1098
01:01:32.280 --> 01:01:35.000
<v Speaker 3>not going to expect is to have a bunch of

1099
01:01:35.119 --> 01:01:40.199
<v Speaker 3>other random, you know, data invalidation payloads that they now

1100
01:01:40.239 --> 01:01:43.519
<v Speaker 3>have to handle. So what's nice about something like Sarah

1101
01:01:43.559 --> 01:01:47.199
<v Speaker 3>Bell is that it's it's not just you know, this

1102
01:01:47.440 --> 01:01:50.400
<v Speaker 3>super set of Jason or whatever, but it's the ability

1103
01:01:50.480 --> 01:01:53.880
<v Speaker 3>for even frameworks or middlewares or things in the middle

1104
01:01:53.920 --> 01:01:58.400
<v Speaker 3>of that operation more code can just be sent down

1105
01:01:58.480 --> 01:02:01.800
<v Speaker 3>to the client to execute that the response doesn't even

1106
01:02:01.840 --> 01:02:06.000
<v Speaker 3>need to handle or know about. So it leaves a

1107
01:02:06.039 --> 01:02:10.960
<v Speaker 3>lot of room for optimizations and frameworks to get into

1108
01:02:11.000 --> 01:02:14.519
<v Speaker 3>this request response life cycle, but still keep the developer

1109
01:02:14.599 --> 01:02:17.519
<v Speaker 3>developer experience really lean, not.

1110
01:02:17.599 --> 01:02:20.119
<v Speaker 2>Meaning it means, but a little bit scary because if

1111
01:02:20.119 --> 01:02:23.599
<v Speaker 2>I'm understanding correctly what you're saying is, let's say I

1112
01:02:23.679 --> 01:02:28.960
<v Speaker 2>want to get the new user an updated user object

1113
01:02:29.000 --> 01:02:33.400
<v Speaker 2>from the server. So I do an RPC call, I

1114
01:02:33.599 --> 01:02:36.519
<v Speaker 2>get back the new user, and I do with it

1115
01:02:36.639 --> 01:02:39.239
<v Speaker 2>whatever I do with it. But it turns out that

1116
01:02:39.760 --> 01:02:43.119
<v Speaker 2>it also realized that some group that the user belongs

1117
01:02:43.159 --> 01:02:47.400
<v Speaker 2>to updated, so it sends that down as well. I

1118
01:02:47.440 --> 01:02:51.159
<v Speaker 2>don't handle it because I don't expect it, so I

1119
01:02:51.239 --> 01:02:53.559
<v Speaker 2>didn't even write the code to handle it, but it

1120
01:02:53.679 --> 01:02:57.079
<v Speaker 2>also sent the code that will handle it for me.

1121
01:02:57.280 --> 01:02:59.400
<v Speaker 2>If I understand correctly, what you're kind.

1122
01:02:59.199 --> 01:03:02.480
<v Speaker 3>Of it depends. It depends. A lot of this gets

1123
01:03:02.519 --> 01:03:07.159
<v Speaker 3>into how you use such a tool, right, Yes, you

1124
01:03:07.239 --> 01:03:10.079
<v Speaker 3>could stream down the code that handles it as well,

1125
01:03:10.119 --> 01:03:13.480
<v Speaker 3>but more than likely that kind of code would live

1126
01:03:13.519 --> 01:03:16.000
<v Speaker 3>on the client. It would live on the client side.

1127
01:03:16.599 --> 01:03:20.920
<v Speaker 3>To say, we are orchestrating this metadata layer right as

1128
01:03:20.960 --> 01:03:23.719
<v Speaker 3>the client. We know that we're going to want this

1129
01:03:23.840 --> 01:03:25.760
<v Speaker 3>extra metadata to invalidate.

1130
01:03:25.880 --> 01:03:28.239
<v Speaker 2>So it's a callback that I attached that one, or

1131
01:03:28.280 --> 01:03:31.679
<v Speaker 2>middleware that I attach that gets invoked with the extra

1132
01:03:31.840 --> 01:03:36.039
<v Speaker 2>data that happened to arrive on because of some other

1133
01:03:36.199 --> 01:03:37.880
<v Speaker 2>call that caused it to be sent.

1134
01:03:38.159 --> 01:03:41.039
<v Speaker 3>And we're talking about middleware that can span the client

1135
01:03:41.079 --> 01:03:43.440
<v Speaker 3>and the server just like a server function. Right, it's

1136
01:03:43.480 --> 01:03:48.639
<v Speaker 3>middleware that can compose together inside of this system that's

1137
01:03:48.719 --> 01:03:52.599
<v Speaker 3>extracting into client and server and creating. It's RPC middleware

1138
01:03:52.880 --> 01:03:53.519
<v Speaker 3>essentially what.

1139
01:03:53.480 --> 01:03:57.679
<v Speaker 2>It is, correct, I'm trying to think of an actual

1140
01:03:57.960 --> 01:04:02.960
<v Speaker 2>valid scenario and you tell me if it kind of matches.

1141
01:04:03.679 --> 01:04:07.280
<v Speaker 2>So I know that a lot of times as secure

1142
01:04:07.320 --> 01:04:12.360
<v Speaker 2>systems have this concept of a refresh token. So if

1143
01:04:12.440 --> 01:04:16.599
<v Speaker 2>your access token in validates, you have a refresh stoken

1144
01:04:16.639 --> 01:04:19.559
<v Speaker 2>that generates a new access token for you, and that

1145
01:04:19.760 --> 01:04:22.320
<v Speaker 2>happens behind the scenes. You don't need to be aware

1146
01:04:22.360 --> 01:04:25.239
<v Speaker 2>of this whole thing or this whole mechanism going on.

1147
01:04:25.360 --> 01:04:27.719
<v Speaker 2>So is it something kind of like that.

1148
01:04:27.960 --> 01:04:30.480
<v Speaker 3>I don't know if I would use this for that.

1149
01:04:31.360 --> 01:04:34.719
<v Speaker 2>I mean you could, No, I'm just thinking about the

1150
01:04:34.840 --> 01:04:39.840
<v Speaker 2>scenario where you're making a function call for a but

1151
01:04:40.000 --> 01:04:43.320
<v Speaker 2>that triggers also other stuff to take place in the

1152
01:04:43.400 --> 01:04:46.679
<v Speaker 2>system that you may not necessarily be aware of.

1153
01:04:47.000 --> 01:04:50.800
<v Speaker 3>Yeah. I think what we're mostly talking about here is optimizations, right,

1154
01:04:50.920 --> 01:04:53.440
<v Speaker 3>kind of like the example that Ryan brought up is

1155
01:04:53.440 --> 01:04:58.159
<v Speaker 3>like you send off pre crashing. Yeah, you send off

1156
01:04:58.159 --> 01:05:01.440
<v Speaker 3>a request with a mutation and the intent is known

1157
01:05:01.480 --> 01:05:04.440
<v Speaker 3>that you're going to be at this destination next. Instead

1158
01:05:04.480 --> 01:05:08.440
<v Speaker 3>of waiting for all of this to to settle, the

1159
01:05:08.519 --> 01:05:10.840
<v Speaker 3>dust to settle before you go request the assets for

1160
01:05:10.920 --> 01:05:13.719
<v Speaker 3>your next destination, you can do all of this in

1161
01:05:13.760 --> 01:05:17.039
<v Speaker 3>one request. You can send all of the assets that

1162
01:05:17.079 --> 01:05:19.159
<v Speaker 3>are going to be requested anyway.

1163
01:05:19.239 --> 01:05:21.559
<v Speaker 1>Yeah, it's it's kind of interesting.

1164
01:05:21.199 --> 01:05:23.079
<v Speaker 2>Kind of resource sense in a sense.

1165
01:05:23.920 --> 01:05:24.159
<v Speaker 3>Yeah.

1166
01:05:24.320 --> 01:05:27.559
<v Speaker 1>What I found kind of interesting about this resource.

1167
01:05:27.159 --> 01:05:29.000
<v Speaker 3>Pushing resource pushing.

1168
01:05:29.079 --> 01:05:32.440
<v Speaker 4>Yeah, when I when I was working on the solution,

1169
01:05:32.719 --> 01:05:35.079
<v Speaker 4>was the kind of that realization is that people are

1170
01:05:35.079 --> 01:05:38.639
<v Speaker 4>already writing their code mostly isomorphically, which means that like

1171
01:05:38.679 --> 01:05:42.800
<v Speaker 4>they're already creating these patterns. So like running the say

1172
01:05:42.800 --> 01:05:46.920
<v Speaker 4>the routeloaders again on the server and a mutation and

1173
01:05:47.000 --> 01:05:50.119
<v Speaker 4>then expecting the code to be basically the same on

1174
01:05:50.199 --> 01:05:53.320
<v Speaker 4>the client because it is the same code it's source

1175
01:05:53.400 --> 01:05:57.000
<v Speaker 4>code basically gives you this ability. So like what was

1176
01:05:57.039 --> 01:05:59.960
<v Speaker 4>kind of cool is yeah, the kind of optimization look

1177
01:06:00.079 --> 01:06:02.599
<v Speaker 4>you can go in because if you're in a nested route,

1178
01:06:02.599 --> 01:06:04.519
<v Speaker 4>if you're familiar with nest to routing, maybe the top

1179
01:06:04.559 --> 01:06:08.199
<v Speaker 4>section doesn't change, only the like the two sections underneath

1180
01:06:08.280 --> 01:06:10.480
<v Speaker 4>swap on this navigation, so you're like you're staying on

1181
01:06:10.480 --> 01:06:12.280
<v Speaker 4>the same main page and then you go to the

1182
01:06:12.280 --> 01:06:14.840
<v Speaker 4>next page. Well, if that data from the top main

1183
01:06:14.880 --> 01:06:17.559
<v Speaker 4>page isn't being updated, then you don't have to fetch

1184
01:06:17.559 --> 01:06:20.480
<v Speaker 4>it again on the server loaders. Like basically we were

1185
01:06:20.679 --> 01:06:24.519
<v Speaker 4>able to use the same sort of knowledge of what

1186
01:06:24.679 --> 01:06:28.559
<v Speaker 4>route changes and what data is already available based on

1187
01:06:29.039 --> 01:06:34.920
<v Speaker 4>what things it would fetch when it navigates to those pages,

1188
01:06:35.480 --> 01:06:38.599
<v Speaker 4>to the point that we basically go, Okay, this is

1189
01:06:38.639 --> 01:06:40.440
<v Speaker 4>already there and the client don't need the updated and

1190
01:06:40.480 --> 01:06:43.440
<v Speaker 4>it hasn't explicitly invalidated. This is already there, this is new,

1191
01:06:43.800 --> 01:06:46.880
<v Speaker 4>this isn't just on this page, this has been updated.

1192
01:06:46.960 --> 01:06:50.679
<v Speaker 4>And then fetch those things and put them on that request.

1193
01:06:50.760 --> 01:06:52.960
<v Speaker 4>But the client are the server responds right away. So

1194
01:06:53.000 --> 01:06:55.320
<v Speaker 4>the server goes, okay, we're going to redract to this

1195
01:06:55.400 --> 01:06:58.440
<v Speaker 4>next page, and the client goes, okay, I'm going to

1196
01:06:58.480 --> 01:07:00.920
<v Speaker 4>go to this next page. So the client goes to

1197
01:07:00.960 --> 01:07:04.280
<v Speaker 4>that next page. But because those promise stubs are there,

1198
01:07:05.519 --> 01:07:07.400
<v Speaker 4>when it goes to load the data, it goes, oh, no,

1199
01:07:07.480 --> 01:07:10.960
<v Speaker 4>promise stub right here, it's already in the cash. I'm

1200
01:07:10.960 --> 01:07:13.360
<v Speaker 4>going to use this promise instead of fetching it again

1201
01:07:14.119 --> 01:07:17.000
<v Speaker 4>for the stuff that's new. So it's it's kind of

1202
01:07:17.719 --> 01:07:20.199
<v Speaker 4>it's weird how you can kind of like do this

1203
01:07:20.280 --> 01:07:23.239
<v Speaker 4>kind of predictively, but in the end, what you end

1204
01:07:23.320 --> 01:07:25.199
<v Speaker 4>up with, which is my favorite part about this, is

1205
01:07:25.559 --> 01:07:28.119
<v Speaker 4>you're actually leveraging your knowledge of the client side cash

1206
01:07:28.119 --> 01:07:31.159
<v Speaker 4>on the server here, so you actually don't need cashing

1207
01:07:31.280 --> 01:07:34.360
<v Speaker 4>on the server in this mechanism. Like you could still

1208
01:07:34.400 --> 01:07:36.360
<v Speaker 4>optimize it with like a rettis or something, but we

1209
01:07:36.760 --> 01:07:39.719
<v Speaker 4>never went through that whole Next DS use cash dilemma

1210
01:07:40.039 --> 01:07:42.840
<v Speaker 4>or cash stup because when you do server functions, you

1211
01:07:42.880 --> 01:07:44.519
<v Speaker 4>re render the whole page. It's kind of like remix.

1212
01:07:44.559 --> 01:07:47.199
<v Speaker 4>It's like that loader bit. You know the whole route sections.

1213
01:07:47.320 --> 01:07:49.239
<v Speaker 4>So when you hit a you have five data points, well,

1214
01:07:49.239 --> 01:07:51.719
<v Speaker 4>guess what, you are fetching all five data points.

1215
01:07:51.719 --> 01:07:54.920
<v Speaker 1>There's no way for you to separate those apart.

1216
01:07:54.679 --> 01:07:56.280
<v Speaker 4>Which means that if you don't want to refetch all

1217
01:07:56.320 --> 01:07:58.679
<v Speaker 4>five data points every single time, you are going to

1218
01:07:58.719 --> 01:08:01.320
<v Speaker 4>cash them on the server. This approach you'll let you

1219
01:08:01.400 --> 01:08:04.559
<v Speaker 4>basically use the knowledge of the route and the knowledge

1220
01:08:04.559 --> 01:08:07.840
<v Speaker 4>of the invalidation from the mutation to actually only fetch

1221
01:08:07.840 --> 01:08:11.159
<v Speaker 4>what's needed, so server cashes aren't necessary. It feels like

1222
01:08:11.159 --> 01:08:12.760
<v Speaker 4>a single page app word. You know, the cache is

1223
01:08:12.840 --> 01:08:15.960
<v Speaker 4>on the client, but it's actually doing this all in

1224
01:08:15.960 --> 01:08:16.680
<v Speaker 4>a single.

1225
01:08:16.880 --> 01:08:20.199
<v Speaker 2>So again, let me see if I'm getting this, because

1226
01:08:21.079 --> 01:08:23.560
<v Speaker 2>to an extent, it's kind of incidental to the fact

1227
01:08:23.560 --> 01:08:27.680
<v Speaker 2>that it's RPC. It's basically the fact that you're controlling

1228
01:08:28.439 --> 01:08:31.479
<v Speaker 2>both sides and the protocol that lets you do a

1229
01:08:31.520 --> 01:08:34.239
<v Speaker 2>lot of magic. The fact that it's RPC, like I said,

1230
01:08:34.239 --> 01:08:38.439
<v Speaker 2>it's almost incidental. It might have been some other mechanism.

1231
01:08:39.279 --> 01:08:40.720
<v Speaker 3>But what you're.

1232
01:08:40.640 --> 01:08:44.880
<v Speaker 2>Saying is this, I'm triggering an operation to receive data.

1233
01:08:45.920 --> 01:08:59.159
<v Speaker 2>I know that this operation will likely trigger redirection or

1234
01:08:59.479 --> 01:09:06.600
<v Speaker 2>transition to another page. I can prefetch or push more accurately.

1235
01:09:06.680 --> 01:09:09.920
<v Speaker 2>I can like you said tenor I use the wrong analogy,

1236
01:09:09.960 --> 01:09:13.359
<v Speaker 2>because it's not client instigated, its server instigated. The server

1237
01:09:13.560 --> 01:09:18.039
<v Speaker 2>side knows that I'm likely going to be needing that

1238
01:09:18.159 --> 01:09:23.479
<v Speaker 2>additional data. I can send it down, hold it somewhere

1239
01:09:23.479 --> 01:09:27.039
<v Speaker 2>in the client side so that when I actually needed

1240
01:09:27.159 --> 01:09:28.119
<v Speaker 2>it's already there.

1241
01:09:28.760 --> 01:09:33.640
<v Speaker 3>Basically, and that becomes even more powerful as you stream,

1242
01:09:34.399 --> 01:09:37.680
<v Speaker 3>because we could do this before with single flight mutation.

1243
01:09:37.800 --> 01:09:41.079
<v Speaker 3>As you send it, and if you spend enough time

1244
01:09:41.119 --> 01:09:43.560
<v Speaker 3>on the server, you can gather up all of the

1245
01:09:43.640 --> 01:09:46.840
<v Speaker 3>data and finally send it all back and then allow

1246
01:09:46.880 --> 01:09:51.920
<v Speaker 3>the user to navigate. But streaming allows you to respond immediately,

1247
01:09:52.640 --> 01:09:57.039
<v Speaker 3>but tick off those requests server side and then stream

1248
01:09:57.079 --> 01:10:01.840
<v Speaker 3>them down to the user and utilize utilize that connection

1249
01:10:01.920 --> 01:10:02.800
<v Speaker 3>that's already open.

1250
01:10:02.920 --> 01:10:06.439
<v Speaker 4>It's because the frameworks support a signatively. Things like suspense

1251
01:10:07.119 --> 01:10:10.479
<v Speaker 4>basically will trigger and treat your cached promise or your

1252
01:10:10.720 --> 01:10:13.720
<v Speaker 4>pre pushed promise, and a new promise would fetch identically.

1253
01:10:14.119 --> 01:10:17.880
<v Speaker 4>So in these kind of scenarios, you actually get further ahead.

1254
01:10:18.000 --> 01:10:20.760
<v Speaker 4>You can start rendering the next page before that data

1255
01:10:20.920 --> 01:10:21.560
<v Speaker 4>has arrived.

1256
01:10:22.960 --> 01:10:26.319
<v Speaker 2>And the fact that we're componentized kind of necessitates this

1257
01:10:26.399 --> 01:10:29.640
<v Speaker 2>whole thing because otherwise one of the big problems with

1258
01:10:30.159 --> 01:10:35.439
<v Speaker 2>components is that in capsulation, if you're following through on

1259
01:10:35.479 --> 01:10:41.479
<v Speaker 2>it often leads to waterfalls. So the fact and react

1260
01:10:41.520 --> 01:10:44.560
<v Speaker 2>query it back of the day at the time was

1261
01:10:44.840 --> 01:10:49.439
<v Speaker 2>so great in this regard because you fetched from one

1262
01:10:49.479 --> 01:10:52.920
<v Speaker 2>component and then it got reused the data in other

1263
01:10:53.000 --> 01:10:59.039
<v Speaker 2>components without you needing to like break in capsulation be

1264
01:10:59.279 --> 01:11:03.000
<v Speaker 2>very iplicit about it. It was totally implicit. So now

1265
01:11:03.000 --> 01:11:05.520
<v Speaker 2>you're kind of taking it to the next level in

1266
01:11:05.560 --> 01:11:07.720
<v Speaker 2>a sense this and this.

1267
01:11:08.000 --> 01:11:10.439
<v Speaker 3>Opens up new can of worms. I don't know how

1268
01:11:10.439 --> 01:11:12.720
<v Speaker 3>deeply you want to get into that, but components have

1269
01:11:12.800 --> 01:11:17.399
<v Speaker 3>you on again component level data fetching it. I'm still

1270
01:11:18.319 --> 01:11:21.640
<v Speaker 3>I think it's still really the way to go. And

1271
01:11:21.680 --> 01:11:27.199
<v Speaker 3>then thinking about thinking about the the optimizations that need

1272
01:11:27.279 --> 01:11:30.800
<v Speaker 3>to be made at the routing level and the SEO

1273
01:11:30.960 --> 01:11:33.479
<v Speaker 3>level and the page levels to get rid of waterfalls,

1274
01:11:33.479 --> 01:11:36.880
<v Speaker 3>and that you know these are optimizations and making those

1275
01:11:36.880 --> 01:11:41.359
<v Speaker 3>optimizations as easy as we can is really important, and

1276
01:11:41.439 --> 01:11:45.159
<v Speaker 3>we can do that through API design with our routing.

1277
01:11:45.359 --> 01:11:48.960
<v Speaker 3>We could do it through compilers like relay, but they

1278
01:11:49.039 --> 01:11:52.760
<v Speaker 3>are optimizations. I think at that point, I like this,

1279
01:11:53.279 --> 01:11:55.039
<v Speaker 3>I like everything that we've talked about is really.

1280
01:11:55.119 --> 01:11:57.439
<v Speaker 2>I interrupt you again because I have to say that

1281
01:11:57.600 --> 01:12:00.760
<v Speaker 2>one of the biggest downfalls of RP see back in

1282
01:12:00.800 --> 01:12:03.760
<v Speaker 2>the old days, and one that I was so concerned

1283
01:12:03.800 --> 01:12:06.760
<v Speaker 2>with that I actually at the end of my presentation

1284
01:12:06.920 --> 01:12:10.319
<v Speaker 2>or RPC, I talk about the potential downsides of RPC,

1285
01:12:10.439 --> 01:12:13.520
<v Speaker 2>and it's one of the items listed there is the

1286
01:12:13.560 --> 01:12:20.000
<v Speaker 2>fact that RPC kind of encourages waterfalls because you make

1287
01:12:20.039 --> 01:12:22.760
<v Speaker 2>a function call to get some data, and then you

1288
01:12:22.840 --> 01:12:25.880
<v Speaker 2>make another function call to get some more data, and

1289
01:12:25.960 --> 01:12:28.520
<v Speaker 2>another function called to get some more data, so you

1290
01:12:28.640 --> 01:12:34.319
<v Speaker 2>end up with chatty protocols and waterfalls because the implicit

1291
01:12:34.359 --> 01:12:37.479
<v Speaker 2>assumption is that it works like functions and functions are cheap.

1292
01:12:38.479 --> 01:12:43.199
<v Speaker 2>And what you're saying is that you're overcoming it by

1293
01:12:43.439 --> 01:12:47.359
<v Speaker 2>being smart realizing you know, you can still write it

1294
01:12:47.039 --> 01:12:51.800
<v Speaker 2>like it is if it's a waterfall, but you've triggered

1295
01:12:51.840 --> 01:12:55.039
<v Speaker 2>the requests, the generation of the code that's going to

1296
01:12:55.079 --> 01:12:58.399
<v Speaker 2>be requested in the third request, in the first request,

1297
01:12:58.600 --> 01:13:02.439
<v Speaker 2>and already be even scented down, so by the time

1298
01:13:02.520 --> 01:13:06.479
<v Speaker 2>I get to that third RPC call, it's returning immediately

1299
01:13:06.600 --> 01:13:08.359
<v Speaker 2>because all the data is already there.

1300
01:13:08.520 --> 01:13:12.800
<v Speaker 3>Yeah, we're getting into what I would call orchestration of

1301
01:13:12.880 --> 01:13:17.600
<v Speaker 3>our PC, like RPC orchestration because and I think that

1302
01:13:18.399 --> 01:13:21.640
<v Speaker 3>you know, single flight mutations is one kind of flavor

1303
01:13:22.119 --> 01:13:25.920
<v Speaker 3>of utilizing rpcs and orchestrating like data flow through rpcs.

1304
01:13:26.279 --> 01:13:31.760
<v Speaker 3>There's other ones like routing is a big RPC orchestrator really,

1305
01:13:31.760 --> 01:13:35.039
<v Speaker 3>anything that's providing life cycle based on user input, so

1306
01:13:35.359 --> 01:13:37.520
<v Speaker 3>even forms or the framework itself.

1307
01:13:37.520 --> 01:13:43.880
<v Speaker 4>It's it's tricky because the biggest cause of waterfalls, in

1308
01:13:43.920 --> 01:13:48.840
<v Speaker 4>my opinion, in terms of co location is often those

1309
01:13:48.880 --> 01:13:52.119
<v Speaker 4>two causes. There's the code splitting. We want to code

1310
01:13:52.159 --> 01:13:54.920
<v Speaker 4>split at the route level generally, like you know, you

1311
01:13:54.920 --> 01:13:57.520
<v Speaker 4>can do lazy components wherever, but because of the code splitting,

1312
01:13:58.279 --> 01:14:01.000
<v Speaker 4>it's hard to fetch the day before you have the

1313
01:14:01.039 --> 01:14:04.439
<v Speaker 4>code to pitch the data essentially, So that's what pushes

1314
01:14:04.479 --> 01:14:07.239
<v Speaker 4>us to hoisting. And it's necessary because you don't want

1315
01:14:07.239 --> 01:14:08.600
<v Speaker 4>to load all the JABSKO for your whole app.

1316
01:14:08.640 --> 01:14:11.960
<v Speaker 1>But if you didn't, if.

1317
01:14:11.840 --> 01:14:16.199
<v Speaker 4>You didn't actually do that, then the other second thing

1318
01:14:16.239 --> 01:14:20.039
<v Speaker 4>you hit on the client. Is that co location of

1319
01:14:20.159 --> 01:14:24.000
<v Speaker 4>UI and components can lead to waterfalls depending on how

1320
01:14:24.079 --> 01:14:27.560
<v Speaker 4>the renderer handles the ACYNC in the in the rendering.

1321
01:14:27.680 --> 01:14:30.439
<v Speaker 4>So like, for example, let's say every time you hit

1322
01:14:30.479 --> 01:14:32.880
<v Speaker 4>a promise, you throw and it then re renders the

1323
01:14:32.880 --> 01:14:35.039
<v Speaker 4>whole thing. Well, if there's a promise after that, well

1324
01:14:35.399 --> 01:14:37.199
<v Speaker 4>then you're causing a waterfall, right.

1325
01:14:37.119 --> 01:14:40.560
<v Speaker 2>And I'm saying that because RPC potentially brings in the

1326
01:14:40.640 --> 01:14:44.680
<v Speaker 2>third cause, which is just the fact that people can

1327
01:14:45.239 --> 01:14:48.119
<v Speaker 2>look at the code think that if it looks like

1328
01:14:48.199 --> 01:14:51.279
<v Speaker 2>a function, then it is a function, and just write

1329
01:14:51.279 --> 01:14:54.800
<v Speaker 2>the code in a way that's very inefficient and generates

1330
01:14:54.800 --> 01:14:57.479
<v Speaker 2>a waterfall regardless of the framework.

1331
01:14:57.520 --> 01:15:00.239
<v Speaker 4>Right right, which is which is well, I mean there's

1332
01:15:00.239 --> 01:15:04.239
<v Speaker 4>two different types of waterfalls, necessary waterfalls and unnecessari stary waterfalls.

1333
01:15:04.239 --> 01:15:08.239
<v Speaker 4>Necessary waterfalls can still be made unnecessary if you say,

1334
01:15:08.359 --> 01:15:10.239
<v Speaker 4>move everything into a single function call and you know,

1335
01:15:10.319 --> 01:15:11.319
<v Speaker 4>put them together whatever.

1336
01:15:11.560 --> 01:15:13.119
<v Speaker 1>But there's a dependency.

1337
01:15:13.199 --> 01:15:15.840
<v Speaker 4>But there's a dependency, right, Like there's like you need

1338
01:15:15.880 --> 01:15:18.600
<v Speaker 4>to get the users to get or get the user

1339
01:15:18.640 --> 01:15:20.399
<v Speaker 4>to get the posts for some reason. But if you

1340
01:15:20.399 --> 01:15:22.479
<v Speaker 4>could fetch them both off the user ID, like the

1341
01:15:22.520 --> 01:15:24.640
<v Speaker 4>poster is user ID and the user information off use ID,

1342
01:15:24.760 --> 01:15:27.399
<v Speaker 4>then that's an unnecessary waterfall. The problem is we cause

1343
01:15:27.479 --> 01:15:31.960
<v Speaker 4>unnecessary waterfalls all the time in our UI rendering. If

1344
01:15:32.079 --> 01:15:35.159
<v Speaker 4>if because we go okay, well the posts go under

1345
01:15:35.199 --> 01:15:39.319
<v Speaker 4>the user section, and then you you basically by by

1346
01:15:39.520 --> 01:15:41.479
<v Speaker 4>using ACYNC in your component, you're basically like putting in

1347
01:15:41.479 --> 01:15:44.039
<v Speaker 4>a weight in the middle and blocking. Blocking rendering sucks

1348
01:15:44.039 --> 01:15:48.399
<v Speaker 4>a weights suck for rendering UI. You don't want ACYNC

1349
01:15:48.399 --> 01:15:51.880
<v Speaker 4>components really it React gets away with it on the

1350
01:15:51.880 --> 01:15:54.640
<v Speaker 4>server because it's on the server, and server waterfalls are

1351
01:15:54.680 --> 01:15:55.479
<v Speaker 4>not as bad.

1352
01:15:55.520 --> 01:15:56.880
<v Speaker 1>But I'd argue against that.

1353
01:15:56.920 --> 01:16:00.159
<v Speaker 4>I'm generally speaking it's this co location of data and

1354
01:16:00.319 --> 01:16:04.199
<v Speaker 4>UI that causes this blocking. The reason I'm stressing on

1355
01:16:04.239 --> 01:16:08.760
<v Speaker 4>this is because it's solvable with signals, Like basically, if

1356
01:16:08.840 --> 01:16:11.880
<v Speaker 4>you're doing fine green rendering, there's no reason to await

1357
01:16:12.079 --> 01:16:14.439
<v Speaker 4>or block except for where the data is finally being

1358
01:16:14.520 --> 01:16:16.960
<v Speaker 4>used at the end of the data chain, which means

1359
01:16:16.960 --> 01:16:21.399
<v Speaker 4>that you could parallelize this data fetching for unnecessary waterfalls

1360
01:16:21.680 --> 01:16:27.479
<v Speaker 4>not only for like sibling components, but also nested components.

1361
01:16:27.520 --> 01:16:30.720
<v Speaker 4>Because the component aspect doesn't matter, you're not blocking to

1362
01:16:30.760 --> 01:16:34.960
<v Speaker 4>re render the the you know this component, you're literally

1363
01:16:35.079 --> 01:16:37.279
<v Speaker 4>just going, oh, I actually need this in this text,

1364
01:16:37.279 --> 01:16:40.800
<v Speaker 4>in this div I'm going to block there and everything beside.

1365
01:16:40.840 --> 01:16:44.079
<v Speaker 1>It's a sibling. You basically turn all you flatten the

1366
01:16:44.079 --> 01:16:44.600
<v Speaker 1>whole tree.

1367
01:16:44.760 --> 01:16:46.640
<v Speaker 2>And this is something you know, just to be clear,

1368
01:16:47.000 --> 01:16:51.880
<v Speaker 2>just you do all this magic for us automatically, right,

1369
01:16:52.159 --> 01:16:53.439
<v Speaker 2>It's not something.

1370
01:16:53.880 --> 01:16:56.920
<v Speaker 4>I mean, this is run to time what I'm talking about.

1371
01:16:56.960 --> 01:16:58.640
<v Speaker 4>The funniest thing is it's not actually magic. It's just

1372
01:16:58.680 --> 01:17:02.119
<v Speaker 4>the way signals work. This is something that I kind

1373
01:17:02.159 --> 01:17:03.800
<v Speaker 4>of discovered a while ago when I was doing fine

1374
01:17:03.800 --> 01:17:08.760
<v Speaker 4>green rendering. That pine green rendering is actually it flattens

1375
01:17:08.760 --> 01:17:11.199
<v Speaker 4>the tree. That basically what does there's no components anymore.

1376
01:17:11.239 --> 01:17:13.520
<v Speaker 4>You just have a bunch of independent things. So if

1377
01:17:13.520 --> 01:17:14.119
<v Speaker 4>you fly on the.

1378
01:17:14.039 --> 01:17:18.479
<v Speaker 2>Tree, because signals don't care about component boundaries essentially.

1379
01:17:18.039 --> 01:17:20.039
<v Speaker 4>So if you fly in the tree and talk about

1380
01:17:20.279 --> 01:17:23.479
<v Speaker 4>async that way, then it's the same thing. Nothing has

1381
01:17:23.520 --> 01:17:26.119
<v Speaker 4>to block unless it actually has a data dependency on itself.

1382
01:17:26.159 --> 01:17:30.199
<v Speaker 4>So necessary waterfalls still walk, but things that are not

1383
01:17:30.279 --> 01:17:33.479
<v Speaker 4>necessary waterfalls don't need to block. So I think this

1384
01:17:33.640 --> 01:17:36.560
<v Speaker 4>is another wind that you're going to see in the

1385
01:17:36.560 --> 01:17:39.600
<v Speaker 4>signal of libraries. So people haven't really been leveraging this yet,

1386
01:17:39.760 --> 01:17:43.359
<v Speaker 4>but it's coming soon and we know what it looks like.

1387
01:17:43.600 --> 01:17:45.039
<v Speaker 1>Right, So I'm going to jump in here because we're

1388
01:17:45.079 --> 01:17:47.800
<v Speaker 1>running a little long here on time, and I have

1389
01:17:47.840 --> 01:17:50.239
<v Speaker 1>a suspicion with anything that Dan gets into. We could

1390
01:17:50.239 --> 01:17:53.760
<v Speaker 1>talk to for two or three hours when he gets

1391
01:17:53.800 --> 01:17:56.520
<v Speaker 1>into a topic. So before we wrap up and head

1392
01:17:56.520 --> 01:18:01.399
<v Speaker 1>to picks, is there any last word on our PCs?

1393
01:18:01.800 --> 01:18:02.279
<v Speaker 1>In summary?

1394
01:18:02.319 --> 01:18:04.800
<v Speaker 2>And all I can say is my summary is that

1395
01:18:04.840 --> 01:18:08.439
<v Speaker 2>we absolutely positively need to get Ryan and Tanner on

1396
01:18:08.720 --> 01:18:12.000
<v Speaker 2>to continue this conversation because we are scratching the surface.

1397
01:18:12.039 --> 01:18:12.720
<v Speaker 2>It feels to me.

1398
01:18:12.920 --> 01:18:15.960
<v Speaker 3>Yeah, I mean, even just what Ryan brought up about,

1399
01:18:16.000 --> 01:18:20.920
<v Speaker 3>like all the ACYNC signal stuff, there's a lot that

1400
01:18:20.960 --> 01:18:21.600
<v Speaker 3>we could go into.

1401
01:18:21.680 --> 01:18:24.199
<v Speaker 2>Yeah, but then stuck is built on react. What does

1402
01:18:24.239 --> 01:18:25.960
<v Speaker 2>that have to do with the sink signals?

1403
01:18:26.359 --> 01:18:28.439
<v Speaker 3>Maybe you say something about that, let's say, let's say

1404
01:18:28.479 --> 01:18:31.600
<v Speaker 3>it for later, Let's save that for later. We are

1405
01:18:31.680 --> 01:18:35.119
<v Speaker 3>running along. There's a lot to talk about. But and

1406
01:18:35.199 --> 01:18:37.279
<v Speaker 3>you know, hold on, you brought up a good point

1407
01:18:37.279 --> 01:18:43.800
<v Speaker 3>though about the necessary waterfalls as well, Like necessary waterfalls

1408
01:18:43.800 --> 01:18:45.720
<v Speaker 3>are still there and they still need to be handled,

1409
01:18:46.199 --> 01:18:48.560
<v Speaker 3>And like I feel like I've been spending a lot

1410
01:18:48.560 --> 01:18:51.159
<v Speaker 3>of time on that as well as like, you can

1411
01:18:51.199 --> 01:18:54.840
<v Speaker 3>still make mistakes there that you can't solve with a

1412
01:18:54.880 --> 01:18:57.760
<v Speaker 3>bundler or you can't solve with with signals or anything

1413
01:18:57.760 --> 01:19:00.239
<v Speaker 3>like that. So but you can solve some of those

1414
01:19:00.239 --> 01:19:04.680
<v Speaker 3>problems with with good API design and prefetching and and

1415
01:19:04.720 --> 01:19:06.840
<v Speaker 3>you know, so, I think there's a lot more to

1416
01:19:06.960 --> 01:19:11.119
<v Speaker 3>unpack there. I don't really want to. Okay, there's a

1417
01:19:11.159 --> 01:19:16.600
<v Speaker 3>reason that tan Stack everything is built to be agnostic.

1418
01:19:17.119 --> 01:19:20.359
<v Speaker 3>I'm a very firm believer and React and obviously it's

1419
01:19:20.399 --> 01:19:24.600
<v Speaker 3>it's our most supportive framework, but it by no means perfect.

1420
01:19:24.760 --> 01:19:29.159
<v Speaker 3>It's it's not, it's but it's amazing, it's great. There

1421
01:19:29.319 --> 01:19:32.800
<v Speaker 3>there's pros and cons to every UI framework, but I

1422
01:19:33.119 --> 01:19:38.560
<v Speaker 3>I'm very much preparing for a future where there are bigger,

1423
01:19:38.720 --> 01:19:44.520
<v Speaker 3>better UI frameworks doing amazing things. And the things that

1424
01:19:44.680 --> 01:19:48.319
<v Speaker 3>Ryan just teased and talking about with like signals and

1425
01:19:48.399 --> 01:19:53.479
<v Speaker 3>acinc and flattening signals to to you know, around suspense

1426
01:19:53.560 --> 01:19:58.520
<v Speaker 3>and things like that, that stuff's really exciting. Uh I.

1427
01:19:58.560 --> 01:20:00.399
<v Speaker 3>And I'm just gonna gush a little bit right here

1428
01:20:00.439 --> 01:20:03.359
<v Speaker 3>before we end and say that the things that Ryan

1429
01:20:03.600 --> 01:20:06.840
<v Speaker 3>is working on with solid two point zero have made

1430
01:20:06.840 --> 01:20:10.439
<v Speaker 3>me the most excited about what's technically possible with the

1431
01:20:10.560 --> 01:20:15.880
<v Speaker 3>UI framework since I discovered React and discovered hooks and

1432
01:20:16.359 --> 01:20:19.079
<v Speaker 3>really got into it. So hopefully it's a good teaser

1433
01:20:19.159 --> 01:20:21.000
<v Speaker 3>for maybe what we can talk about next time.

1434
01:20:21.119 --> 01:20:25.920
<v Speaker 2>Thank you, look, I'm here for it each and every

1435
01:20:25.920 --> 01:20:28.279
<v Speaker 2>time you just say when I'll have you on the

1436
01:20:28.319 --> 01:20:28.840
<v Speaker 2>show again.

1437
01:20:29.000 --> 01:20:32.760
<v Speaker 1>Alrighty well, thanks to Ryan and Tanner for scratching the

1438
01:20:32.760 --> 01:20:37.479
<v Speaker 1>surface on our PCs and waiting our whistle for more

1439
01:20:37.479 --> 01:20:40.199
<v Speaker 1>discussion on the truly geeky stuff that we talk about.

1440
01:20:41.399 --> 01:20:43.399
<v Speaker 1>With that, we'll move to picks picture, the part of

1441
01:20:43.439 --> 01:20:45.800
<v Speaker 1>the show where we get to talk about anything we

1442
01:20:45.840 --> 01:20:47.840
<v Speaker 1>want to talk about, could be tech related, could be

1443
01:20:47.880 --> 01:20:52.880
<v Speaker 1>not tech related. We run the gamut. I will start

1444
01:20:52.880 --> 01:20:55.439
<v Speaker 1>off with what I consider the high point of any

1445
01:20:55.439 --> 01:20:57.640
<v Speaker 1>of our episodes, which is the dad jokes of the week.

1446
01:20:58.800 --> 01:21:00.960
<v Speaker 1>So the other day I was watching a show called

1447
01:21:01.000 --> 01:21:03.760
<v Speaker 1>ten Ways to Avoid a Shark attack, and I was

1448
01:21:03.800 --> 01:21:06.359
<v Speaker 1>surprised that stay out of the water wasn't on the list.

1449
01:21:06.520 --> 01:21:11.279
<v Speaker 2>There was actually a skit about that on YouTube where

1450
01:21:11.680 --> 01:21:15.279
<v Speaker 2>they do a parody of a horror movie when there's

1451
01:21:15.359 --> 01:21:18.399
<v Speaker 2>the shark in the pool, and everybody's like, oh my god,

1452
01:21:18.439 --> 01:21:19.560
<v Speaker 2>there's a shark in the pool.

1453
01:21:19.600 --> 01:21:20.359
<v Speaker 3>What can we do in this?

1454
01:21:20.479 --> 01:21:22.239
<v Speaker 2>The one guy keeps on saying.

1455
01:21:22.479 --> 01:21:25.359
<v Speaker 3>Just don't go into the pool, right right.

1456
01:21:25.439 --> 01:21:29.880
<v Speaker 1>So yeah, my drum joke here is not working. And

1457
01:21:29.920 --> 01:21:32.600
<v Speaker 1>I'm really bummed because that adds all the impact. So

1458
01:21:32.760 --> 01:21:35.760
<v Speaker 1>I'm gonna have to sue a riverside for that one.

1459
01:21:36.319 --> 01:21:39.640
<v Speaker 1>So my wife looked at my feet this morning and said, honey,

1460
01:21:39.640 --> 01:21:41.720
<v Speaker 1>your socks don't match. And I said, that's funny. I

1461
01:21:41.720 --> 01:21:43.399
<v Speaker 1>have another pair just like them in the drawer. But

1462
01:21:43.520 --> 01:21:47.760
<v Speaker 1>it boom. And then finally, in a surprising announcement, Head

1463
01:21:47.800 --> 01:21:52.279
<v Speaker 1>Shoulders have decided to discontinue their popular anti dandruff shampoo line.

1464
01:21:52.359 --> 01:21:55.359
<v Speaker 1>The decision left many people scratching their heads. I expected

1465
01:21:55.840 --> 01:21:57.880
<v Speaker 1>not that I need that, as you can tell by

1466
01:21:57.920 --> 01:22:01.159
<v Speaker 1>the video. So those are the dad jokes of the week. Dan,

1467
01:22:01.399 --> 01:22:02.600
<v Speaker 1>you got any picks for us?

1468
01:22:03.079 --> 01:22:05.479
<v Speaker 3>Yeah? So two funny things.

1469
01:22:06.000 --> 01:22:08.920
<v Speaker 2>First of all, Avishai Shalom, we've had on this show

1470
01:22:09.079 --> 01:22:13.039
<v Speaker 2>a while back, made an interesting observation on X and

1471
01:22:13.079 --> 01:22:15.920
<v Speaker 2>I literally quote him because he just wrote it very well.

1472
01:22:16.319 --> 01:22:19.720
<v Speaker 2>He was talking about the fact that will Ai destroy

1473
01:22:19.800 --> 01:22:24.960
<v Speaker 2>the Worldwide Web because the bit it's destroying the web's

1474
01:22:25.039 --> 01:22:29.399
<v Speaker 2>business model, and he says it's actually worse. NLM's marked

1475
01:22:29.399 --> 01:22:32.720
<v Speaker 2>the end of open networks because the cost of producing

1476
01:22:32.880 --> 01:22:37.399
<v Speaker 2>junk and malicious content is now near zero. We already

1477
01:22:37.479 --> 01:22:41.239
<v Speaker 2>see this in LinkedIn, Facebook, et cetera, but more alarming

1478
01:22:41.359 --> 01:22:46.239
<v Speaker 2>in GitHub and NPM. And it's a very interesting observation,

1479
01:22:46.359 --> 01:22:49.680
<v Speaker 2>I think, And so that would be my first pick,

1480
01:22:49.720 --> 01:22:52.680
<v Speaker 2>that observation. And the second one is this funny story

1481
01:22:52.680 --> 01:22:56.039
<v Speaker 2>that just came out about the fact that the UK

1482
01:22:56.239 --> 01:22:59.840
<v Speaker 2>government is trying to sue four Chan. Turns out that

1483
01:22:59.880 --> 01:23:04.079
<v Speaker 2>the the UK passed the law that requires age verification

1484
01:23:04.760 --> 01:23:11.000
<v Speaker 2>before you access potentially offensive content, and four Chan, being

1485
01:23:11.039 --> 01:23:16.000
<v Speaker 2>an American company, is not complying with the UK laws,

1486
01:23:16.319 --> 01:23:21.279
<v Speaker 2>so they're actually trying to force them to comply by

1487
01:23:21.520 --> 01:23:26.039
<v Speaker 2>they sent them a threatening email and they basically responded

1488
01:23:26.159 --> 01:23:30.359
<v Speaker 2>with First Amendment bitches. And it will be interesting to

1489
01:23:30.399 --> 01:23:32.880
<v Speaker 2>see where this goes. So yeah, that would be my

1490
01:23:33.000 --> 01:23:38.039
<v Speaker 2>second pick. And I think you can tell which side

1491
01:23:38.079 --> 01:23:41.760
<v Speaker 2>them on in this argument, or put it this way,

1492
01:23:41.920 --> 01:23:44.479
<v Speaker 2>The worst thing that has ever ever happened to the web,

1493
01:23:44.520 --> 01:23:46.399
<v Speaker 2>I think is GDPR.

1494
01:23:46.960 --> 01:23:47.359
<v Speaker 3>Yes, and.

1495
01:23:50.079 --> 01:23:51.600
<v Speaker 2>Yeah, we don't need any more of that.

1496
01:23:52.439 --> 01:23:55.600
<v Speaker 3>So yeah, those would be my two picks for today.

1497
01:23:55.720 --> 01:23:57.720
<v Speaker 1>All right, Tanner, you got any picks for us?

1498
01:23:57.920 --> 01:24:01.800
<v Speaker 3>Picks? Picks them of these pics? Do these picks needed?

1499
01:24:02.039 --> 01:24:06.640
<v Speaker 3>Is random the room? The randomer the better, randomer the better.

1500
01:24:07.000 --> 01:24:09.880
<v Speaker 1>Okay, why you think about it, We'll go to Ryan.

1501
01:24:09.960 --> 01:24:11.079
<v Speaker 1>See if Ryan anything.

1502
01:24:11.960 --> 01:24:14.880
<v Speaker 4>Ryan, I'm just gonna think here because I've been so busy.

1503
01:24:15.039 --> 01:24:17.279
<v Speaker 4>If you guys don't know, I have a little baby

1504
01:24:17.439 --> 01:24:20.760
<v Speaker 4>at home, so I have that to your pick. Yeah,

1505
01:24:20.800 --> 01:24:24.119
<v Speaker 4>I mean, I mean, honestly, I don't get to watch

1506
01:24:24.199 --> 01:24:26.199
<v Speaker 4>or check out nearly as much as I want to

1507
01:24:26.479 --> 01:24:28.920
<v Speaker 4>that and like kids shows. I recently watched what it

1508
01:24:28.960 --> 01:24:30.600
<v Speaker 4>was like K Pop Demon Hunters.

1509
01:24:31.319 --> 01:24:32.920
<v Speaker 1>I've heard real good things about that one.

1510
01:24:32.960 --> 01:24:35.479
<v Speaker 4>Yeah, you know, I mean if I mean, people are

1511
01:24:35.479 --> 01:24:38.000
<v Speaker 4>gonna disagree with me, but it gave me like it's

1512
01:24:38.039 --> 01:24:42.279
<v Speaker 4>got almost like Sailor Moon vibes, but like some big production,

1513
01:24:43.720 --> 01:24:45.159
<v Speaker 4>you know, thang it.

1514
01:24:45.159 --> 01:24:46.640
<v Speaker 1>It was fun, the kids liked it.

1515
01:24:47.600 --> 01:24:49.920
<v Speaker 2>Since you mentioned the show, and to give Tennor a

1516
01:24:50.000 --> 01:24:52.119
<v Speaker 2>little bit more time, I have to say that I

1517
01:24:52.319 --> 01:24:57.000
<v Speaker 2>was really disappointed with the second season of San I mean,

1518
01:24:57.199 --> 01:25:00.920
<v Speaker 2>they had an entire episode which was literally funeral. I

1519
01:25:00.960 --> 01:25:02.560
<v Speaker 2>mean what the half.

1520
01:25:02.640 --> 01:25:05.159
<v Speaker 1>I haven't watched that one, so I can't.

1521
01:25:05.640 --> 01:25:07.359
<v Speaker 4>Oh, I know, I know what else I want to

1522
01:25:07.359 --> 01:25:09.319
<v Speaker 4>say without giving away too much. I actually enjoyed the

1523
01:25:09.399 --> 01:25:11.960
<v Speaker 4>ending of season three of Squid game station to have

1524
01:25:12.000 --> 01:25:15.359
<v Speaker 4>split it, but oh really, but I like the second

1525
01:25:15.399 --> 01:25:18.479
<v Speaker 4>third season together. It ended in a I like the

1526
01:25:18.479 --> 01:25:20.800
<v Speaker 4>way it ended, So maybe I'm made me minority. But

1527
01:25:20.840 --> 01:25:23.560
<v Speaker 4>I actually if if if you're willing to watch the

1528
01:25:23.600 --> 01:25:26.000
<v Speaker 4>second season, that you should finish it with the third season.

1529
01:25:26.279 --> 01:25:28.479
<v Speaker 1>Well, yeah, is really into that one, and he was

1530
01:25:28.520 --> 01:25:30.359
<v Speaker 1>explaining the plot to me. I haven't watched the NAVA,

1531
01:25:30.399 --> 01:25:32.640
<v Speaker 1>but he's explaining to me, and I mean, it sounded

1532
01:25:33.039 --> 01:25:35.079
<v Speaker 1>the first season is just creeped me out. It was

1533
01:25:35.119 --> 01:25:36.880
<v Speaker 1>more of a Hunger Games type vibe and it just

1534
01:25:37.000 --> 01:25:39.720
<v Speaker 1>sort of creeped me out. But he was explaining what

1535
01:25:39.880 --> 01:25:41.720
<v Speaker 1>was going on in the second third seasons to me,

1536
01:25:41.800 --> 01:25:44.279
<v Speaker 1>and that's that's pretty intriguing the way they're doing it

1537
01:25:44.680 --> 01:25:45.000
<v Speaker 1>right now.

1538
01:25:45.119 --> 01:25:46.880
<v Speaker 2>Thank you word for it, as long as you don't

1539
01:25:46.880 --> 01:25:49.479
<v Speaker 2>tell me that you enjoyed the eighth season of Game

1540
01:25:49.479 --> 01:25:50.039
<v Speaker 2>of Thrones.

1541
01:25:52.000 --> 01:25:54.640
<v Speaker 1>No, no, that was that was not my favorite. All right, Tanner,

1542
01:25:54.680 --> 01:25:55.439
<v Speaker 1>we gave you some time.

1543
01:25:55.479 --> 01:25:58.119
<v Speaker 3>What do you got. I mean, I like Ryan I,

1544
01:25:58.199 --> 01:26:02.760
<v Speaker 3>so I don't consume a whole lot of of what's

1545
01:26:02.800 --> 01:26:06.920
<v Speaker 3>out there. I'm I'm more of a builder, but there

1546
01:26:07.159 --> 01:26:09.520
<v Speaker 3>there are a few things that I do I do enjoy.

1547
01:26:09.600 --> 01:26:14.359
<v Speaker 3>So I'm overly hyped for the new season of Stranger

1548
01:26:14.399 --> 01:26:17.800
<v Speaker 3>Things coming out, and so we've been rewatching all of

1549
01:26:17.840 --> 01:26:20.279
<v Speaker 3>the seasons before it. So that means that I've seen

1550
01:26:20.279 --> 01:26:23.479
<v Speaker 3>the fourth the first season four times, the second season

1551
01:26:23.520 --> 01:26:27.239
<v Speaker 3>three one, and so forth, and we're watching the fourth

1552
01:26:27.279 --> 01:26:29.800
<v Speaker 3>season four the second time now, and then we're going

1553
01:26:29.840 --> 01:26:31.840
<v Speaker 3>to anxiously await number five. Yeah.

1554
01:26:32.079 --> 01:26:35.359
<v Speaker 2>That's an interesting argument that I had with aj about

1555
01:26:36.920 --> 01:26:41.199
<v Speaker 2>fantasy book series that tend to come, you know, not

1556
01:26:41.279 --> 01:26:44.600
<v Speaker 2>yet finished, and then the next book comes three years

1557
01:26:44.640 --> 01:26:47.560
<v Speaker 2>after the previous book, and you don't remember anything. And

1558
01:26:47.640 --> 01:26:50.520
<v Speaker 2>I never have it in me to reread that those

1559
01:26:50.600 --> 01:26:53.640
<v Speaker 2>previous books. So you're basically you do have it in

1560
01:26:53.680 --> 01:26:55.399
<v Speaker 2>you to rewatch the entire series.

1561
01:26:55.439 --> 01:26:58.800
<v Speaker 3>They were they were so good, and you know, Stranger

1562
01:26:58.880 --> 01:27:03.479
<v Speaker 3>Things connoisseurs will tell you, well, this season was worse

1563
01:27:03.520 --> 01:27:07.399
<v Speaker 3>and this season was terrible, and but like going back

1564
01:27:07.439 --> 01:27:10.439
<v Speaker 3>and watching them, I mean, I'm it's been a long

1565
01:27:10.439 --> 01:27:12.600
<v Speaker 3>time since the first one came out, so like, I

1566
01:27:12.600 --> 01:27:15.359
<v Speaker 3>am very much more adult now than I was then

1567
01:27:15.720 --> 01:27:20.039
<v Speaker 3>watching them, and just the the acting from these kids

1568
01:27:20.319 --> 01:27:25.399
<v Speaker 3>is just incredible. It really is so good. And and

1569
01:27:25.439 --> 01:27:28.119
<v Speaker 3>the writing for for how quick they were taking out

1570
01:27:28.159 --> 01:27:31.439
<v Speaker 3>the first couple of seasons, like the writing in some places,

1571
01:27:31.479 --> 01:27:33.239
<v Speaker 3>I was like, okay, like that could have been better,

1572
01:27:33.239 --> 01:27:37.399
<v Speaker 3>But for the most part, we're just spoiled with great content,

1573
01:27:37.560 --> 01:27:43.039
<v Speaker 3>like what a fun story, a great story. And yeah,

1574
01:27:43.159 --> 01:27:45.119
<v Speaker 3>I was just telling my wife. Season four got a

1575
01:27:45.159 --> 01:27:48.159
<v Speaker 3>little dicey because it started feeling really evil, and I

1576
01:27:48.199 --> 01:27:49.399
<v Speaker 3>was like, well, I don't know if I want to

1577
01:27:49.439 --> 01:27:51.039
<v Speaker 3>take part in this anymore. And then all of a

1578
01:27:51.039 --> 01:27:53.920
<v Speaker 3>sudden it went super sci fi and I was like, okay,

1579
01:27:53.960 --> 01:27:59.039
<v Speaker 3>this is awesome. So yeah, we've been watching Stranger Things

1580
01:27:59.079 --> 01:28:02.880
<v Speaker 3>and that's about the only like one episode at night

1581
01:28:02.960 --> 01:28:06.880
<v Speaker 3>and then I'm asleep, so that's about the amount of

1582
01:28:06.880 --> 01:28:08.119
<v Speaker 3>time that I have to consume.

1583
01:28:08.399 --> 01:28:11.600
<v Speaker 2>How old are your kids, if I might ask, I.

1584
01:28:11.600 --> 01:28:15.720
<v Speaker 3>Have a a seven year old, a four year old,

1585
01:28:16.039 --> 01:28:20.520
<v Speaker 3>and a almost two year old, So well, I'm not

1586
01:28:21.119 --> 01:28:25.960
<v Speaker 3>they're not watching Stranger Things right now? For them? Is

1587
01:28:26.119 --> 01:28:28.760
<v Speaker 3>I just really I just introduced them to spy kids

1588
01:28:30.119 --> 01:28:33.600
<v Speaker 3>and they are like, this is the coolest series ever made,

1589
01:28:34.319 --> 01:28:37.239
<v Speaker 3>So you know, they're they're living in a different world

1590
01:28:37.319 --> 01:28:41.359
<v Speaker 3>right now. That's just as cool, but way more child friendly.

1591
01:28:42.079 --> 01:28:44.680
<v Speaker 2>No, I was asking for the perspective of your free

1592
01:28:44.720 --> 01:28:48.119
<v Speaker 2>time because, like Ryan said, then you have little children

1593
01:28:48.159 --> 01:28:48.520
<v Speaker 2>at home.

1594
01:28:48.880 --> 01:28:51.880
<v Speaker 3>Yeah, we both have little children, and I know that

1595
01:28:52.159 --> 01:28:56.039
<v Speaker 3>I know from talking to Fran that they consume, happily

1596
01:28:56.359 --> 01:29:00.520
<v Speaker 3>consume a lot of our time. So yeah, I it's

1597
01:29:00.560 --> 01:29:03.840
<v Speaker 3>basically at night for maybe an hour that you know,

1598
01:29:03.880 --> 01:29:06.640
<v Speaker 3>we get to indulge in something.

1599
01:29:06.760 --> 01:29:10.000
<v Speaker 2>So all I can say though is from watching from

1600
01:29:10.039 --> 01:29:13.399
<v Speaker 2>the other side as it were enjoyed while it lasts.

1601
01:29:13.520 --> 01:29:15.159
<v Speaker 3>Yes, oh yeah for sure.

1602
01:29:15.279 --> 01:29:18.680
<v Speaker 1>Yeah, mine are twenty five, about to get married twenty

1603
01:29:18.720 --> 01:29:23.439
<v Speaker 1>two and Congratulateen, and so yeah, we have a lot

1604
01:29:23.479 --> 01:29:26.239
<v Speaker 1>more a little more free time. But yeah, I missed

1605
01:29:26.279 --> 01:29:28.119
<v Speaker 1>some of those. I'm looking forward to grandkids and be

1606
01:29:28.199 --> 01:29:30.079
<v Speaker 1>able to have the kids into then say here you go,

1607
01:29:31.279 --> 01:29:31.560
<v Speaker 1>you know.

1608
01:29:31.680 --> 01:29:35.000
<v Speaker 2>Yeah, well my baby goes twenty three years old working

1609
01:29:35.039 --> 01:29:35.479
<v Speaker 2>in tech.

1610
01:29:36.720 --> 01:29:37.199
<v Speaker 3>Very cool.

1611
01:29:37.800 --> 01:29:40.159
<v Speaker 1>Yeah all right, So with that, we're going to wrap

1612
01:29:40.199 --> 01:29:42.239
<v Speaker 1>this up and hopefully we'll have these two backing in

1613
01:29:42.319 --> 01:29:45.840
<v Speaker 1>to continue our discussion in the meantime. Thanks for watching

1614
01:29:45.880 --> 01:29:48.159
<v Speaker 1>slash listening, and we'll talk at you next time.

1615
01:29:48.279 --> 01:29:50.880
<v Speaker 3>Bye.
