WEBVTT

1
00:00:05.200 --> 00:00:08.560
<v Speaker 1>Hey, folks, welcome back to another episode of JavaScript Jabber.

2
00:00:08.960 --> 00:00:11.359
<v Speaker 1>This week, on our panel, we have Dan Shapier.

3
00:00:11.720 --> 00:00:13.519
<v Speaker 2>Hey from a still warm Tel Aviv.

4
00:00:14.640 --> 00:00:18.519
<v Speaker 3>We also have Steve Edwards Hello from Oregon where it

5
00:00:18.600 --> 00:00:23.519
<v Speaker 3>is finally officially fall, and a j O'Neill.

6
00:00:24.199 --> 00:00:26.320
<v Speaker 4>Yo yo yo, coming at you live from now the

7
00:00:26.399 --> 00:00:29.760
<v Speaker 4>fourth straight day of twenty four to seven. Vertigo.

8
00:00:30.480 --> 00:00:32.880
<v Speaker 1>Well that sounds fun. My mom went through something like that.

9
00:00:32.920 --> 00:00:36.320
<v Speaker 1>She actually went to the er, but they just told her, yeah,

10
00:00:36.320 --> 00:00:39.039
<v Speaker 1>she had some kind of vertigo. Anyway, I'm Charles max

11
00:00:39.079 --> 00:00:42.079
<v Speaker 1>Wood from Top End Devs, and this week we are

12
00:00:42.119 --> 00:00:47.600
<v Speaker 1>talking about our stimulus and turbo. If you're if you

13
00:00:47.640 --> 00:00:51.159
<v Speaker 1>can't guess, this is something I put forward and I

14
00:00:51.280 --> 00:00:53.560
<v Speaker 1>decided that I would just come on and talk about

15
00:00:53.560 --> 00:00:58.039
<v Speaker 1>it myself since I use this every day and I'm

16
00:00:58.359 --> 00:01:02.280
<v Speaker 1>loving it, so I'm anyway, I'm kind of curious that

17
00:01:02.359 --> 00:01:06.599
<v Speaker 1>have you guys heard much about hot wire stimulus or Turbo.

18
00:01:07.359 --> 00:01:09.319
<v Speaker 3>Well, yeah, I use it for to find plane tickets

19
00:01:09.319 --> 00:01:09.799
<v Speaker 3>all the time.

20
00:01:14.040 --> 00:01:16.959
<v Speaker 2>I've kind of heard about it. I know that it's

21
00:01:17.040 --> 00:01:20.640
<v Speaker 2>big in the rails world where I am not present.

22
00:01:22.040 --> 00:01:25.239
<v Speaker 2>I know that it's kind of like HTMX in a way.

23
00:01:26.640 --> 00:01:29.439
<v Speaker 2>But that's more or less. Yeah, that's more or less

24
00:01:29.439 --> 00:01:30.519
<v Speaker 2>all that I know about it.

25
00:01:32.760 --> 00:01:35.840
<v Speaker 1>Yeah, yeah, it looks like they all go together.

26
00:01:36.120 --> 00:01:37.159
<v Speaker 4>I'm looking at the web page.

27
00:01:38.799 --> 00:01:42.719
<v Speaker 1>You can use them together, you don't have to. So

28
00:01:42.719 --> 00:01:45.000
<v Speaker 1>so I'll give a little bit of history on this.

29
00:01:47.760 --> 00:01:51.000
<v Speaker 1>So David I was calling David. Everybody else calls him

30
00:01:51.040 --> 00:01:57.319
<v Speaker 1>DH and I don't know why. But anyway, so, way

31
00:01:57.359 --> 00:02:02.719
<v Speaker 1>back in the day, he created a system for Java

32
00:02:03.000 --> 00:02:07.480
<v Speaker 1>in JavaScript for rails apps called turbo Links, And effectively

33
00:02:07.480 --> 00:02:11.639
<v Speaker 1>what it did was it would reload. Initially, I think

34
00:02:11.639 --> 00:02:14.199
<v Speaker 1>it just reloaded the body of the page, so if

35
00:02:14.240 --> 00:02:17.800
<v Speaker 1>you click the link, then uh, turbo links would intercept

36
00:02:18.000 --> 00:02:20.680
<v Speaker 1>the click, and then it would load just the body

37
00:02:20.719 --> 00:02:22.840
<v Speaker 1>of the page or just certain sections of the page

38
00:02:23.240 --> 00:02:27.159
<v Speaker 1>so that it would load faster, right because it didn't

39
00:02:27.159 --> 00:02:31.120
<v Speaker 1>have to re render the entire page. Turbo is kind

40
00:02:31.120 --> 00:02:32.360
<v Speaker 1>of the successor to that.

41
00:02:33.120 --> 00:02:35.520
<v Speaker 2>Before before we go into the successor, I want to

42
00:02:35.560 --> 00:02:39.080
<v Speaker 2>better understand that aspect. So basically, it did an HTP

43
00:02:39.280 --> 00:02:44.400
<v Speaker 2>request to the back end, presumably with a slightly different header, uh,

44
00:02:44.439 --> 00:02:48.560
<v Speaker 2>and then it would get the response back. Would it

45
00:02:48.599 --> 00:02:51.599
<v Speaker 2>be like HTMX, would it be like basically HTML?

46
00:02:51.680 --> 00:02:54.280
<v Speaker 1>In the response was HTML in the results and.

47
00:02:54.319 --> 00:02:57.879
<v Speaker 2>Then and then it would basically do in like a

48
00:02:58.000 --> 00:03:03.000
<v Speaker 2>diff like an HTML equal whatever the response was or

49
00:03:03.039 --> 00:03:03.919
<v Speaker 2>something along the lines.

50
00:03:04.520 --> 00:03:07.599
<v Speaker 1>Yeah, basically, and I don't know all the internals on that,

51
00:03:07.639 --> 00:03:09.439
<v Speaker 1>but yeah, basically that's what it would do.

52
00:03:10.199 --> 00:03:13.240
<v Speaker 2>And I assumed that it would also like work with

53
00:03:13.400 --> 00:03:18.000
<v Speaker 2>the history API, so that back and forward would work properly. Yep.

54
00:03:19.159 --> 00:03:22.599
<v Speaker 2>So it's just similar to HTMX in the sense that

55
00:03:22.680 --> 00:03:25.840
<v Speaker 2>it would It was a mechanism that allowed you to

56
00:03:25.919 --> 00:03:30.120
<v Speaker 2>replace portions of the page rather than the page in its.

57
00:03:30.080 --> 00:03:35.879
<v Speaker 1>Entirety right, But turbo links when it was out was

58
00:03:37.159 --> 00:03:41.400
<v Speaker 1>kind of a blunt tool, and so you couldn't target

59
00:03:41.520 --> 00:03:46.080
<v Speaker 1>specific areas of your app or different specific dom elements.

60
00:03:46.520 --> 00:03:49.120
<v Speaker 1>It would it was literally just the whole page, and

61
00:03:49.159 --> 00:03:52.159
<v Speaker 1>so it would effectively figure out what change and then

62
00:03:52.240 --> 00:03:55.919
<v Speaker 1>just update the changes. But it would get the HTML

63
00:03:55.960 --> 00:03:59.319
<v Speaker 1>from the back end, as opposed to I guess some

64
00:03:59.400 --> 00:04:02.520
<v Speaker 1>of the shadowed stuff that we see in JavaScript, where you.

65
00:04:02.479 --> 00:04:04.560
<v Speaker 2>Know, not shadow down virtual dom.

66
00:04:04.919 --> 00:04:07.680
<v Speaker 1>Or virtual dom where it yeah, where it manipulates, it

67
00:04:08.039 --> 00:04:10.319
<v Speaker 1>calculates and the manipulates the dom.

68
00:04:10.879 --> 00:04:13.879
<v Speaker 2>And this shadow dome is also a thing, but it's

69
00:04:13.879 --> 00:04:14.319
<v Speaker 2>a different thing.

70
00:04:14.400 --> 00:04:18.759
<v Speaker 1>Yeah, yeah, fair enough. But but anyway, so that's that's

71
00:04:18.800 --> 00:04:23.160
<v Speaker 1>generally the idea behind turbo links, and you know it

72
00:04:23.240 --> 00:04:26.360
<v Speaker 1>did it sped up, you know, rendering on on rails

73
00:04:26.360 --> 00:04:29.879
<v Speaker 1>apps in particular, and that's that's almost exclusively where it

74
00:04:29.920 --> 00:04:34.839
<v Speaker 1>was used. And then we started to see this proliferation

75
00:04:34.959 --> 00:04:36.720
<v Speaker 1>of other Again.

76
00:04:36.639 --> 00:04:39.319
<v Speaker 2>A question before you move on. You said that it

77
00:04:39.439 --> 00:04:42.639
<v Speaker 2>was mostly used in the rails world, and I assume

78
00:04:42.759 --> 00:04:45.839
<v Speaker 2>dGH created it for rails for those who don't know,

79
00:04:45.959 --> 00:04:51.759
<v Speaker 2>the also created rails. Yes, but was there anything specific

80
00:04:51.800 --> 00:04:55.160
<v Speaker 2>in the technology that kind of precluded it from being

81
00:04:55.279 --> 00:04:59.000
<v Speaker 2>used with other back end systems I don't know, PHP, whatever.

82
00:05:00.000 --> 00:05:03.000
<v Speaker 3>In other words, if someone uses it without Ruby, you

83
00:05:03.000 --> 00:05:04.920
<v Speaker 3>could say that they went off the rails.

84
00:05:07.399 --> 00:05:11.120
<v Speaker 1>You could take turbo links off the rails. Yes, yeah,

85
00:05:11.439 --> 00:05:16.839
<v Speaker 1>so so in more recent applications they move to Turbo.

86
00:05:17.399 --> 00:05:20.120
<v Speaker 1>And so Turbo does more what you're thinking of with

87
00:05:20.279 --> 00:05:24.920
<v Speaker 1>HTMX right, where you can target specific areas of your app,

88
00:05:25.680 --> 00:05:30.399
<v Speaker 1>and you can you can replace items, you can delete items.

89
00:05:32.439 --> 00:05:36.399
<v Speaker 1>Turbo has a number of different pieces to it, and

90
00:05:36.480 --> 00:05:38.839
<v Speaker 1>this is probably I don't know, I guess stimulus is

91
00:05:38.839 --> 00:05:42.839
<v Speaker 1>probably interesting to more traditional folks as well, But Turbo

92
00:05:43.480 --> 00:05:49.439
<v Speaker 1>Turbo has four pieces to it. We're not going to

93
00:05:49.480 --> 00:05:53.160
<v Speaker 1>talk about Turbo Native because Turbo Native is effectively a

94
00:05:53.279 --> 00:05:58.079
<v Speaker 1>wrapper around your web app that you can use to

95
00:05:58.160 --> 00:06:03.079
<v Speaker 1>deploy and put it up native iOS and Android apps, right,

96
00:06:03.199 --> 00:06:07.560
<v Speaker 1>and so it's it's a completely different technology from the other.

97
00:06:08.279 --> 00:06:12.720
<v Speaker 2>So it's basically a way for me again without you know,

98
00:06:12.959 --> 00:06:17.160
<v Speaker 2>we won't discuss in detail, but just to generally understand,

99
00:06:17.199 --> 00:06:20.639
<v Speaker 2>it's a way to implement a native app using a

100
00:06:20.680 --> 00:06:25.560
<v Speaker 2>web component essentially with the Rails back end driving the system.

101
00:06:26.279 --> 00:06:30.199
<v Speaker 1>You can use any website. It just wraps around the

102
00:06:30.199 --> 00:06:33.600
<v Speaker 1>website and so it turns your website into your web

103
00:06:33.600 --> 00:06:36.319
<v Speaker 1>app or into your native app. And so it's just

104
00:06:36.360 --> 00:06:40.639
<v Speaker 1>a native shell that loads without the Chrome your browser

105
00:06:40.800 --> 00:06:44.279
<v Speaker 1>or a browser with your web application in it. Cool,

106
00:06:44.600 --> 00:06:47.439
<v Speaker 1>and it has a bit more fit so you can

107
00:06:48.399 --> 00:06:52.800
<v Speaker 1>provide some native functionality to it, but it's fairly limited.

108
00:06:53.079 --> 00:06:57.639
<v Speaker 1>And anyway, if you want to just keep the same

109
00:06:57.680 --> 00:07:01.279
<v Speaker 1>experience across your web and native apps, it's actually a

110
00:07:01.279 --> 00:07:05.040
<v Speaker 1>pretty good option. And you know, it does, like I said,

111
00:07:05.120 --> 00:07:08.160
<v Speaker 1>have some tie ins to native things that make it

112
00:07:08.279 --> 00:07:11.519
<v Speaker 1>kind of a nice seamless experience. It's definitely not the

113
00:07:11.600 --> 00:07:16.839
<v Speaker 1>right solution for everybody. But anyway, I've I'm still learning

114
00:07:16.879 --> 00:07:21.720
<v Speaker 1>about turbo natives, so I'm not using it myself. But

115
00:07:21.800 --> 00:07:27.160
<v Speaker 1>the other three elements of turbo turbo drive and what

116
00:07:27.600 --> 00:07:31.319
<v Speaker 1>turbo drive does is essentially what we talked about with turbolinks, right,

117
00:07:31.720 --> 00:07:34.800
<v Speaker 1>And so if you have a link and you've loaded

118
00:07:34.800 --> 00:07:37.680
<v Speaker 1>turbo into your web page and you click the link,

119
00:07:38.120 --> 00:07:41.680
<v Speaker 1>then it will go and it will retrieve the page,

120
00:07:41.879 --> 00:07:46.040
<v Speaker 1>the new page from the server, and it'll bring it

121
00:07:46.120 --> 00:07:49.959
<v Speaker 1>back and then it'll diff it against what's already there,

122
00:07:50.000 --> 00:07:52.600
<v Speaker 1>and it'll only change the pieces that have actually changed.

123
00:07:54.199 --> 00:07:57.800
<v Speaker 2>I'm kind of curious about this diffing mechanism, like, you know,

124
00:07:57.879 --> 00:08:02.759
<v Speaker 2>how sophisticated is it? I mean, you know, all of

125
00:08:03.240 --> 00:08:06.040
<v Speaker 2>the v dome kind of exists to do all the

126
00:08:06.160 --> 00:08:10.879
<v Speaker 2>sorts of a diffing, so like like any parts that

127
00:08:11.040 --> 00:08:13.759
<v Speaker 2>of the page that haven't changed will not be touched,

128
00:08:13.959 --> 00:08:17.199
<v Speaker 2>or you know, how does it reconcile? How does it?

129
00:08:17.279 --> 00:08:23.319
<v Speaker 2>You know the reconciliation is you know, is the is

130
00:08:23.360 --> 00:08:26.680
<v Speaker 2>the challenge, especially if you've got sophisticated pages.

131
00:08:27.759 --> 00:08:32.440
<v Speaker 1>Yeah, it uses another library. I think it's called idiomorph

132
00:08:33.480 --> 00:08:37.559
<v Speaker 1>and and so idiomorph is what does a lot of

133
00:08:37.559 --> 00:08:43.399
<v Speaker 1>the changes under the hood for Turbo.

134
00:08:45.799 --> 00:08:50.360
<v Speaker 2>But basically it kind of it retrieves the new version

135
00:08:50.600 --> 00:08:54.720
<v Speaker 2>but does diffing in order to not replace stuff that

136
00:08:54.799 --> 00:08:55.639
<v Speaker 2>hasn't changed.

137
00:08:56.200 --> 00:08:59.000
<v Speaker 1>Right, So let's say you have like a menu bar

138
00:09:00.039 --> 00:09:04.240
<v Speaker 1>on the top or down the side. You know, maybe

139
00:09:04.240 --> 00:09:07.399
<v Speaker 1>you're clicking a link and it only changes one small

140
00:09:07.440 --> 00:09:11.039
<v Speaker 1>part of the page. When it does, the end rent

141
00:09:11.080 --> 00:09:13.360
<v Speaker 1>to the back end, and when you click the link,

142
00:09:13.720 --> 00:09:16.600
<v Speaker 1>it may give back the HTML for the entire page.

143
00:09:17.159 --> 00:09:19.799
<v Speaker 1>But idiomorph is smart enough to look at the two

144
00:09:20.039 --> 00:09:23.399
<v Speaker 1>and say, I need to merge these right and get

145
00:09:23.440 --> 00:09:26.039
<v Speaker 1>the stuff from the new page into the old page.

146
00:09:26.519 --> 00:09:30.200
<v Speaker 1>And so when you do that, it just replaces that

147
00:09:30.279 --> 00:09:32.360
<v Speaker 1>one piece of the page instead of re rendering the

148
00:09:32.519 --> 00:09:33.200
<v Speaker 1>entire page.

149
00:09:33.440 --> 00:09:36.200
<v Speaker 2>Now I'm not obviously, I'm not familiar with it because

150
00:09:36.240 --> 00:09:39.320
<v Speaker 2>I'm basically learning about it from you right now. But

151
00:09:39.600 --> 00:09:42.279
<v Speaker 2>there are like three big advantages to this type of

152
00:09:42.279 --> 00:09:46.600
<v Speaker 2>an approach. One is, of course, that you avoid unnecessary flashing.

153
00:09:46.759 --> 00:09:48.399
<v Speaker 2>Like you said, if you've got the menu on the

154
00:09:48.480 --> 00:09:51.399
<v Speaker 2>side and the menu at the top, if they haven't changed,

155
00:09:51.480 --> 00:09:54.120
<v Speaker 2>you don't want them rerendered. You just want them to

156
00:09:54.159 --> 00:09:57.600
<v Speaker 2>stay where they are, and you know, stay put and

157
00:09:57.720 --> 00:10:00.759
<v Speaker 2>avoid the flash of them being arrested and then re rendered.

158
00:10:01.480 --> 00:10:06.200
<v Speaker 2>Another advantage is that if you've got various form elements

159
00:10:06.200 --> 00:10:10.320
<v Speaker 2>that you've already put stuff in as a user, you

160
00:10:10.399 --> 00:10:13.919
<v Speaker 2>don't want them reloading and losing their content. So, for example,

161
00:10:13.919 --> 00:10:17.279
<v Speaker 2>if you type something into a textbox, if the textbox

162
00:10:17.360 --> 00:10:20.840
<v Speaker 2>re renders, then effectively it can lose whatever was in

163
00:10:20.879 --> 00:10:25.360
<v Speaker 2>it if you've not taken special steps for preserving that stuff.

164
00:10:25.840 --> 00:10:29.320
<v Speaker 2>So again, if you avoid re rendering those stuff that stuff,

165
00:10:29.519 --> 00:10:34.320
<v Speaker 2>that makes it easier not losing the contents of form

166
00:10:34.440 --> 00:10:37.080
<v Speaker 2>data just because I don't know, you updated some counter

167
00:10:38.120 --> 00:10:41.200
<v Speaker 2>at the top of the page or whatever. And another

168
00:10:41.320 --> 00:10:46.159
<v Speaker 2>reason is to avoid videos from jumping to the start.

169
00:10:46.279 --> 00:10:50.080
<v Speaker 2>If you reload the video element, the video will you

170
00:10:50.440 --> 00:10:53.320
<v Speaker 2>go back to the beginning, and which is often not

171
00:10:53.440 --> 00:10:56.039
<v Speaker 2>what you want if the effect that you want to

172
00:10:56.240 --> 00:10:58.799
<v Speaker 2>create is the user just staying where they are.

173
00:11:00.120 --> 00:11:03.120
<v Speaker 1>Yeah, one, there are a couple of other things. One

174
00:11:03.159 --> 00:11:04.919
<v Speaker 1>is your scroll position.

175
00:11:05.519 --> 00:11:12.320
<v Speaker 2>M hmm, can kind of handle it, but yeah.

176
00:11:12.080 --> 00:11:14.600
<v Speaker 1>Yeah, but but if you if you click to the

177
00:11:14.639 --> 00:11:17.240
<v Speaker 1>next page, a lot of times it will take you

178
00:11:17.279 --> 00:11:20.240
<v Speaker 1>to the top of that page. And in this case

179
00:11:20.279 --> 00:11:22.679
<v Speaker 1>it doesn't because all it does is again it just

180
00:11:22.759 --> 00:11:25.799
<v Speaker 1>merges the page in where you want. I could I

181
00:11:25.840 --> 00:11:28.159
<v Speaker 1>could see where maybe you don't want that all the time,

182
00:11:28.200 --> 00:11:34.960
<v Speaker 1>but it's it's a pretty nice feature. And I think

183
00:11:35.000 --> 00:11:39.559
<v Speaker 1>that was the only other benefit that you didn't bring up,

184
00:11:39.559 --> 00:11:45.799
<v Speaker 1>but that, Yeah, essentially, that's that's how that goes together.

185
00:11:46.600 --> 00:11:50.600
<v Speaker 1>And anyway, it's it's pretty nice. It's uh. I found

186
00:11:50.600 --> 00:11:55.840
<v Speaker 1>that it has sped up the the rendering and work

187
00:11:55.919 --> 00:12:01.559
<v Speaker 1>on my web pages where I use it, and you

188
00:12:01.639 --> 00:12:03.759
<v Speaker 1>just install Turbo and it just kind of does this thing.

189
00:12:03.879 --> 00:12:05.879
<v Speaker 1>Now that it does have an API, so you can

190
00:12:06.080 --> 00:12:08.960
<v Speaker 1>tell it how you want it to operate, but for

191
00:12:09.000 --> 00:12:11.360
<v Speaker 1>the most part, it just is kind of an automatic.

192
00:12:11.840 --> 00:12:14.960
<v Speaker 2>So a few questions about it, again as somebody who's

193
00:12:15.000 --> 00:12:18.519
<v Speaker 2>really not so familiar with the technologies, and it kind

194
00:12:18.559 --> 00:12:22.519
<v Speaker 2>of related to some concerns that I had when we

195
00:12:22.559 --> 00:12:30.320
<v Speaker 2>spoke with Carson about HTMX. Is how it works with

196
00:12:31.080 --> 00:12:36.720
<v Speaker 2>the browser's history, like when you back and forward, how

197
00:12:36.759 --> 00:12:39.759
<v Speaker 2>smart it is it about things, how well does it

198
00:12:40.159 --> 00:12:44.440
<v Speaker 2>work with the address bar which kind of goes together

199
00:12:44.480 --> 00:12:48.600
<v Speaker 2>with the history, and also how well does it work

200
00:12:48.679 --> 00:12:49.879
<v Speaker 2>with browser caching.

201
00:12:52.320 --> 00:12:57.399
<v Speaker 1>Yeah, honestly, I haven't had any problems with the history

202
00:12:57.480 --> 00:13:04.679
<v Speaker 1>back and forward with that, now we get into turbo

203
00:13:05.240 --> 00:13:08.960
<v Speaker 1>turbo frames and turbo streams. Yeah, that that's a little

204
00:13:08.960 --> 00:13:14.840
<v Speaker 1>bit different. But with with turbo drive itself, I haven't

205
00:13:14.840 --> 00:13:18.279
<v Speaker 1>had any issues, so you know. And and in rails,

206
00:13:18.360 --> 00:13:22.120
<v Speaker 1>nearly every page loads using turbo drive, you know, once

207
00:13:22.159 --> 00:13:25.279
<v Speaker 1>you click a link it and so that that's worked

208
00:13:25.279 --> 00:13:28.480
<v Speaker 1>pretty seamlessly. And I do weird stuff in rails sometimes,

209
00:13:28.480 --> 00:13:31.679
<v Speaker 1>and it seems to work, So I'm for that.

210
00:13:31.960 --> 00:13:34.200
<v Speaker 2>Is it called kind of curious? Why is it called

211
00:13:34.279 --> 00:13:38.960
<v Speaker 2>turbo drive? Like, is it the drive related to turbo

212
00:13:39.399 --> 00:13:43.360
<v Speaker 2>the fact that it drives faster or somehow related to.

213
00:13:43.639 --> 00:13:44.399
<v Speaker 1>I have no idea.

214
00:13:45.480 --> 00:13:49.879
<v Speaker 2>DHH is a race car driver, Okay, okay, he is, But.

215
00:13:51.480 --> 00:13:52.879
<v Speaker 1>Yeah, I don't know. I don't know why they called

216
00:13:52.879 --> 00:13:54.039
<v Speaker 1>it turbo turbo drive.

217
00:13:54.879 --> 00:13:57.120
<v Speaker 2>Thought I thought that. I thought the PHP guys were

218
00:13:57.159 --> 00:13:59.000
<v Speaker 2>supposed to have the lambos.

219
00:13:59.480 --> 00:14:02.840
<v Speaker 4>Well, you know, there's a lot of joint a lambo group.

220
00:14:02.919 --> 00:14:04.799
<v Speaker 4>There's a lot of problems with Lambo's.

221
00:14:06.360 --> 00:14:09.039
<v Speaker 2>Not they're pretty Let's put it this way, it's probably

222
00:14:09.080 --> 00:14:11.600
<v Speaker 2>not not the sort of problems that I need to

223
00:14:11.600 --> 00:14:14.080
<v Speaker 2>contend with, So.

224
00:14:14.000 --> 00:14:15.039
<v Speaker 4>You probably shouldn't get away.

225
00:14:15.080 --> 00:14:16.960
<v Speaker 1>That's a problem. Is a problem.

226
00:14:17.000 --> 00:14:21.159
<v Speaker 2>I would like to have, okay for me cars for me,

227
00:14:21.279 --> 00:14:23.879
<v Speaker 2>cars mostly ways to get from point A to point B.

228
00:14:25.200 --> 00:14:27.600
<v Speaker 3>So I'm gonna jump in he real quick. And obviously

229
00:14:27.639 --> 00:14:31.519
<v Speaker 3>you guys are talking about Taylor Otwell and his orange lambeau.

230
00:14:32.639 --> 00:14:38.679
<v Speaker 3>But being a devoted inertia JS fanboy has been well

231
00:14:38.720 --> 00:14:40.480
<v Speaker 3>documented here, I'm going to say a lot of this

232
00:14:41.120 --> 00:14:44.960
<v Speaker 3>is very similar. I think it's maybe the same thing

233
00:14:45.080 --> 00:14:48.759
<v Speaker 3>with just slightly different implementations in terms of what I

234
00:14:48.799 --> 00:14:50.480
<v Speaker 3>see in inertia and what I use in innertia on

235
00:14:50.519 --> 00:14:55.639
<v Speaker 3>a regular basis, In terms of only loading certain parts

236
00:14:55.639 --> 00:14:58.360
<v Speaker 3>of the page, you know, being able to make a

237
00:14:58.440 --> 00:15:04.200
<v Speaker 3>query and get specific in preventing or controlling where the

238
00:15:04.240 --> 00:15:07.759
<v Speaker 3>page rolls too after a change is updated, just a

239
00:15:07.879 --> 00:15:10.559
<v Speaker 3>general speed of it in terms of how that it works.

240
00:15:10.559 --> 00:15:15.279
<v Speaker 3>So it's just from listening to Chuck and reading to

241
00:15:15.399 --> 00:15:19.279
<v Speaker 3>the documentation, it's it's sort of just a different implementation

242
00:15:19.360 --> 00:15:21.080
<v Speaker 3>of the same idea.

243
00:15:22.320 --> 00:15:25.080
<v Speaker 2>I'm really not surprised that there's a sort of a

244
00:15:25.120 --> 00:15:29.320
<v Speaker 2>convergent evolution. I mean, if you want to drive more

245
00:15:29.399 --> 00:15:33.799
<v Speaker 2>dynamic web pages and a more dynamic experience for web users,

246
00:15:34.440 --> 00:15:39.000
<v Speaker 2>but don't want to build like React application on the

247
00:15:39.039 --> 00:15:41.879
<v Speaker 2>front end. It kind of they kind of all pushes

248
00:15:41.919 --> 00:15:42.960
<v Speaker 2>you in the same direction.

249
00:15:43.120 --> 00:15:46.960
<v Speaker 1>I guess, yeah, and that's that's where a lot of

250
00:15:46.960 --> 00:15:53.279
<v Speaker 1>this came out of, both with stimulus and turbo is. Yeah.

251
00:15:53.399 --> 00:15:58.159
<v Speaker 1>The feeling is in communities that I talked to outside

252
00:15:58.200 --> 00:16:01.480
<v Speaker 1>of this one, where you know people generally embrace React

253
00:16:02.240 --> 00:16:07.200
<v Speaker 1>is that, yeah, we we don't necessarily need a framework

254
00:16:07.879 --> 00:16:13.000
<v Speaker 1>that takes over the entire page. We don't need you know,

255
00:16:13.039 --> 00:16:17.519
<v Speaker 1>we don't need the heavy handed approach that React has.

256
00:16:18.840 --> 00:16:22.279
<v Speaker 1>You know, DH calls them JavaScript sprinkles, right, So you

257
00:16:22.360 --> 00:16:24.480
<v Speaker 1>just put in what you need where you need it.

258
00:16:25.279 --> 00:16:30.639
<v Speaker 1>And I have to admit I really like that approach

259
00:16:30.759 --> 00:16:33.840
<v Speaker 1>as as far as it goes. And so you know,

260
00:16:34.279 --> 00:16:35.960
<v Speaker 1>look at the way that we used to build things with,

261
00:16:36.080 --> 00:16:39.559
<v Speaker 1>say jQuery, right, and so you would have a jQuery

262
00:16:39.600 --> 00:16:42.960
<v Speaker 1>plug in, you would tell it to act or react

263
00:16:43.000 --> 00:16:47.600
<v Speaker 1>on a specific dam element, and you know, you would

264
00:16:47.639 --> 00:16:50.159
<v Speaker 1>get what you wanted where you wanted it, and that

265
00:16:50.200 --> 00:16:55.320
<v Speaker 1>would kind of be the entire story. And so you know,

266
00:16:57.080 --> 00:17:01.600
<v Speaker 1>it's it's not necessarily an approach that is unfamiliar to people,

267
00:17:03.519 --> 00:17:05.799
<v Speaker 1>at least in principle, but a lot of the ideas

268
00:17:06.039 --> 00:17:08.319
<v Speaker 1>behind how it's put together and why it works the

269
00:17:08.359 --> 00:17:10.440
<v Speaker 1>way it works are definitely not new.

270
00:17:12.440 --> 00:17:16.079
<v Speaker 2>Is it also like HGMX driven by attributes that you

271
00:17:16.160 --> 00:17:17.759
<v Speaker 2>put on the HTML elements?

272
00:17:19.640 --> 00:17:24.160
<v Speaker 1>Yes, yes, stimulus much more than turbo, but yes.

273
00:17:25.440 --> 00:17:27.039
<v Speaker 3>Now you can see it on the very front page

274
00:17:27.039 --> 00:17:28.319
<v Speaker 3>of the stimulus stocks.

275
00:17:28.839 --> 00:17:32.359
<v Speaker 2>So what is stimulus versus Turbo or are you still talking

276
00:17:32.400 --> 00:17:33.039
<v Speaker 2>about turbo?

277
00:17:33.880 --> 00:17:36.519
<v Speaker 1>I still wanted to cover a couple more things with Turbo,

278
00:17:36.599 --> 00:17:40.119
<v Speaker 1>So Turbo has a couple of other features. Again, if

279
00:17:40.200 --> 00:17:43.440
<v Speaker 1>you're familiar with HTMX, these are going to sound fairly familiar.

280
00:17:44.599 --> 00:17:48.200
<v Speaker 1>So one other thing you could do with Turbo is

281
00:17:48.240 --> 00:17:51.799
<v Speaker 1>you can break your page up into Turbo frames. And

282
00:17:51.880 --> 00:17:56.720
<v Speaker 1>so the different Turbo frames are effectively dom elements in

283
00:17:56.759 --> 00:18:01.960
<v Speaker 1>your application that you can and target for specific things.

284
00:18:02.720 --> 00:18:05.400
<v Speaker 1>And typically what you do is you use them in

285
00:18:05.440 --> 00:18:09.720
<v Speaker 1>conjunction with turbo streams. And turbostream is where you send

286
00:18:09.720 --> 00:18:12.480
<v Speaker 1>the request back to the server with a specific header

287
00:18:12.799 --> 00:18:16.720
<v Speaker 1>saying this is a turbostream, and then the turbostream responds

288
00:18:17.400 --> 00:18:21.720
<v Speaker 1>with new Turbo frames that either say delete this element

289
00:18:22.000 --> 00:18:27.519
<v Speaker 1>or replace the contents of this element, or there are

290
00:18:27.519 --> 00:18:29.200
<v Speaker 1>a whole bunch of different ones that you can do

291
00:18:30.920 --> 00:18:37.680
<v Speaker 1>that have different actions. You replace, update, append, prepend, You

292
00:18:37.720 --> 00:18:40.440
<v Speaker 1>can add something before, you can add something after. You

293
00:18:40.480 --> 00:18:43.519
<v Speaker 1>can just tell it to refresh the turboframe.

294
00:18:45.440 --> 00:18:47.960
<v Speaker 2>So these are kind of like ie frames in a

295
00:18:48.079 --> 00:18:52.160
<v Speaker 2>logical sense that they represent parts of the page that

296
00:18:52.400 --> 00:18:57.240
<v Speaker 2>update separately. But they're not implemented I would guess as

297
00:18:57.400 --> 00:18:58.559
<v Speaker 2>actual eye frames.

298
00:18:58.720 --> 00:18:59.079
<v Speaker 1>No, they're not.

299
00:19:00.000 --> 00:19:06.359
<v Speaker 2>Whether they're just placeholders. I guess that you can update

300
00:19:06.400 --> 00:19:09.640
<v Speaker 2>the content of in various different ways.

301
00:19:10.160 --> 00:19:15.759
<v Speaker 1>Right, So for example, if I filled in a form

302
00:19:16.680 --> 00:19:19.599
<v Speaker 1>and when it did the post, it sent the post

303
00:19:19.599 --> 00:19:23.599
<v Speaker 1>as a turbo stream instead of a and and you

304
00:19:23.599 --> 00:19:26.079
<v Speaker 1>know the return header it's saying, give me a turbo

305
00:19:26.079 --> 00:19:30.559
<v Speaker 1>stream back instead of an HTML header or an HTML page.

306
00:19:30.599 --> 00:19:32.279
<v Speaker 1>What you what you would get back, as you could,

307
00:19:32.319 --> 00:19:34.680
<v Speaker 1>you would get back a series of turbo frames in

308
00:19:34.720 --> 00:19:40.599
<v Speaker 1>your turbo stream. And the turbo frames might say replace

309
00:19:41.079 --> 00:19:46.960
<v Speaker 1>the user's name turbo frame with the new name, and

310
00:19:47.039 --> 00:19:51.559
<v Speaker 1>replace the user's avatar turbo frame. Right, you put a

311
00:19:51.559 --> 00:19:53.440
<v Speaker 1>turbo frame around that, And so you can tell it

312
00:19:53.480 --> 00:19:55.480
<v Speaker 1>to replace all of those or update all of those,

313
00:19:56.200 --> 00:19:59.240
<v Speaker 1>and uh, you know, or if you're doing you using

314
00:19:59.359 --> 00:20:02.640
<v Speaker 1>a turbo turbo streams for comments, right, you have a

315
00:20:02.640 --> 00:20:07.240
<v Speaker 1>turbo frame around your series of comments, and then when

316
00:20:07.319 --> 00:20:11.079
<v Speaker 1>you submit the comment form, instead of making an end

317
00:20:11.119 --> 00:20:13.400
<v Speaker 1>run to the server and getting back a full new

318
00:20:13.440 --> 00:20:16.440
<v Speaker 1>page with the comment added, it just sends back the

319
00:20:16.559 --> 00:20:20.640
<v Speaker 1>HTML snippet with the comment, and it's inside of a

320
00:20:20.640 --> 00:20:24.559
<v Speaker 1>turbo frame that says append this to the comments element

321
00:20:24.640 --> 00:20:25.880
<v Speaker 1>or to the comments turbo frame.

322
00:20:26.519 --> 00:20:30.200
<v Speaker 2>Now, again, obviously I'm not really familiar with it, as

323
00:20:30.240 --> 00:20:32.720
<v Speaker 2>I've never used it and I'm mostly learning about it

324
00:20:32.880 --> 00:20:36.400
<v Speaker 2>listening to you right now. But it does seem on

325
00:20:36.440 --> 00:20:38.480
<v Speaker 2>the face of it that it would be a good

326
00:20:38.559 --> 00:20:42.240
<v Speaker 2>candidate to use in conjunction with the web components. I

327
00:20:42.279 --> 00:20:44.720
<v Speaker 2>don't know if that's maybe what they're doing or not.

328
00:20:44.960 --> 00:20:48.599
<v Speaker 2>If they're not, maybe it's something to consider, because that

329
00:20:48.720 --> 00:20:56.200
<v Speaker 2>would really create a strong separation between the various turbo frames, like,

330
00:20:56.359 --> 00:20:59.079
<v Speaker 2>for example, thanks to the shadow dom it would mean

331
00:20:59.160 --> 00:21:03.200
<v Speaker 2>that SS from one would not impact the other unless

332
00:21:03.440 --> 00:21:05.920
<v Speaker 2>you know you specifically want to and stuff like that.

333
00:21:06.039 --> 00:21:10.359
<v Speaker 2>It would create an interesting, like clean separation between the

334
00:21:10.440 --> 00:21:15.359
<v Speaker 2>various frames. But again, I'm just saying this as a

335
00:21:15.640 --> 00:21:17.599
<v Speaker 2>thought that occurs to me off the top of my head.

336
00:21:18.319 --> 00:21:20.720
<v Speaker 2>By the way, I don't know, just as an aside

337
00:21:21.079 --> 00:21:23.240
<v Speaker 2>and we won't go there. But there's been all this

338
00:21:23.440 --> 00:21:27.240
<v Speaker 2>brew a ha about web components all over again. So

339
00:21:27.960 --> 00:21:31.480
<v Speaker 2>you know we were due, Yeah we were, do you.

340
00:21:32.640 --> 00:21:38.319
<v Speaker 2>Ryan Carniato, a friend of the show, wrote scathing commentary

341
00:21:38.359 --> 00:21:40.759
<v Speaker 2>about it and got all the brew haha started all

342
00:21:40.799 --> 00:21:41.279
<v Speaker 2>over again.

343
00:21:41.839 --> 00:21:46.039
<v Speaker 1>Anyway, Yeah, I honestly I haven't looked at the code

344
00:21:46.039 --> 00:21:49.079
<v Speaker 1>base for Turbo, so I don't know if they're using

345
00:21:49.200 --> 00:21:52.680
<v Speaker 1>web components or not. But yeah, you do put in

346
00:21:52.799 --> 00:21:58.079
<v Speaker 1>a turbo frame tag, you know, and.

347
00:21:58.160 --> 00:22:00.279
<v Speaker 2>That's an interesting Yeah, sorry.

348
00:22:00.119 --> 00:22:03.839
<v Speaker 1>Gone, when you respond again, you you were you respond

349
00:22:03.920 --> 00:22:05.279
<v Speaker 1>with the turbo frame tag.

350
00:22:05.519 --> 00:22:12.079
<v Speaker 2>So that's an interesting difference from HDMX, where they Carson

351
00:22:12.240 --> 00:22:16.559
<v Speaker 2>Gross kind of intentionally did not create special elements as

352
00:22:16.599 --> 00:22:21.680
<v Speaker 2>targets and rather made it possible to use any dom

353
00:22:21.720 --> 00:22:28.079
<v Speaker 2>element as a target for for updates. Yeah, so it's

354
00:22:28.119 --> 00:22:34.240
<v Speaker 2>an interesting distinction between the turbo drive philosophy and HDMX.

355
00:22:35.839 --> 00:22:42.400
<v Speaker 1>Yeah. I believe you can work around things without the frame,

356
00:22:42.559 --> 00:22:46.559
<v Speaker 1>but it's much it's much easier to just go with

357
00:22:46.640 --> 00:22:50.599
<v Speaker 1>the frames. That's how it's designed to work. But yeah,

358
00:22:50.599 --> 00:22:53.400
<v Speaker 1>I mean that's that's effectively the ins and outs of

359
00:22:53.400 --> 00:22:58.880
<v Speaker 1>of turbo and so yeah, I gave some examples. I've

360
00:22:58.960 --> 00:23:04.160
<v Speaker 1>updated menus and menu items, I've updated you know other things.

361
00:23:04.279 --> 00:23:06.279
<v Speaker 1>I mean, one one place that I've used it is

362
00:23:06.480 --> 00:23:12.960
<v Speaker 1>I've loaded a modal and so effectively used stimulus with

363
00:23:13.279 --> 00:23:17.039
<v Speaker 1>turbo to update the modal contents and then you stimulus

364
00:23:17.079 --> 00:23:17.720
<v Speaker 1>to make it appear.

365
00:23:18.880 --> 00:23:23.720
<v Speaker 2>So so again, now can you now explain what stimulus is.

366
00:23:23.680 --> 00:23:30.200
<v Speaker 1>Right, So, stimulus is it's a model of you controller

367
00:23:31.440 --> 00:23:42.400
<v Speaker 1>approach to HTML or to manipulating your dom and so effectively,

368
00:23:43.240 --> 00:23:45.720
<v Speaker 1>the way that it works is you assign a controller

369
00:23:46.160 --> 00:23:49.440
<v Speaker 1>to a section of your code, so you know, usually

370
00:23:49.480 --> 00:23:52.119
<v Speaker 1>what you'll see is you'll see a div is placed

371
00:23:52.119 --> 00:23:54.640
<v Speaker 1>around the area that you want your your controller to

372
00:23:54.680 --> 00:24:00.759
<v Speaker 1>work on, and then you can define. There are a

373
00:24:00.839 --> 00:24:06.160
<v Speaker 1>number of different elements you can use within stimulus to

374
00:24:06.559 --> 00:24:09.279
<v Speaker 1>make a lot of this work. So the kind of

375
00:24:09.319 --> 00:24:15.680
<v Speaker 1>the big ones are actions and targets. And what you

376
00:24:15.720 --> 00:24:18.160
<v Speaker 1>do is you have data. You use a data elements,

377
00:24:18.200 --> 00:24:21.319
<v Speaker 1>so data dash whatever. Right, So let's say your controller

378
00:24:21.519 --> 00:24:25.960
<v Speaker 1>is you want drop down menu, so you have a

379
00:24:26.000 --> 00:24:31.440
<v Speaker 1>drop down menu controller, so you're on your menu where

380
00:24:31.440 --> 00:24:33.680
<v Speaker 1>you have the drop down menu. You would have a

381
00:24:33.759 --> 00:24:37.880
<v Speaker 1>data dash controller attribute and you would assign it menu

382
00:24:38.119 --> 00:24:42.039
<v Speaker 1>dash drop down right, and so that tells it this

383
00:24:42.279 --> 00:24:46.119
<v Speaker 1>area is all operating under a single instance of the

384
00:24:46.160 --> 00:24:50.839
<v Speaker 1>menu drop down controller. And then and then from there

385
00:24:50.920 --> 00:24:53.920
<v Speaker 1>you can assign actions and that's usually on links and

386
00:24:53.960 --> 00:24:58.000
<v Speaker 1>buttons where if you click it. You can also put

387
00:24:58.000 --> 00:25:00.599
<v Speaker 1>it on other elements, so you can have it on forms,

388
00:25:01.519 --> 00:25:05.319
<v Speaker 1>you can have them actions on all kinds of other things.

389
00:25:05.599 --> 00:25:08.240
<v Speaker 1>And so what you have there is then you have

390
00:25:08.319 --> 00:25:11.599
<v Speaker 1>a data action element.

391
00:25:13.119 --> 00:25:17.119
<v Speaker 2>So it's kind of like it sounds kind of like

392
00:25:17.920 --> 00:25:22.640
<v Speaker 2>an angular style templating approach to doing things, but instead

393
00:25:22.680 --> 00:25:26.359
<v Speaker 2>of creating your own templating language on top of the

394
00:25:26.519 --> 00:25:32.599
<v Speaker 2>HTML syntax, you're just making do mostly with HTML standard

395
00:25:32.680 --> 00:25:34.720
<v Speaker 2>data elements data.

396
00:25:34.680 --> 00:25:41.400
<v Speaker 1>Yeah, basically, So then the targets are effectively you're telling

397
00:25:41.440 --> 00:25:45.759
<v Speaker 1>the controller you need to know where this dumb element

398
00:25:45.880 --> 00:25:49.400
<v Speaker 1>is right, and so then in the action you tell

399
00:25:49.440 --> 00:25:54.240
<v Speaker 1>it on a click call this function in your controller.

400
00:25:54.359 --> 00:25:57.119
<v Speaker 2>And the function is what is it JavaScript on the

401
00:25:57.160 --> 00:25:57.839
<v Speaker 2>front end.

402
00:25:59.599 --> 00:26:02.960
<v Speaker 1>On the front and it's JavaScript on the front end,

403
00:26:03.960 --> 00:26:06.279
<v Speaker 1>so all the stimulus controllers are written in JavaScript.

404
00:26:06.960 --> 00:26:10.279
<v Speaker 2>So it's again I'm not familiar with it, so I'm

405
00:26:10.359 --> 00:26:13.920
<v Speaker 2>kind of guessing it sounds a little bit like in

406
00:26:14.200 --> 00:26:17.200
<v Speaker 2>sort of Angular light in the sense.

407
00:26:20.960 --> 00:26:23.640
<v Speaker 1>I guess. I guess in some ways you could look

408
00:26:23.640 --> 00:26:31.400
<v Speaker 1>at it that way. I think it has I think

409
00:26:31.440 --> 00:26:35.000
<v Speaker 1>it has more in common with Angular JS or Angular

410
00:26:35.039 --> 00:26:38.440
<v Speaker 1>one than Angular two, but it has a lot of

411
00:26:38.440 --> 00:26:41.680
<v Speaker 1>those ideas in the sense that, yeah, you put the

412
00:26:42.559 --> 00:26:49.000
<v Speaker 1>directives and the elements into into your HTML and then

413
00:26:49.559 --> 00:26:51.920
<v Speaker 1>stimulus is able to pick it up when it when

414
00:26:51.920 --> 00:26:53.680
<v Speaker 1>the pageloads and it initializes.

415
00:26:55.440 --> 00:27:00.799
<v Speaker 2>I see that it's specifically called a modest JavaScript framework. Yeah,

416
00:27:00.960 --> 00:27:03.640
<v Speaker 2>so for the HM Aliority have. So basically it's a

417
00:27:03.680 --> 00:27:07.720
<v Speaker 2>way to add a framework light on top of the

418
00:27:07.880 --> 00:27:14.480
<v Speaker 2>static Htmailiority have by sprinkling in some data attributes and

419
00:27:14.759 --> 00:27:20.119
<v Speaker 2>adding some JavaScript business well business logic. I guess you.

420
00:27:20.079 --> 00:27:22.599
<v Speaker 3>Could call it, yeah, effectively, Chuck, are you familiar with

421
00:27:22.680 --> 00:27:24.440
<v Speaker 3>Alpine JS.

422
00:27:24.799 --> 00:27:27.759
<v Speaker 1>I have not looked into it as much as I would.

423
00:27:27.519 --> 00:27:30.240
<v Speaker 3>Like, But okay, so AJ you remember when we interviewed

424
00:27:31.839 --> 00:27:33.160
<v Speaker 3>it's been a couple of years where we talked to

425
00:27:33.160 --> 00:27:35.680
<v Speaker 3>the guy from Albine J I'm brain farting on his

426
00:27:35.759 --> 00:27:39.359
<v Speaker 3>name right now. Starts of the CE. But it's sort

427
00:27:39.359 --> 00:27:41.400
<v Speaker 3>of the same thing where he uses data attributes and

428
00:27:41.440 --> 00:27:45.880
<v Speaker 3>you just sort of sprinkle a little bit within your

429
00:27:46.839 --> 00:27:53.119
<v Speaker 3>HCML to add functionality, you know, some JavaScript functionality to

430
00:27:53.160 --> 00:27:55.079
<v Speaker 3>your forms without having to take over the whole thing

431
00:27:55.119 --> 00:27:58.759
<v Speaker 3>with a view or reactor Angular you know, template structure.

432
00:27:59.680 --> 00:28:06.400
<v Speaker 3>Yeah right, huh was it Caleb, Yeah, calib Porzio Yeah, yeah.

433
00:28:06.359 --> 00:28:11.359
<v Speaker 1>Yeah, yeah, it's not by any means the only sort

434
00:28:11.359 --> 00:28:17.759
<v Speaker 1>of modest. I like the word modest JavaScript framework, and

435
00:28:18.079 --> 00:28:19.599
<v Speaker 1>I wouldn't be shocked if Yeah, some of the other

436
00:28:19.640 --> 00:28:22.720
<v Speaker 1>ones work in similar ways. But again, it was this

437
00:28:22.839 --> 00:28:28.359
<v Speaker 1>idea that an angler does this too. I think React

438
00:28:28.359 --> 00:28:32.519
<v Speaker 1>does it to a larger degree. I'm not sure where

439
00:28:32.599 --> 00:28:36.079
<v Speaker 1>view fits in on the spectrum, but if you declare

440
00:28:37.960 --> 00:28:41.119
<v Speaker 1>an angular component to work on a particular part of

441
00:28:41.119 --> 00:28:46.079
<v Speaker 1>the dom, it tends to sort of take over that

442
00:28:46.160 --> 00:28:52.680
<v Speaker 1>part of the dom. And stimulus, in contrast, simply reacts

443
00:28:52.680 --> 00:28:55.039
<v Speaker 1>to whatever the HTML is. So the state of the

444
00:28:55.079 --> 00:29:01.119
<v Speaker 1>stimulus controller. If you inspect the the HTML on the page,

445
00:29:01.880 --> 00:29:04.279
<v Speaker 1>you can see the state of the similar Yeah.

446
00:29:04.319 --> 00:29:07.880
<v Speaker 2>So the state, Yeah, it's done before, it's been done

447
00:29:07.960 --> 00:29:11.279
<v Speaker 2>before some you know. Obviously, one place you've put state

448
00:29:11.559 --> 00:29:16.920
<v Speaker 2>is in in data attributes. Another place you can put

449
00:29:17.000 --> 00:29:21.440
<v Speaker 2>state is in comments. I guess this one. And then

450
00:29:21.440 --> 00:29:26.960
<v Speaker 2>another option is to create a JSON in beds within

451
00:29:27.039 --> 00:29:29.559
<v Speaker 2>the HML, but then you kind of lose the association

452
00:29:30.200 --> 00:29:34.480
<v Speaker 2>with particular elements on the page.

453
00:29:35.160 --> 00:29:36.119
<v Speaker 1>Yeah.

454
00:29:36.200 --> 00:29:39.480
<v Speaker 2>Yeah. The only the the only real downside of doing

455
00:29:39.519 --> 00:29:43.559
<v Speaker 2>that is effectively everything gets serialized into strings.

456
00:29:44.880 --> 00:29:52.039
<v Speaker 1>Yeah, essentially, yes, so you know, if it's manipulating say

457
00:29:52.039 --> 00:29:56.400
<v Speaker 1>a form, you know, then yeah, I mean may be

458
00:29:56.519 --> 00:29:59.880
<v Speaker 1>pulling values out of the form, or it may have

459
00:30:00.599 --> 00:30:09.160
<v Speaker 1>value attributes on some of the on some of the elements, right,

460
00:30:10.200 --> 00:30:12.440
<v Speaker 1>And that's all done with data elements. And then like

461
00:30:12.480 --> 00:30:15.079
<v Speaker 1>I said, you have the targets, and the targets are

462
00:30:15.079 --> 00:30:18.279
<v Speaker 1>basically just elements that you're probably gonna wan at manipulating

463
00:30:18.319 --> 00:30:19.160
<v Speaker 1>within your controller.

464
00:30:20.119 --> 00:30:26.839
<v Speaker 2>From what I gather, the main motivation for stimulus is

465
00:30:26.920 --> 00:30:31.240
<v Speaker 2>that if you just use turbo, then everything becomes a

466
00:30:31.279 --> 00:30:36.480
<v Speaker 2>round trip to the back end, and sometimes that's just

467
00:30:36.640 --> 00:30:41.359
<v Speaker 2>you can't do that in terms of responsiveness or some

468
00:30:41.400 --> 00:30:45.599
<v Speaker 2>sophisticated types of interactions, and then you and then you

469
00:30:45.680 --> 00:30:48.920
<v Speaker 2>do need some JavaScript on the client side for more

470
00:30:49.039 --> 00:30:49.960
<v Speaker 2>fine grain control.

471
00:30:51.880 --> 00:30:56.720
<v Speaker 1>Yes, I would add that there are some things that

472
00:30:56.759 --> 00:31:02.039
<v Speaker 1>are strictly dom manipulations that don't require a back end run,

473
00:31:02.720 --> 00:31:04.920
<v Speaker 1>like if if you're managing data and stuff like that,

474
00:31:05.200 --> 00:31:09.839
<v Speaker 1>and you can make you know, HTML calls to the

475
00:31:09.880 --> 00:31:12.960
<v Speaker 1>back end and then manipulate the domb. In fact, I've

476
00:31:12.960 --> 00:31:17.400
<v Speaker 1>seen people do essentially what Turbo does with Stimulus, where

477
00:31:17.480 --> 00:31:19.119
<v Speaker 1>you know, they go call the back end and then

478
00:31:19.119 --> 00:31:21.839
<v Speaker 1>they come back and they replace parts of the Yeah.

479
00:31:21.960 --> 00:31:23.599
<v Speaker 2>But then but then, but.

480
00:31:23.480 --> 00:31:25.200
<v Speaker 1>Turbo does that, and Turbo does it better.

481
00:31:25.799 --> 00:31:26.599
<v Speaker 2>Yeah, exactly.

482
00:31:27.319 --> 00:31:30.160
<v Speaker 1>So you know, typically those people just weren't aware that

483
00:31:30.200 --> 00:31:33.279
<v Speaker 1>Turbo had the capability. Right, It's like, Okay, I'm going

484
00:31:33.319 --> 00:31:36.960
<v Speaker 1>to sloct an element here, and I want the next subset.

485
00:31:37.079 --> 00:31:38.680
<v Speaker 1>You know, I select the country, and I want the

486
00:31:38.680 --> 00:31:41.680
<v Speaker 1>states or provinces or regions to show up in the

487
00:31:41.720 --> 00:31:42.519
<v Speaker 1>next thing.

488
00:31:43.400 --> 00:31:43.519
<v Speaker 2>Uh.

489
00:31:43.920 --> 00:31:47.480
<v Speaker 1>Turbos terrific for that, right, But let's say you you

490
00:31:47.599 --> 00:31:49.839
<v Speaker 1>want it to that you want that element to appear

491
00:31:49.920 --> 00:31:54.559
<v Speaker 1>as well. You know, you can use Turbo to insert

492
00:31:54.559 --> 00:31:58.079
<v Speaker 1>it into the page, or you can use Stimulus to

493
00:31:58.119 --> 00:32:00.359
<v Speaker 1>make it visible, depending on which way want to.

494
00:32:00.680 --> 00:32:04.279
<v Speaker 2>Now, again, looking at the really simple example on the

495
00:32:04.319 --> 00:32:08.480
<v Speaker 2>Stimulus website, I see that the name of the file

496
00:32:08.680 --> 00:32:12.559
<v Speaker 2>actually specifies the name of the quote component.

497
00:32:13.079 --> 00:32:17.720
<v Speaker 1>Of the controller. Yes, yep, So if you call it

498
00:32:18.599 --> 00:32:24.000
<v Speaker 1>menu dash drop down dash controller or or menu underscore

499
00:32:24.160 --> 00:32:27.400
<v Speaker 1>drop down underscore controller, either one. Then it's going to

500
00:32:27.440 --> 00:32:30.279
<v Speaker 1>be the menu dash drop down controller and that's what

501
00:32:30.319 --> 00:32:31.599
<v Speaker 1>you're going to put in your HTML.

502
00:32:32.680 --> 00:32:39.400
<v Speaker 2>Okay, cool, and rather than rely on the standard dome

503
00:32:39.480 --> 00:32:48.440
<v Speaker 2>events it it mechanism it again. It well, basically all

504
00:32:48.480 --> 00:32:50.400
<v Speaker 2>the frameworks are kind of going this way, but it

505
00:32:51.200 --> 00:32:57.200
<v Speaker 2>uses a click arrow the name of the controller for example,

506
00:32:57.359 --> 00:32:58.839
<v Speaker 2>so okay.

507
00:32:59.000 --> 00:33:04.559
<v Speaker 1>Yeah, and so it has for the different elements. If

508
00:33:04.559 --> 00:33:08.640
<v Speaker 1>you look at the documentation, is there, but you can click, uh,

509
00:33:08.680 --> 00:33:14.200
<v Speaker 1>there's a toggle for like a details element. If you

510
00:33:14.240 --> 00:33:17.799
<v Speaker 1>have an input, you can put an input element on it, right,

511
00:33:17.839 --> 00:33:23.160
<v Speaker 1>And so you can use it to do things like

512
00:33:23.160 --> 00:33:26.480
<v Speaker 1>like a search. You know where you're typing in and

513
00:33:26.519 --> 00:33:30.079
<v Speaker 1>it does the look up and then gives you the

514
00:33:30.119 --> 00:33:32.279
<v Speaker 1>options that it found when it searched. Right, so it

515
00:33:32.279 --> 00:33:34.160
<v Speaker 1>may do a run to the back end on that

516
00:33:35.319 --> 00:33:39.880
<v Speaker 1>as you're typing. That's an input event, submit event on

517
00:33:39.920 --> 00:33:46.200
<v Speaker 1>a form, change event on a select. But yeah, you

518
00:33:46.200 --> 00:33:47.920
<v Speaker 1>you just yeah, you do the name of the event

519
00:33:48.000 --> 00:33:53.720
<v Speaker 1>and then an arrow and then it's controller what hash

520
00:33:53.799 --> 00:33:56.519
<v Speaker 1>number sign and then the method.

521
00:33:57.200 --> 00:34:00.960
<v Speaker 2>I'm kind of curious whither you chose hash or than that.

522
00:34:01.880 --> 00:34:04.400
<v Speaker 1>I'm assuming that's straight out of rails. That's the way

523
00:34:04.480 --> 00:34:09.280
<v Speaker 1>the rails and U specifies, Hey, this is a this

524
00:34:09.320 --> 00:34:11.840
<v Speaker 1>is a call on this method of this class.

525
00:34:11.880 --> 00:34:14.320
<v Speaker 2>Okay, yeah, other way.

526
00:34:14.440 --> 00:34:17.840
<v Speaker 1>Also keyboard events, right, so you can tell it if

527
00:34:17.840 --> 00:34:21.280
<v Speaker 1>you hit escape or enter or type a letter type

528
00:34:21.280 --> 00:34:26.000
<v Speaker 1>of number, you can you can have it react to

529
00:34:26.039 --> 00:34:27.360
<v Speaker 1>those kinds of events as well.

530
00:34:30.199 --> 00:34:35.320
<v Speaker 2>Interesting, I'm would you actually put any data in the

531
00:34:35.360 --> 00:34:40.440
<v Speaker 2>controller object itself or all the data should reside on

532
00:34:40.519 --> 00:34:41.880
<v Speaker 2>the elements in the HTML.

533
00:34:43.159 --> 00:34:46.639
<v Speaker 1>So control uh so stimulus doesn't really give you a

534
00:34:46.639 --> 00:34:50.440
<v Speaker 1>good mechanism to store any of the data in the

535
00:34:50.480 --> 00:34:55.480
<v Speaker 1>controller object itself, and so you would that's where a

536
00:34:55.599 --> 00:35:03.079
<v Speaker 1>model or value data at comes in, and so you

537
00:35:03.079 --> 00:35:06.320
<v Speaker 1>would actually store any of those. So most of the

538
00:35:06.360 --> 00:35:09.159
<v Speaker 1>time it's it's going to be in some attribute on

539
00:35:09.239 --> 00:35:14.719
<v Speaker 1>your HTML anyway. But let's say that you want some

540
00:35:15.679 --> 00:35:22.760
<v Speaker 1>specific value for you know, kind of a global setting

541
00:35:22.800 --> 00:35:26.880
<v Speaker 1>within your controller. You would set that up on your

542
00:35:27.000 --> 00:35:31.199
<v Speaker 1>DOM element and so often you put those on. So

543
00:35:31.280 --> 00:35:32.800
<v Speaker 1>you have the DIV and then you have the data

544
00:35:32.880 --> 00:35:36.840
<v Speaker 1>dash controller attribute, and then after that you have the

545
00:35:36.920 --> 00:35:42.880
<v Speaker 1>data dash whatever the controller name is dash value attribute

546
00:35:43.360 --> 00:35:46.000
<v Speaker 1>for kind of that global setting, and you can manipulate

547
00:35:46.079 --> 00:35:52.679
<v Speaker 1>that if you would like. You can also you know,

548
00:35:52.760 --> 00:35:55.239
<v Speaker 1>do do all kinds of other things with it, and

549
00:35:55.280 --> 00:35:57.519
<v Speaker 1>those values actually support a number of things you can

550
00:35:57.519 --> 00:36:01.639
<v Speaker 1>have or raise Boollion's numbers objects, which are basically Jason objects.

551
00:36:01.880 --> 00:36:07.039
<v Speaker 2>Yeah, but I guess I guess that really it's it's

552
00:36:07.079 --> 00:36:11.960
<v Speaker 2>mostly for local transient state. Anyway, if you've got like

553
00:36:12.639 --> 00:36:14.840
<v Speaker 2>more persistent state that would.

554
00:36:14.559 --> 00:36:15.960
<v Speaker 1>Resign, you're going to push that.

555
00:36:16.920 --> 00:36:19.360
<v Speaker 2>Yeah, within the within rails obvious.

556
00:36:20.159 --> 00:36:23.199
<v Speaker 1>Or whatever else. Right, Stimulus and turbo are both completely

557
00:36:23.239 --> 00:36:25.199
<v Speaker 1>independent of rails.

558
00:36:25.199 --> 00:36:27.960
<v Speaker 2>But again I assume they're mostly used in the rails

559
00:36:28.000 --> 00:36:35.360
<v Speaker 2>community probably. Yeah, again, looking looking at the page, I'm

560
00:36:35.480 --> 00:36:40.440
<v Speaker 2>actually I actually don't see the word rails on the

561
00:36:40.480 --> 00:36:46.239
<v Speaker 2>Stimulus website homepage at least, So so, yeah, it's it's

562
00:36:46.280 --> 00:36:49.039
<v Speaker 2>meant to be like you know, it might be used

563
00:36:49.400 --> 00:36:53.239
<v Speaker 2>in conjunction with, but it's meant to be independent. And

564
00:36:53.239 --> 00:36:59.599
<v Speaker 2>and hot wired is like, what that's the overall term.

565
00:36:59.760 --> 00:37:03.159
<v Speaker 2>Is it an actual technology or just like a moniker?

566
00:37:05.119 --> 00:37:07.559
<v Speaker 1>From what I understand, it's just a moniker. There's nothing

567
00:37:08.840 --> 00:37:11.320
<v Speaker 1>that's independently part of hot wire that's not part of

568
00:37:12.239 --> 00:37:13.880
<v Speaker 1>turbo stimulus or urbinative.

569
00:37:15.000 --> 00:37:20.639
<v Speaker 2>Okay, cool, got it, and you've been using it extensively.

570
00:37:20.039 --> 00:37:25.679
<v Speaker 1>Assume, Yeah, I've been using it quite a bit. It's

571
00:37:25.760 --> 00:37:29.000
<v Speaker 1>it's a really really convenient way to write applications that

572
00:37:29.039 --> 00:37:35.559
<v Speaker 1>you I guess for one, you know you don't want

573
00:37:35.559 --> 00:37:39.000
<v Speaker 1>the heavy handed approach that you get from say a REACT.

574
00:37:39.800 --> 00:37:41.800
<v Speaker 1>And it's also a really convenient way to write your

575
00:37:41.800 --> 00:37:47.320
<v Speaker 1>applications if you just want really clean and quick ways

576
00:37:47.320 --> 00:37:49.360
<v Speaker 1>to manipulate the dom.

577
00:37:49.599 --> 00:37:51.360
<v Speaker 3>So in other words, it's sort of like where if

578
00:37:51.400 --> 00:37:54.320
<v Speaker 3>you want to have a statically generated side for the

579
00:37:54.360 --> 00:37:56.639
<v Speaker 3>most part and just sprinkle a little bit of functionality

580
00:37:56.679 --> 00:37:58.320
<v Speaker 3>on the top of it, and you can do that,

581
00:37:58.440 --> 00:38:00.239
<v Speaker 3>so you get your speed and your pre render with

582
00:38:01.079 --> 00:38:02.760
<v Speaker 3>the minimal functionality that you need.

583
00:38:03.519 --> 00:38:07.480
<v Speaker 1>Yeah, basically so and again DHH calls it javascrip sprinkles

584
00:38:08.280 --> 00:38:11.239
<v Speaker 1>so and that that's the idea, right, So you just

585
00:38:11.239 --> 00:38:13.519
<v Speaker 1>sprinkle in what you need where you need it, and

586
00:38:14.039 --> 00:38:19.480
<v Speaker 1>you know you don't have this big app managing a

587
00:38:19.480 --> 00:38:21.199
<v Speaker 1>whole bunch of state and other things.

588
00:38:23.159 --> 00:38:29.039
<v Speaker 2>Yeah. Very often when I see significant state management on

589
00:38:29.119 --> 00:38:33.719
<v Speaker 2>the front end, I mean sometimes it's it's inescapable, but

590
00:38:34.320 --> 00:38:36.480
<v Speaker 2>very often it's just wrong.

591
00:38:37.679 --> 00:38:41.519
<v Speaker 1>Yeah. Well, I think in a lot of cases, what

592
00:38:41.559 --> 00:38:44.440
<v Speaker 1>you see is you see people that basically say, hey, look,

593
00:38:44.880 --> 00:38:48.559
<v Speaker 1>I've worked at four different companies. They all had significant

594
00:38:49.159 --> 00:38:51.239
<v Speaker 1>state that they had to manage on the front end,

595
00:38:51.400 --> 00:38:52.880
<v Speaker 1>or they felt like they had to manage on the

596
00:38:52.880 --> 00:38:55.440
<v Speaker 1>front end. I'm not convinced that you necessarily have to

597
00:38:55.480 --> 00:38:57.840
<v Speaker 1>do that, but anyway, so what they do is when

598
00:38:57.960 --> 00:39:01.199
<v Speaker 1>they basically adopt the same stack, can use the same approaches,

599
00:39:01.800 --> 00:39:04.920
<v Speaker 1>and you know, maybe you don't need that, Maybe you

600
00:39:05.000 --> 00:39:08.400
<v Speaker 1>just need a tiny bit of state management or no

601
00:39:08.559 --> 00:39:11.039
<v Speaker 1>state management. You can find other ways to work around it.

602
00:39:14.719 --> 00:39:22.239
<v Speaker 2>Basically, if if you're building dashboards then like sophisticated interactive dashboards,

603
00:39:23.239 --> 00:39:28.960
<v Speaker 2>then then you you probably can't escape the need like

604
00:39:29.039 --> 00:39:31.400
<v Speaker 2>it's a it's it's an app that happens to be

605
00:39:31.480 --> 00:39:35.079
<v Speaker 2>running on the web, uh, and then you can't really

606
00:39:35.159 --> 00:39:39.480
<v Speaker 2>get away from the need for a sophisticated front end. Again,

607
00:39:39.519 --> 00:39:42.199
<v Speaker 2>if you're building like an editor for something, also the

608
00:39:42.239 --> 00:39:48.039
<v Speaker 2>same for most other things, like if it's for example,

609
00:39:48.079 --> 00:39:55.880
<v Speaker 2>an e commerce website, more often than not, you you're

610
00:39:55.920 --> 00:39:59.440
<v Speaker 2>going to need to do a lot of your stay

611
00:39:59.559 --> 00:40:03.400
<v Speaker 2>at main on the back end anyway for persistence sake,

612
00:40:03.639 --> 00:40:07.079
<v Speaker 2>So why not push as much as you can there

613
00:40:07.760 --> 00:40:10.760
<v Speaker 2>and avoid doing it on both sides as much as

614
00:40:10.760 --> 00:40:11.280
<v Speaker 2>you can.

615
00:40:11.920 --> 00:40:14.400
<v Speaker 1>Yeah, I would also push back just a little bit

616
00:40:14.480 --> 00:40:17.719
<v Speaker 1>on the idea of maybe an editor or a dashboard.

617
00:40:19.119 --> 00:40:21.440
<v Speaker 1>I've seen plenty of that kind of a thing done

618
00:40:21.480 --> 00:40:27.320
<v Speaker 1>with an Alpine or a stimulus where you know, you

619
00:40:27.360 --> 00:40:29.679
<v Speaker 1>pull in some third party library like a chart JS

620
00:40:29.840 --> 00:40:33.320
<v Speaker 1>or something and then let it do a lot of

621
00:40:33.360 --> 00:40:36.480
<v Speaker 1>that stuff and so and then if you're building it

622
00:40:36.519 --> 00:40:38.239
<v Speaker 1>on your own, the other thing is is you can

623
00:40:38.280 --> 00:40:42.519
<v Speaker 1>set up how each of the elements react to the

624
00:40:42.599 --> 00:40:46.559
<v Speaker 1>different things you do, right, so you know, you can

625
00:40:46.679 --> 00:40:49.119
<v Speaker 1>control what happens when you hover things like that, and

626
00:40:49.159 --> 00:40:53.320
<v Speaker 1>then effectively, you know, you use something like stimulus, if

627
00:40:53.360 --> 00:40:55.320
<v Speaker 1>you need some kind of animation or something like that,

628
00:40:55.360 --> 00:40:59.119
<v Speaker 1>you can trigger that. And so like some of the

629
00:40:59.199 --> 00:41:02.159
<v Speaker 1>some of the things i've or that I've built. So

630
00:41:02.440 --> 00:41:04.679
<v Speaker 1>again going back to the idea of a menu with

631
00:41:04.760 --> 00:41:09.000
<v Speaker 1>drop down you know sub menus. You know, I just

632
00:41:09.159 --> 00:41:15.360
<v Speaker 1>used a transition animation library and I just called it

633
00:41:15.400 --> 00:41:18.280
<v Speaker 1>in my stimulus controller and so it did a lot

634
00:41:18.280 --> 00:41:20.719
<v Speaker 1>of that stuff. And so I think there are ways

635
00:41:20.760 --> 00:41:25.320
<v Speaker 1>to do this that without it being onerous, that you

636
00:41:25.440 --> 00:41:28.039
<v Speaker 1>could do it without having to have kind of the

637
00:41:28.159 --> 00:41:32.039
<v Speaker 1>full level data control stuff that that a lot of

638
00:41:32.039 --> 00:41:35.719
<v Speaker 1>times you reach for in React apt. But that said,

639
00:41:35.760 --> 00:41:38.199
<v Speaker 1>I mean, if that's a technology you're familiar with and

640
00:41:38.199 --> 00:41:40.920
<v Speaker 1>you're comfortable doing it, I'm not telling you you're doing

641
00:41:40.920 --> 00:41:44.199
<v Speaker 1>it wrong. But if you're trying to find.

642
00:41:43.960 --> 00:41:47.039
<v Speaker 2>A profess, would be telling you that you're doing it wrong.

643
00:41:48.480 --> 00:41:51.320
<v Speaker 1>My point is is that there there there are other

644
00:41:51.360 --> 00:41:55.079
<v Speaker 1>ways to do it, and in this case, in my

645
00:41:55.199 --> 00:41:58.079
<v Speaker 1>experience at least, there's a lot less overhead to doing

646
00:41:58.159 --> 00:42:00.000
<v Speaker 1>it this way as opposed to doing it the other way.

647
00:42:00.719 --> 00:42:04.079
<v Speaker 2>Another interesting thing in this context is a lot of

648
00:42:04.119 --> 00:42:09.840
<v Speaker 2>developers may not be aware, but HTML and CSS are

649
00:42:09.920 --> 00:42:13.679
<v Speaker 2>getting a lot of features yes, make it possible to

650
00:42:13.719 --> 00:42:20.719
<v Speaker 2>build quite sophisticated user interfaces without a sophisticated framework, like

651
00:42:20.800 --> 00:42:27.159
<v Speaker 2>if you want pop ups, pull down menus, right click menus,

652
00:42:27.199 --> 00:42:31.920
<v Speaker 2>et cetera. All these things which used to require fairly

653
00:42:32.000 --> 00:42:37.679
<v Speaker 2>sophisticated coding can now be achieved fairly cleanly with HTML,

654
00:42:37.880 --> 00:42:42.800
<v Speaker 2>CSS and minimal JavaScript. And that's especially attractive in the

655
00:42:42.840 --> 00:42:47.559
<v Speaker 2>context of a minimal framework like Stimulus.

656
00:42:48.400 --> 00:42:52.960
<v Speaker 1>Yeah, and that's that's kind of the approach that that

657
00:42:53.519 --> 00:42:56.760
<v Speaker 1>I've been hitting right. So the library so again you

658
00:42:56.800 --> 00:42:59.639
<v Speaker 1>know kind of that that transition where you bring the

659
00:42:59.639 --> 00:43:04.159
<v Speaker 1>menu and things. I mean effectively what I'm doing is

660
00:43:04.519 --> 00:43:08.440
<v Speaker 1>I mean using a library that uses CSS classes and

661
00:43:08.559 --> 00:43:13.360
<v Speaker 1>just swaps the classes out right, and so it you know.

662
00:43:13.360 --> 00:43:17.239
<v Speaker 2>You should definitely be looking at pop ups on the

663
00:43:17.519 --> 00:43:22.079
<v Speaker 2>MDN read about it a lot, a lot of the

664
00:43:22.119 --> 00:43:25.480
<v Speaker 2>more sophisticated so so that could provide a lot of

665
00:43:25.519 --> 00:43:28.920
<v Speaker 2>the sophisticated user interface capabilities that you would like to

666
00:43:29.440 --> 00:43:35.280
<v Speaker 2>implement with minimal JavaScript like and it works across quite

667
00:43:35.320 --> 00:43:38.199
<v Speaker 2>a number of browsers. I need to check comparsibility with

668
00:43:38.360 --> 00:43:42.559
<v Speaker 2>Safari et cetera. But overall it's it's pretty well supported.

669
00:43:43.440 --> 00:43:48.800
<v Speaker 2>And another one that's really interesting in this context is

670
00:43:48.840 --> 00:43:53.800
<v Speaker 2>the view Transitions API, making it possible to create sophisticated

671
00:43:53.840 --> 00:43:58.800
<v Speaker 2>animations when transitioning between things in between states.

672
00:44:00.079 --> 00:44:02.360
<v Speaker 1>We should do an episode on those anyway.

673
00:44:02.440 --> 00:44:05.239
<v Speaker 2>Actually we actually did on a couple of them. We

674
00:44:05.400 --> 00:44:10.960
<v Speaker 2>had we had we had normals intal to talk about

675
00:44:11.519 --> 00:44:13.119
<v Speaker 2>the view transitions example.

676
00:44:13.239 --> 00:44:17.800
<v Speaker 3>Yeah, yeah, you talk about stuff that's in HTML that

677
00:44:17.920 --> 00:44:19.800
<v Speaker 3>you know used to require a lot of stuff. There's

678
00:44:19.840 --> 00:44:22.320
<v Speaker 3>a my nurses seite that I work on quite a

679
00:44:22.360 --> 00:44:24.360
<v Speaker 3>bit has you know, a bunch of date fields, and

680
00:44:24.559 --> 00:44:26.760
<v Speaker 3>you know it used to be you had your date pickers,

681
00:44:26.760 --> 00:44:29.480
<v Speaker 3>you had to import from various jobascripts. Yeah, I just

682
00:44:29.559 --> 00:44:30.880
<v Speaker 3>used the native HTML once.

683
00:44:30.960 --> 00:44:32.039
<v Speaker 1>Yeah.

684
00:44:32.079 --> 00:44:34.360
<v Speaker 3>You know they're not and people will complain about them.

685
00:44:34.360 --> 00:44:36.239
<v Speaker 3>Oh they're pretty bare bones and they don't do this,

686
00:44:36.280 --> 00:44:38.800
<v Speaker 3>and well yeah, I mean I don't know how much expect.

687
00:44:39.480 --> 00:44:43.119
<v Speaker 3>But for my you know, functionality where all I need

688
00:44:43.159 --> 00:44:45.679
<v Speaker 3>somebody is all I need is for somebody to be

689
00:44:45.679 --> 00:44:47.840
<v Speaker 3>able to click select the date, get right to the

690
00:44:47.840 --> 00:44:50.119
<v Speaker 3>field that I'm off and running. It's great. And I

691
00:44:50.159 --> 00:44:52.280
<v Speaker 3>didn't have to import any JavaScript. I mean, that's the

692
00:44:52.320 --> 00:44:57.239
<v Speaker 3>whole thing about JavaScript performance, right Dan. The less JavaScript

693
00:44:57.239 --> 00:44:59.800
<v Speaker 3>that you're downloading to your browser, the faster you're going

694
00:44:59.840 --> 00:45:00.000
<v Speaker 3>to be.

695
00:45:00.920 --> 00:45:05.039
<v Speaker 2>So actually it well, it's not just about performance. It's

696
00:45:05.079 --> 00:45:10.239
<v Speaker 2>also about performance is one important aspect. Obviously, the less

697
00:45:10.320 --> 00:45:14.679
<v Speaker 2>JavaScript the better, but in that regard, but it's in general,

698
00:45:14.800 --> 00:45:20.000
<v Speaker 2>I'd say that anything that can be done sufficiently well

699
00:45:20.199 --> 00:45:25.079
<v Speaker 2>without with just HTML and CSS and without JavaScript, should

700
00:45:25.079 --> 00:45:29.159
<v Speaker 2>be done just with HTML and CSS without JavaScript, vera

701
00:45:29.480 --> 00:45:32.840
<v Speaker 2>platforms exactly.

702
00:45:33.480 --> 00:45:39.880
<v Speaker 1>For example, Ja's Rails World from a couple of weeks ago,

703
00:45:40.280 --> 00:45:42.960
<v Speaker 1>because this is this is more or less what he's.

704
00:45:43.079 --> 00:45:48.039
<v Speaker 2>Yeah, I know, I started watching it. There are a

705
00:45:48.079 --> 00:45:50.840
<v Speaker 2>few issues, but we'll get to that in a second.

706
00:45:50.920 --> 00:45:54.480
<v Speaker 2>I just want to mention that Jake Archibald, for example,

707
00:45:54.559 --> 00:45:59.639
<v Speaker 2>recently posted an article in which they talk. He talks

708
00:45:59.679 --> 00:46:04.039
<v Speaker 2>about various proposals or ideas that they have around uh

709
00:46:04.159 --> 00:46:08.960
<v Speaker 2>styling or stylized drop down menus that will be built

710
00:46:09.000 --> 00:46:13.559
<v Speaker 2>into the platform. So for if you want more sophisticated

711
00:46:14.280 --> 00:46:19.480
<v Speaker 2>drop down menus, like instead of just the regular unstylable

712
00:46:19.800 --> 00:46:25.480
<v Speaker 2>select you know fields. Uh So they're working on that

713
00:46:25.639 --> 00:46:28.440
<v Speaker 2>sort of thing. And again, once you've got it as

714
00:46:28.480 --> 00:46:33.719
<v Speaker 2>part of the platform, it becomes very easy to use

715
00:46:33.760 --> 00:46:38.079
<v Speaker 2>it from within any framework. But the thing is, if

716
00:46:38.119 --> 00:46:43.360
<v Speaker 2>you're if it makes the framework code minimal, you start

717
00:46:43.400 --> 00:46:45.960
<v Speaker 2>asking yourself, well, why do what do I need the

718
00:46:46.000 --> 00:46:52.440
<v Speaker 2>framework for? Like if if my framework stuff is just

719
00:46:52.519 --> 00:46:57.400
<v Speaker 2>really thin wrappers around the platform features. Now, obviously we're not,

720
00:46:57.599 --> 00:47:01.199
<v Speaker 2>we're not really quite there yet. Of before I get

721
00:47:01.239 --> 00:47:05.480
<v Speaker 2>a lot of hate about Yeah, our design system does

722
00:47:05.519 --> 00:47:08.519
<v Speaker 2>a whole lot more than that, And I get it,

723
00:47:08.239 --> 00:47:11.840
<v Speaker 2>it's the same for us. But you know, we're getting

724
00:47:11.920 --> 00:47:15.760
<v Speaker 2>there lately, probably like ten years too late. In a

725
00:47:15.760 --> 00:47:21.920
<v Speaker 2>lot of ways, but we're getting there, and it does

726
00:47:22.079 --> 00:47:25.320
<v Speaker 2>make this type of approach, the approach that you're saying

727
00:47:25.320 --> 00:47:31.559
<v Speaker 2>that is espousing, a lot more attractive and reasonable. I

728
00:47:31.719 --> 00:47:36.440
<v Speaker 2>don't necessarily agree with everything he says. For example, his

729
00:47:36.599 --> 00:47:41.920
<v Speaker 2>stance on bundling. It seems he's slightly backtracked. Again I

730
00:47:42.000 --> 00:47:45.960
<v Speaker 2>might be wrong, but off of his extreme stance that

731
00:47:46.039 --> 00:47:50.679
<v Speaker 2>you should unbundle everywhere, now it's more about unbundling during development,

732
00:47:50.840 --> 00:47:53.719
<v Speaker 2>which I'm totally cool with. I don't know if he's

733
00:47:53.760 --> 00:47:59.320
<v Speaker 2>also opposed to bundling in production. That's still problematic or

734
00:47:59.320 --> 00:48:00.239
<v Speaker 2>can be problem.

735
00:48:02.000 --> 00:48:04.079
<v Speaker 1>And yeah, and so if if we want to get

736
00:48:04.079 --> 00:48:06.920
<v Speaker 1>into that. So that's now now we're getting into more

737
00:48:06.920 --> 00:48:10.679
<v Speaker 1>of the weeds of how Rails works. Of course, it's

738
00:48:10.679 --> 00:48:15.440
<v Speaker 1>still using you know, an open standard that you could

739
00:48:15.519 --> 00:48:18.480
<v Speaker 1>use in other apps. But the way that Rails works

740
00:48:18.519 --> 00:48:23.159
<v Speaker 1>with its components or with its JavaScript stuff is it

741
00:48:23.239 --> 00:48:29.960
<v Speaker 1>uses import maps, and so you can use a bundler

742
00:48:30.239 --> 00:48:33.320
<v Speaker 1>for a lot of that stuff. You know. I've also

743
00:48:33.360 --> 00:48:37.920
<v Speaker 1>seen people adopting the vat really or vat Rail's gems

744
00:48:37.960 --> 00:48:42.159
<v Speaker 1>to get their stuff done. But you know, instead of

745
00:48:42.239 --> 00:48:46.119
<v Speaker 1>using import maps, but import maps, the idea is is

746
00:48:46.159 --> 00:48:50.639
<v Speaker 1>that there's there's no build step, and so I mean,

747
00:48:50.679 --> 00:48:53.159
<v Speaker 1>that's that's the big feature that he's touting is that

748
00:48:53.239 --> 00:48:55.800
<v Speaker 1>you don't you don't have to go and learn VAT,

749
00:48:55.920 --> 00:48:58.960
<v Speaker 1>you don't have to go learn web Pack, you don't

750
00:48:59.000 --> 00:49:03.960
<v Speaker 1>have to go learn whatever. The next bundler is effectively,

751
00:49:04.639 --> 00:49:08.119
<v Speaker 1>you put your files into the import map and then

752
00:49:09.360 --> 00:49:11.079
<v Speaker 1>you know, you can tell it to preload the ones

753
00:49:11.079 --> 00:49:13.760
<v Speaker 1>that you need preloaded, and then you're you're good to

754
00:49:13.800 --> 00:49:16.960
<v Speaker 1>go and off to the races. And I mean the

755
00:49:17.039 --> 00:49:20.079
<v Speaker 1>approach has worked fairly well in every app that I've used.

756
00:49:20.079 --> 00:49:22.360
<v Speaker 1>But but yeah, you know, you get this list of

757
00:49:22.800 --> 00:49:26.760
<v Speaker 1>and if you're using Stimulus, you you basically have an

758
00:49:26.840 --> 00:49:29.400
<v Speaker 1>import map entry for every single one of your controllers.

759
00:49:31.280 --> 00:49:36.039
<v Speaker 1>But again, it's it's worked fine on anything that I've

760
00:49:36.039 --> 00:49:38.559
<v Speaker 1>worked on in production.

761
00:49:39.199 --> 00:49:41.960
<v Speaker 3>Well to do a little bit of Pedantic Devil's Advocate here.

762
00:49:42.519 --> 00:49:45.039
<v Speaker 3>Beat is pretty One of the things about Beat is

763
00:49:45.039 --> 00:49:47.599
<v Speaker 3>that it's pretty plug and play. I mean, you come,

764
00:49:48.039 --> 00:49:50.280
<v Speaker 3>you said a couple of things. It ain't webpacked, you know.

765
00:49:50.320 --> 00:49:52.639
<v Speaker 3>That's the thing about Webpack is the can big files,

766
00:49:52.679 --> 00:49:54.719
<v Speaker 3>you know, but Beat is pretty plug and play.

767
00:49:55.360 --> 00:49:58.079
<v Speaker 1>Yeah, I've done theat on a couple of rails apps,

768
00:49:58.639 --> 00:50:01.199
<v Speaker 1>and I think you have to put in a config file,

769
00:50:01.280 --> 00:50:06.440
<v Speaker 1>but it's I mean, you can tell you about one

770
00:50:07.000 --> 00:50:09.000
<v Speaker 1>works pretty much out of the box.

771
00:50:09.400 --> 00:50:13.360
<v Speaker 2>Yep. Look, we've had people on our and on the

772
00:50:13.400 --> 00:50:18.119
<v Speaker 2>show in the past talking about, you know, like bundling

773
00:50:18.239 --> 00:50:23.079
<v Speaker 2>the consequences or not. So obviously getting rid of a

774
00:50:23.119 --> 00:50:28.480
<v Speaker 2>built step if you can achieve it is great. It's

775
00:50:28.519 --> 00:50:34.000
<v Speaker 2>obviously totally undoable. If you're using a front end framework

776
00:50:34.320 --> 00:50:37.719
<v Speaker 2>like React or any other or most of the front

777
00:50:37.800 --> 00:50:41.360
<v Speaker 2>and frameworks that require some sort of a built slash

778
00:50:41.440 --> 00:50:47.039
<v Speaker 2>compilation step. It also means getting rid of typescript unless

779
00:50:47.079 --> 00:50:53.800
<v Speaker 2>you're using jas DOC so so that's also a significant consequence.

780
00:50:53.920 --> 00:50:56.400
<v Speaker 2>Like you know, I think we may have spoken about

781
00:50:56.400 --> 00:50:58.880
<v Speaker 2>it with guilta yah. I think about the fact that

782
00:51:01.519 --> 00:51:03.840
<v Speaker 2>you know, if you're doing front end, you're going to

783
00:51:03.960 --> 00:51:07.960
<v Speaker 2>be using any of the major frameworks, then you're going

784
00:51:08.039 --> 00:51:11.880
<v Speaker 2>to have a built step regardless, and then you might

785
00:51:11.920 --> 00:51:15.079
<v Speaker 2>as well just do all the stuff that you know,

786
00:51:15.320 --> 00:51:17.639
<v Speaker 2>leverage all the benefits that it can provide if you're

787
00:51:17.639 --> 00:51:20.800
<v Speaker 2>going to have to have it anyway. I get that

788
00:51:21.559 --> 00:51:24.760
<v Speaker 2>dage Age really wants to avoid it and if you can,

789
00:51:25.599 --> 00:51:29.599
<v Speaker 2>that's definitely an advantage, but it's advantage that comes at

790
00:51:29.599 --> 00:51:33.519
<v Speaker 2>the price. For example, dage Age doesn't use typescript. He

791
00:51:33.599 --> 00:51:35.480
<v Speaker 2>doesn't want to use typeescript.

792
00:51:35.719 --> 00:51:37.679
<v Speaker 1>Nope, he doesn't. In fact, I have some words to

793
00:51:37.679 --> 00:51:39.679
<v Speaker 1>eat on that. So last time when we talked to

794
00:51:42.760 --> 00:51:46.320
<v Speaker 1>what's his name now, I'm Joanna Blank. Last week it.

795
00:51:46.280 --> 00:51:48.840
<v Speaker 2>Was it was Dan, it was Thomas Gabbin.

796
00:51:49.440 --> 00:51:53.400
<v Speaker 1>Yeah, so I said, I don't know if he's directly

797
00:51:53.400 --> 00:51:56.760
<v Speaker 1>opposed to static types. I went and watched some of

798
00:51:56.800 --> 00:51:59.400
<v Speaker 1>the talks from rails World. He is definitely not on

799
00:51:59.480 --> 00:52:02.199
<v Speaker 1>board with static type. So I will eat those words

800
00:52:03.039 --> 00:52:05.320
<v Speaker 1>because I said I didn't know, But it turns out

801
00:52:05.320 --> 00:52:10.320
<v Speaker 1>that yeah, absolutely he Yeah. He was talking to Toby

802
00:52:10.440 --> 00:52:14.639
<v Speaker 1>from Shopify, CEO of Shopify, and Matt's the guy who

803
00:52:14.679 --> 00:52:19.719
<v Speaker 1>created Ruby, and they asked him, so, if you two

804
00:52:19.719 --> 00:52:22.599
<v Speaker 1>could swap places, what would you do, and David said,

805
00:52:22.760 --> 00:52:23.679
<v Speaker 1>no static types.

806
00:52:23.719 --> 00:52:33.400
<v Speaker 5>Ever, I want to hear the argument for dynamic types

807
00:52:34.519 --> 00:52:35.800
<v Speaker 5>because I don't get it.

808
00:52:36.320 --> 00:52:40.239
<v Speaker 2>They argue, Look, first of all, you know, if you're

809
00:52:40.239 --> 00:52:46.880
<v Speaker 2>coming from from a dynamic, inherently dynamic language like Ruby

810
00:52:47.039 --> 00:52:52.039
<v Speaker 2>or like JavaScript or like Python, then you know there's

811
00:52:52.079 --> 00:52:56.159
<v Speaker 2>a certain reason you picked that language. There's a certain reason,

812
00:52:56.320 --> 00:52:59.800
<v Speaker 2>like the age ages you know loves working in Ruby,

813
00:53:00.400 --> 00:53:05.559
<v Speaker 2>uh and and and the and Ruby is inherently dynamically typed.

814
00:53:06.159 --> 00:53:08.719
<v Speaker 4>So what I meant was loose types. I I like

815
00:53:08.840 --> 00:53:10.559
<v Speaker 4>dynamic types. I don't like loose types.

816
00:53:11.440 --> 00:53:13.239
<v Speaker 1>I'm not sure you mean yeah, I.

817
00:53:13.199 --> 00:53:15.679
<v Speaker 4>Mean so dynamic typing meaning the types are assigned at

818
00:53:15.760 --> 00:53:19.960
<v Speaker 4>run time. Uh, strict typing meaning that types don't change.

819
00:53:19.960 --> 00:53:23.199
<v Speaker 4>Once something's a number, it's a number. So if you like,

820
00:53:23.360 --> 00:53:27.960
<v Speaker 4>typescript is strict typing, the types are still dynamic. But well,

821
00:53:28.000 --> 00:53:29.679
<v Speaker 4>I guess they're not as dynamic as Go. Like Go

822
00:53:29.800 --> 00:53:34.599
<v Speaker 4>has dynamic typing, typescript is probably less dynamic than Go.

823
00:53:34.840 --> 00:53:40.760
<v Speaker 2>But I'm to following. Look, typescript basically is a layer

824
00:53:41.159 --> 00:53:45.480
<v Speaker 2>above JavaScript that gets totally stripped that it built slash

825
00:53:45.480 --> 00:53:48.760
<v Speaker 2>compiled time. As you know, we discussed the tomel last

826
00:53:48.760 --> 00:53:53.119
<v Speaker 2>week if if our listeners are interested in more details

827
00:53:53.159 --> 00:53:58.360
<v Speaker 2>about it. But but basically, typescript enforces types at development

828
00:53:58.440 --> 00:54:02.960
<v Speaker 2>slash build time. Once you it has zero impact on

829
00:54:03.039 --> 00:54:07.639
<v Speaker 2>the actual generated code. And in this regard, it's different

830
00:54:07.880 --> 00:54:11.440
<v Speaker 2>from Go or from Java. Wow, where where where the

831
00:54:11.480 --> 00:54:14.840
<v Speaker 2>types that you specify actually impacted the type of code

832
00:54:14.840 --> 00:54:15.880
<v Speaker 2>that gets generated.

833
00:54:16.440 --> 00:54:21.320
<v Speaker 4>If that's not entirely true though, because if you once

834
00:54:21.400 --> 00:54:24.519
<v Speaker 4>you declare an object in JavaScript, if you never delete

835
00:54:24.880 --> 00:54:28.920
<v Speaker 4>and you never add an inconsistent property to it, it

836
00:54:29.000 --> 00:54:31.559
<v Speaker 4>is optimized as that struct type.

837
00:54:32.159 --> 00:54:35.800
<v Speaker 2>Yeah, there's a lot of optimizations going on. The optimizations

838
00:54:35.800 --> 00:54:40.119
<v Speaker 2>are pretty much dependent on the JavaScript engine figuring out

839
00:54:40.199 --> 00:54:44.119
<v Speaker 2>that something has a certain type and then optimizing according

840
00:54:44.159 --> 00:54:48.199
<v Speaker 2>to that type. But there's nothing p in the language

841
00:54:48.719 --> 00:54:55.159
<v Speaker 2>preventing you from doing something else in in so it's

842
00:54:55.199 --> 00:54:58.599
<v Speaker 2>it's kind of the it's kind of like an AI

843
00:54:58.639 --> 00:55:02.079
<v Speaker 2>like approach of the on time inferring that something will

844
00:55:02.119 --> 00:55:05.079
<v Speaker 2>always be an int and therefore we can put it

845
00:55:05.840 --> 00:55:10.920
<v Speaker 2>in an int type you know, register whatever, or or

846
00:55:11.400 --> 00:55:17.440
<v Speaker 2>memory address. But i'll I'll give an example. Okay. In

847
00:55:17.480 --> 00:55:21.760
<v Speaker 2>a language like C plus plus, you've got overloading, which

848
00:55:21.800 --> 00:55:26.440
<v Speaker 2>means that you can specify the same function to two

849
00:55:27.000 --> 00:55:30.480
<v Speaker 2>implementations of the same function based on the type of

850
00:55:30.639 --> 00:55:34.199
<v Speaker 2>argument on the that it receives. So you can have

851
00:55:34.679 --> 00:55:39.239
<v Speaker 2>a function called ad which takes two numbers and returns

852
00:55:39.320 --> 00:55:41.480
<v Speaker 2>the sum of the numbers, and you can have a

853
00:55:41.519 --> 00:55:45.400
<v Speaker 2>function called ad which takes two strings and returns the

854
00:55:45.440 --> 00:55:49.800
<v Speaker 2>strings concatenated, and the internal implementation would be different. There

855
00:55:49.800 --> 00:55:54.719
<v Speaker 2>would be two different functions just that are The difference

856
00:55:54.719 --> 00:55:57.159
<v Speaker 2>between them is just the types of their arguments. That's

857
00:55:57.199 --> 00:56:02.039
<v Speaker 2>not something you can do with JavaScript. And because typescript

858
00:56:02.079 --> 00:56:05.000
<v Speaker 2>is just like a build layer on top of JavaScript,

859
00:56:05.039 --> 00:56:08.719
<v Speaker 2>that's not something you can do in Typescript either. You

860
00:56:08.800 --> 00:56:09.960
<v Speaker 2>understand what I'm trying to say.

861
00:56:11.360 --> 00:56:15.280
<v Speaker 4>Yeah, I think my question was what why is it?

862
00:56:15.440 --> 00:56:17.639
<v Speaker 4>Why would it be valuable? In what case would you

863
00:56:17.719 --> 00:56:20.960
<v Speaker 4>want something that was a number to now be a

864
00:56:21.000 --> 00:56:23.519
<v Speaker 4>string or something that was a string to now be

865
00:56:23.519 --> 00:56:26.400
<v Speaker 4>a number. Why would you want to be inconsistent in

866
00:56:26.440 --> 00:56:28.480
<v Speaker 4>the way that you handle your objects?

867
00:56:28.679 --> 00:56:31.880
<v Speaker 2>Oh, I don't think anything. Anybody wants to be inconsistent

868
00:56:31.960 --> 00:56:34.880
<v Speaker 2>in the way that they handle their objects. What they

869
00:56:34.960 --> 00:56:39.679
<v Speaker 2>want is not to have to think about about not

870
00:56:39.719 --> 00:56:45.440
<v Speaker 2>to have to explicitly specify types at development time. Anybody

871
00:56:45.480 --> 00:56:48.960
<v Speaker 2>who's you know, once you have to specify types at

872
00:56:48.960 --> 00:56:53.559
<v Speaker 2>development time, sooner or later you're gonna have to do generics.

873
00:56:54.559 --> 00:57:01.639
<v Speaker 2>And that's just hard. And if for you, if you

874
00:57:01.880 --> 00:57:05.760
<v Speaker 2>can be more fast and loose with types and rely

875
00:57:05.920 --> 00:57:08.800
<v Speaker 2>on duct typing and and and stuff like that, you

876
00:57:08.840 --> 00:57:12.280
<v Speaker 2>don't need to deal with in with explicit interfaces. There's

877
00:57:12.400 --> 00:57:15.599
<v Speaker 2>a lot of beauty in that the world.

878
00:57:15.639 --> 00:57:18.079
<v Speaker 4>I love, yes, and that's the way ZIG is. By

879
00:57:18.119 --> 00:57:19.639
<v Speaker 4>the way, ZIG is all duct types.

880
00:57:20.480 --> 00:57:25.000
<v Speaker 1>So it's it's interesting too. And I know we've kind

881
00:57:25.039 --> 00:57:27.239
<v Speaker 1>of gone off on a tangent, but I don't know

882
00:57:27.239 --> 00:57:28.800
<v Speaker 1>that I have a whole lot more to present on

883
00:57:29.000 --> 00:57:33.000
<v Speaker 1>stimulus and turbo anyway. But I guess the other piece

884
00:57:33.039 --> 00:57:36.679
<v Speaker 1>of this is is knowing the Ruby community in particular

885
00:57:37.000 --> 00:57:40.400
<v Speaker 1>the way that I do. If there was an implementation

886
00:57:40.880 --> 00:57:45.159
<v Speaker 1>that gave people some level of benefit the way that

887
00:57:45.199 --> 00:57:49.199
<v Speaker 1>people see benefit from typescript, whether it's perceived or real,

888
00:57:50.800 --> 00:57:54.440
<v Speaker 1>I think people would adopt it. But the implementations that

889
00:57:54.480 --> 00:57:56.599
<v Speaker 1>have come out and the way that they've approached it,

890
00:57:56.599 --> 00:57:59.199
<v Speaker 1>it just it just feels like busy work that you're

891
00:57:59.239 --> 00:58:00.480
<v Speaker 1>adding to the system.

892
00:58:00.639 --> 00:58:00.800
<v Speaker 2>Look.

893
00:58:00.840 --> 00:58:02.119
<v Speaker 1>The other thing, though, is that.

894
00:58:02.360 --> 00:58:05.039
<v Speaker 2>If I can just interject on that for a second,

895
00:58:05.159 --> 00:58:12.800
<v Speaker 2>because from my experience, typescript is the value of Typescript

896
00:58:12.880 --> 00:58:18.239
<v Speaker 2>increases as your code size increases, even not linearly, like

897
00:58:18.360 --> 00:58:23.760
<v Speaker 2>exponentially or at least polynomially. So if your code based

898
00:58:23.800 --> 00:58:27.960
<v Speaker 2>size is small, which is kind of the goal with

899
00:58:28.320 --> 00:58:32.320
<v Speaker 2>the things that we've been talking about today with turbo drive,

900
00:58:32.559 --> 00:58:35.800
<v Speaker 2>with stimulus, you want to keep your JavaScript kind of minimal,

901
00:58:36.719 --> 00:58:44.960
<v Speaker 2>then indeed there's relatively little value or benefit in using typescript.

902
00:58:49.360 --> 00:58:55.360
<v Speaker 2>And that's essentially it. I'm currently seeing a lot of

903
00:58:55.639 --> 00:59:01.960
<v Speaker 2>value with typescript. I'm putting typescript in to some large

904
00:59:02.199 --> 00:59:06.960
<v Speaker 2>legacy systems at the place where I'm working at Scense

905
00:59:07.880 --> 00:59:11.800
<v Speaker 2>systems that were built several years ago in just straight

906
00:59:11.840 --> 00:59:17.039
<v Speaker 2>on JavaScript, and I'm finding a lot of bugs of

907
00:59:17.760 --> 00:59:24.360
<v Speaker 2>you know, people using the wrong field on the wrong object,

908
00:59:26.719 --> 00:59:31.960
<v Speaker 2>and you know, and obviously the system worked. You know,

909
00:59:32.320 --> 00:59:36.760
<v Speaker 2>JavaScript is really forgiving you read the wrong thing, you

910
00:59:36.840 --> 00:59:42.119
<v Speaker 2>get back undefined. It doesn't crash. You know, that's both

911
00:59:42.159 --> 00:59:47.519
<v Speaker 2>good and bad. You know that they had tests in place,

912
00:59:47.960 --> 00:59:51.199
<v Speaker 2>so things pass tests, but definitely there were bugs in

913
00:59:51.239 --> 00:59:54.639
<v Speaker 2>the code. Like I'm saying that, the biggest challenge for

914
00:59:54.760 --> 01:00:00.239
<v Speaker 2>me in adding typescript into this codebase is dealing with

915
01:00:00.280 --> 01:00:03.960
<v Speaker 2>all the bugs that get uncovered. Yeah.

916
01:00:04.159 --> 01:00:08.079
<v Speaker 1>One thing that I was just going to point out,

917
01:00:08.119 --> 01:00:10.760
<v Speaker 1>because you you started out saying, hey, with a larger

918
01:00:10.800 --> 01:00:14.639
<v Speaker 1>code bases, it makes sense and that's effectively so Toby

919
01:00:14.880 --> 01:00:19.440
<v Speaker 1>Toby Lutke he's the CEO of Shopify, right, he was

920
01:00:19.559 --> 01:00:21.679
<v Speaker 1>one of the initial developers. It's all written in rails.

921
01:00:23.360 --> 01:00:27.519
<v Speaker 1>They created a type system called sorbet and they use

922
01:00:27.559 --> 01:00:31.519
<v Speaker 1>it in all of their code. And when DH spoke

923
01:00:31.599 --> 01:00:34.719
<v Speaker 1>up and said, hey, you know, don't ever add static types,

924
01:00:35.519 --> 01:00:38.360
<v Speaker 1>Toby pointed out, yeah, I can see where you're coming from,

925
01:00:38.400 --> 01:00:40.079
<v Speaker 1>and in a lot of cases you don't need it,

926
01:00:40.519 --> 01:00:48.239
<v Speaker 1>but at Shopify we have to have it. Their is gigantic,

927
01:00:48.960 --> 01:00:51.440
<v Speaker 1>so I think, yeah.

928
01:00:51.039 --> 01:00:54.559
<v Speaker 4>It seems like the the way that everybody would be

929
01:00:54.599 --> 01:00:57.199
<v Speaker 4>happy is if we had strong dynamic types, if we

930
01:00:57.239 --> 01:00:59.480
<v Speaker 4>had types where once you define an object, if you

931
01:00:59.519 --> 01:01:02.880
<v Speaker 4>have a type somewhere later in the code, that should surface.

932
01:01:03.480 --> 01:01:07.320
<v Speaker 2>Again, that's you're talking about safety at run time.

933
01:01:09.360 --> 01:01:11.920
<v Speaker 4>I'm talking all safety as a dev time. There's no

934
01:01:12.000 --> 01:01:14.920
<v Speaker 4>such thing as safety at runtime except for like null

935
01:01:15.039 --> 01:01:16.440
<v Speaker 4>checks and Java.

936
01:01:16.719 --> 01:01:19.880
<v Speaker 2>What you're talking about knowing you're talking about doing static

937
01:01:19.920 --> 01:01:22.960
<v Speaker 2>analysis on the code to try to figure out that

938
01:01:23.199 --> 01:01:28.079
<v Speaker 2>you're not reassigning a different type value to the same variable,

939
01:01:28.599 --> 01:01:29.199
<v Speaker 2>like yeah.

940
01:01:29.199 --> 01:01:34.000
<v Speaker 4>Which is what Yeah, Well, script checker can help with

941
01:01:34.039 --> 01:01:35.880
<v Speaker 4>that if you enable if you just enable it in

942
01:01:35.920 --> 01:01:39.159
<v Speaker 4>a JavaScript project. It's not perfect yet, but it's pretty good.

943
01:01:39.199 --> 01:01:42.119
<v Speaker 4>And if you want to add something intentionally, if you

944
01:01:42.159 --> 01:01:44.679
<v Speaker 4>want to create a polymorphic object, you use object out

945
01:01:44.679 --> 01:01:45.320
<v Speaker 4>a sign.

946
01:01:45.400 --> 01:01:50.159
<v Speaker 2>Yeah, which basically does something called type inference, which basically

947
01:01:50.239 --> 01:01:54.000
<v Speaker 2>means it figures out the type of variable based on

948
01:01:54.239 --> 01:01:57.599
<v Speaker 2>let's say, the initial assignment, and then if you assign

949
01:01:57.679 --> 01:02:01.639
<v Speaker 2>something that's incompatible with that type inference, it will complain.

950
01:02:02.119 --> 01:02:05.199
<v Speaker 4>Yeah, this is good. This is like, this seems like

951
01:02:05.239 --> 01:02:08.480
<v Speaker 4>the happy medium. Everybody should hopefully be able to be

952
01:02:08.519 --> 01:02:11.320
<v Speaker 4>on board with with that, Like we shouldn't. We want

953
01:02:11.360 --> 01:02:14.079
<v Speaker 4>to prevent mistakes. We don't want to add boilerplate in overhead.

954
01:02:14.079 --> 01:02:17.119
<v Speaker 4>We want to prevent mistakes. And that's what strong dynamic

955
01:02:17.159 --> 01:02:21.280
<v Speaker 4>typing duct type strong dynamic duck typing types are.

956
01:02:21.719 --> 01:02:26.400
<v Speaker 2>I will add that especially when you're developing APIs, whether

957
01:02:26.519 --> 01:02:30.360
<v Speaker 2>it be for like you're building a library or you're

958
01:02:30.519 --> 01:02:33.840
<v Speaker 2>just working on a complex system that has APIs between

959
01:02:34.199 --> 01:02:37.559
<v Speaker 2>different parts of it. And I'm talking about in code.

960
01:02:37.599 --> 01:02:43.199
<v Speaker 2>APIs like function calls or interfaces not over the wire.

961
01:02:43.280 --> 01:02:52.400
<v Speaker 2>APIs then having static typing strong typing on that that

962
01:02:52.639 --> 01:02:59.400
<v Speaker 2>enables the system, even the editor, to help you along

963
01:02:59.480 --> 01:03:03.039
<v Speaker 2>and make sure that you're passing in the correct parameters

964
01:03:03.559 --> 01:03:08.320
<v Speaker 2>and that you're getting back the correct value is valuable

965
01:03:09.599 --> 01:03:10.599
<v Speaker 2>from my experience.

966
01:03:11.159 --> 01:03:12.719
<v Speaker 1>All Right, I'm gonna push us to picks.

967
01:03:14.920 --> 01:03:17.119
<v Speaker 2>Don't we have anything else just to say? In the

968
01:03:17.119 --> 01:03:19.320
<v Speaker 2>context of turbone stimulus.

969
01:03:20.039 --> 01:03:23.440
<v Speaker 1>I think we've covered the basics. I mean, there are

970
01:03:23.480 --> 01:03:25.440
<v Speaker 1>some other things that you can get into we didn't

971
01:03:25.440 --> 01:03:31.199
<v Speaker 1>talk about, like outlets for stimulus, which is effectively how

972
01:03:31.239 --> 01:03:37.960
<v Speaker 1>you call methods on one controller instance from another controller instance.

973
01:03:38.800 --> 01:03:40.440
<v Speaker 2>Yeah, those are getting in the weeds.

974
01:03:40.760 --> 01:03:43.519
<v Speaker 1>You're getting way into the weeds. But I mean, you know,

975
01:03:44.000 --> 01:03:46.480
<v Speaker 1>like I said, it's been able to do everything I need.

976
01:03:46.559 --> 01:03:52.199
<v Speaker 2>So I have read I have read somewhere that turbo

977
01:03:52.280 --> 01:03:54.840
<v Speaker 2>drive is also able to leverage web sockets.

978
01:03:56.840 --> 01:04:02.239
<v Speaker 1>Yes, turbo drive can, and so can stimulus. There's actually

979
01:04:02.519 --> 01:04:05.119
<v Speaker 1>a library that was written by some friends of mine

980
01:04:05.159 --> 01:04:09.920
<v Speaker 1>that live here in Utah called stimulus Reflex. There's also

981
01:04:09.960 --> 01:04:14.199
<v Speaker 1>a stimulus has cable in the name somewhere that specifically

982
01:04:14.239 --> 01:04:20.599
<v Speaker 1>works with action cable and rails. But yeah, I believe

983
01:04:20.679 --> 01:04:23.599
<v Speaker 1>both of them work fine with web sockets. I know

984
01:04:23.679 --> 01:04:24.519
<v Speaker 1>turbo does.

985
01:04:26.199 --> 01:04:29.679
<v Speaker 2>Okay, cool. I guess that's if you're really streaming a

986
01:04:29.679 --> 01:04:33.920
<v Speaker 2>lot of data back and forth. It makes life easier

987
01:04:34.079 --> 01:04:34.519
<v Speaker 2>that way.

988
01:04:35.360 --> 01:04:42.079
<v Speaker 1>Yep. Okay, all right, well let's let's get to picks, Dan,

989
01:04:42.320 --> 01:04:43.599
<v Speaker 1>Why don't you why don't we start.

990
01:04:43.840 --> 01:04:48.559
<v Speaker 2>Put me on the spot so last, So I've got

991
01:04:48.639 --> 01:04:52.559
<v Speaker 2>two picks. First of all, last week my pick was

992
01:04:52.599 --> 01:04:56.360
<v Speaker 2>the vacation that we had in Italy, and it occurred

993
01:04:56.360 --> 01:05:01.880
<v Speaker 2>to me that the way that we work places has

994
01:05:02.119 --> 01:05:07.880
<v Speaker 2>really changed over the years. Like now, when I plan,

995
01:05:08.119 --> 01:05:11.000
<v Speaker 2>I like to be planned in my trip because unfortunately

996
01:05:11.039 --> 01:05:14.000
<v Speaker 2>we can't take really long trips, which means that we

997
01:05:14.079 --> 01:05:17.440
<v Speaker 2>kind of need to be efficient. For example, we move

998
01:05:17.880 --> 01:05:21.920
<v Speaker 2>hotels almost every night because we get to someplace. You know,

999
01:05:21.960 --> 01:05:24.480
<v Speaker 2>we do it without the kids, so it's easier and

1000
01:05:24.639 --> 01:05:27.400
<v Speaker 2>we just get to somewhere and we don't want to

1001
01:05:27.639 --> 01:05:30.159
<v Speaker 2>need to drive back at the end, so we just

1002
01:05:30.280 --> 01:05:32.920
<v Speaker 2>keep on driving forward all the time. But it does

1003
01:05:33.039 --> 01:05:35.840
<v Speaker 2>mean that we change hotels almost every day or two.

1004
01:05:37.199 --> 01:05:40.719
<v Speaker 2>And so a couple of things. First of all, with

1005
01:05:40.719 --> 01:05:44.320
<v Speaker 2>with you know, with things like booking dot com or

1006
01:05:44.880 --> 01:05:48.039
<v Speaker 2>or Airbnb or what or you know, all the other

1007
01:05:48.159 --> 01:05:53.159
<v Speaker 2>various services, it's really easy to you know, find interesting hotels,

1008
01:05:53.239 --> 01:05:55.360
<v Speaker 2>book your trip in advance. You don't need to think

1009
01:05:55.400 --> 01:05:58.400
<v Speaker 2>about getting somewhere and starting to look, which might be

1010
01:05:58.400 --> 01:06:01.599
<v Speaker 2>an interesting experience if you're there for a week, but

1011
01:06:02.239 --> 01:06:04.880
<v Speaker 2>not really efficient if you're only there for a night.

1012
01:06:05.760 --> 01:06:09.039
<v Speaker 2>And the other way in which technology has kind of

1013
01:06:09.079 --> 01:06:12.440
<v Speaker 2>shifted the way that we're touring. So obviously everybody now

1014
01:06:12.559 --> 01:06:17.559
<v Speaker 2>uses GPS while driving, and it makes driving a lot

1015
01:06:17.599 --> 01:06:20.239
<v Speaker 2>less stressful. I still I'm old enough to remember the

1016
01:06:20.320 --> 01:06:23.519
<v Speaker 2>days of using maps, and the biggest challenge was that

1017
01:06:23.599 --> 01:06:27.119
<v Speaker 2>if you straight from your plan, then you were really

1018
01:06:27.159 --> 01:06:31.199
<v Speaker 2>worried about how you might find your way back. And

1019
01:06:31.239 --> 01:06:34.159
<v Speaker 2>now with GPS, you know it's no concern. You don't

1020
01:06:34.199 --> 01:06:36.519
<v Speaker 2>have to worry about it. You make a wrong turn,

1021
01:06:36.679 --> 01:06:40.159
<v Speaker 2>it'll get you back on your route. But the interesting

1022
01:06:40.280 --> 01:06:43.360
<v Speaker 2>thing is that now we do the same thing when

1023
01:06:43.440 --> 01:06:46.880
<v Speaker 2>we walk around. So what I like to do again

1024
01:06:47.000 --> 01:06:48.960
<v Speaker 2>When I know that we'll be in a certain place

1025
01:06:49.000 --> 01:06:52.719
<v Speaker 2>for a limited amount of time, then I like to

1026
01:06:52.880 --> 01:06:56.719
<v Speaker 2>kind of check in advance what are the sites that

1027
01:06:56.800 --> 01:06:58.679
<v Speaker 2>we want to see, the places we want to go,

1028
01:06:59.320 --> 01:07:02.840
<v Speaker 2>And I do kind of a traveling salesman optimization of

1029
01:07:03.760 --> 01:07:07.440
<v Speaker 2>finding a good route that goes to all these points,

1030
01:07:07.840 --> 01:07:11.880
<v Speaker 2>a walking route, and I just have the phone in

1031
01:07:11.920 --> 01:07:17.400
<v Speaker 2>my pocket with the Google Map and in walking mode,

1032
01:07:17.760 --> 01:07:20.079
<v Speaker 2>and it just tells me, you know, turn right here,

1033
01:07:20.159 --> 01:07:22.880
<v Speaker 2>turn left there, and I can just walk around and

1034
01:07:22.880 --> 01:07:25.679
<v Speaker 2>see the sites and not look like a tourist holding

1035
01:07:25.679 --> 01:07:28.800
<v Speaker 2>the map trying to figure out which ways up and

1036
01:07:30.360 --> 01:07:34.119
<v Speaker 2>you know, where do I need to go and and whatnot.

1037
01:07:34.159 --> 01:07:37.119
<v Speaker 2>It just makes it's almost like having this kind of

1038
01:07:37.119 --> 01:07:41.679
<v Speaker 2>a virtual tour guide, and it's it's actually once you

1039
01:07:41.679 --> 01:07:43.840
<v Speaker 2>get used to it, it's a great way to turn

1040
01:07:44.199 --> 01:07:47.320
<v Speaker 2>to tour place, especially again if you've got a more

1041
01:07:47.400 --> 01:07:50.239
<v Speaker 2>limited amount of time, because again, if you've got a

1042
01:07:50.280 --> 01:07:54.039
<v Speaker 2>lot of time, just wander around and experience the sights

1043
01:07:54.039 --> 01:07:56.559
<v Speaker 2>and sounds and smells and what have not, and what

1044
01:07:56.679 --> 01:08:00.000
<v Speaker 2>have you. But again if you're more limited for time,

1045
01:08:00.840 --> 01:08:03.079
<v Speaker 2>I found it to be a really efficient way of

1046
01:08:03.159 --> 01:08:08.199
<v Speaker 2>turing places. So that would be my kind of non

1047
01:08:08.360 --> 01:08:13.400
<v Speaker 2>technical pick. My technical pick is a funny kind of

1048
01:08:13.719 --> 01:08:19.199
<v Speaker 2>joke library that I ran into. It's called let me

1049
01:08:19.319 --> 01:08:20.560
<v Speaker 2>Quickly find It.

1050
01:08:22.039 --> 01:08:25.479
<v Speaker 1>Steve taking notes Absolutely.

1051
01:08:25.319 --> 01:08:31.359
<v Speaker 2>It's called you right there. It's called set Big Timeout.

1052
01:08:32.439 --> 01:08:37.640
<v Speaker 2>Turns out that set time out is limited to about

1053
01:08:37.920 --> 01:08:43.439
<v Speaker 2>almost twenty five days because the timeout duration is specified

1054
01:08:43.439 --> 01:08:47.560
<v Speaker 2>in milliseconds and it only uses thirty two bit values

1055
01:08:47.560 --> 01:08:50.760
<v Speaker 2>for that, so that turns out to be something like

1056
01:08:50.800 --> 01:08:53.960
<v Speaker 2>twenty four point nine days. And what happens if you

1057
01:08:54.000 --> 01:08:57.399
<v Speaker 2>want us to set time out for forty days or

1058
01:08:57.680 --> 01:09:01.880
<v Speaker 2>sixty days or half year or something like that. You

1059
01:09:01.920 --> 01:09:04.600
<v Speaker 2>can't use set time out for that. So now you've

1060
01:09:04.640 --> 01:09:08.520
<v Speaker 2>got set big time out which can even take bigins,

1061
01:09:09.159 --> 01:09:12.840
<v Speaker 2>and you can specify really lengthy durations for your set

1062
01:09:12.840 --> 01:09:16.560
<v Speaker 2>timeouts if you need. It. Sounds really useful to me.

1063
01:09:18.199 --> 01:09:22.159
<v Speaker 2>I'm obviously being sarcastic, but it's kind of a joke.

1064
01:09:24.560 --> 01:09:28.960
<v Speaker 2>Libraries presented as such. What it does. It actually creates

1065
01:09:28.960 --> 01:09:33.960
<v Speaker 2>a series of set timeouts. So obviously that's not very accurate,

1066
01:09:34.119 --> 01:09:36.920
<v Speaker 2>but it's it's amusing, let's put it this way. So

1067
01:09:37.000 --> 01:09:40.319
<v Speaker 2>that would be my second pick. And those are my

1068
01:09:40.399 --> 01:09:41.079
<v Speaker 2>picks for today.

1069
01:09:43.960 --> 01:09:45.920
<v Speaker 1>Awesome, all right, Steve, what are your.

1070
01:09:45.800 --> 01:09:50.000
<v Speaker 3>Picks before we get to the high point of the episode.

1071
01:09:50.039 --> 01:09:52.119
<v Speaker 3>I do have one sort of legit pick, and I

1072
01:09:52.159 --> 01:09:56.119
<v Speaker 3>touched on it earlier in the episode. I think an

1073
01:09:56.239 --> 01:10:02.439
<v Speaker 3>ursy JS. Their version two is out in beta, and

1074
01:10:02.840 --> 01:10:04.760
<v Speaker 3>so I'll put a link here to the upgrade guide

1075
01:10:04.760 --> 01:10:07.560
<v Speaker 3>for version two point zero, and it's got some pretty

1076
01:10:07.600 --> 01:10:14.680
<v Speaker 3>cool stuff. It's pulling prefetching, deferred props, which is sort

1077
01:10:14.720 --> 01:10:17.640
<v Speaker 3>of like props you don't load right away. You can say, hey,

1078
01:10:17.800 --> 01:10:23.439
<v Speaker 3>defer this till the page loads some infinite scrolling capabilities

1079
01:10:24.439 --> 01:10:26.279
<v Speaker 3>and so on. So I'll put the link in the

1080
01:10:26.920 --> 01:10:29.760
<v Speaker 3>in the guide in the show notes. It's a V

1081
01:10:29.880 --> 01:10:32.960
<v Speaker 3>two dot in nurse jass dot com. I first heard

1082
01:10:32.960 --> 01:10:35.760
<v Speaker 3>about it, I think on letter VL podcast or seeing

1083
01:10:35.800 --> 01:10:39.800
<v Speaker 3>it coming from the letterbil world. So but if you

1084
01:10:39.840 --> 01:10:42.359
<v Speaker 3>just do some quick googling, you'll see all kinds of info.

1085
01:10:44.159 --> 01:10:48.640
<v Speaker 3>Now for the dad jokes of the week, let's see.

1086
01:10:49.039 --> 01:10:52.359
<v Speaker 3>So question, did you hear about the guy who got

1087
01:10:52.479 --> 01:10:56.880
<v Speaker 3>a discount on his plastic surgery? The look on his

1088
01:10:56.920 --> 01:10:57.920
<v Speaker 3>face was priceless.

1089
01:11:00.159 --> 01:11:00.520
<v Speaker 2>Nice.

1090
01:11:00.840 --> 01:11:01.560
<v Speaker 1>Oh I wrong?

1091
01:11:01.640 --> 01:11:05.720
<v Speaker 3>Now, sorry, there I go. All right, So what do

1092
01:11:05.760 --> 01:11:11.680
<v Speaker 3>you call a Spanish guy being discharged from the hospital? Manuel?

1093
01:11:14.079 --> 01:11:18.000
<v Speaker 3>Although technically yeah, just don't stretch that too far. And

1094
01:11:18.039 --> 01:11:21.199
<v Speaker 3>then finally I had a conversation. I was having a

1095
01:11:21.199 --> 01:11:23.279
<v Speaker 3>conversation with my wife the other day and I said, Hey,

1096
01:11:23.279 --> 01:11:26.359
<v Speaker 3>I know you're busy, but can you say wanton backwards?

1097
01:11:26.960 --> 01:11:28.840
<v Speaker 3>She said not Now, I said, that's right.

1098
01:11:33.920 --> 01:11:37.960
<v Speaker 1>All right. AJ's laughing, AJ, what are your picks?

1099
01:11:38.880 --> 01:11:41.279
<v Speaker 4>For the fifteenth time? I have to pick The fall

1100
01:11:41.319 --> 01:11:45.279
<v Speaker 4>Guy yet again. I got the four K Blu ray

1101
01:11:45.399 --> 01:11:47.920
<v Speaker 4>with the extended cut, and I want to read. One

1102
01:11:47.960 --> 01:11:54.359
<v Speaker 4>of the negative reviews. Chris Palladino says, one of the

1103
01:11:54.439 --> 01:11:59.039
<v Speaker 4>dumbest movies in a long time. Agreed, writing was terrible.

1104
01:11:59.439 --> 01:12:02.760
<v Speaker 4>Agreed tried to be cute and referential but was hack

1105
01:12:02.920 --> 01:12:08.119
<v Speaker 4>and cliche. Agreed, plot makes zero sense. Agreed all over

1106
01:12:08.920 --> 01:12:11.039
<v Speaker 4>they mainly just blow a bunch of things up and

1107
01:12:11.079 --> 01:12:17.840
<v Speaker 4>have over the top unrealistic action sequences NonStop. Yes, it's

1108
01:12:17.840 --> 01:12:20.760
<v Speaker 4>an excellent movie. I don't know how this personally like this.

1109
01:12:21.199 --> 01:12:23.600
<v Speaker 4>We agree on it and he only gave it two stars. No,

1110
01:12:24.640 --> 01:12:27.239
<v Speaker 4>it is an action romance comedy, which is kind of

1111
01:12:28.279 --> 01:12:30.000
<v Speaker 4>I don't know how many movies I can say have

1112
01:12:30.079 --> 01:12:31.720
<v Speaker 4>pulled off all three things well, but I think this

1113
01:12:31.760 --> 01:12:34.800
<v Speaker 4>one does great. The plot doesn't make any sense, but

1114
01:12:34.920 --> 01:12:36.359
<v Speaker 4>I don't know, when's the last time you watched the

1115
01:12:36.479 --> 01:12:38.640
<v Speaker 4>James Bond movie? Does the plot make any sense in that?

1116
01:12:39.119 --> 01:12:40.680
<v Speaker 4>I mean, when's the last time you watched the movie

1117
01:12:40.720 --> 01:12:44.039
<v Speaker 4>where the plot makes sense? This one, you know, it's

1118
01:12:44.279 --> 01:12:49.000
<v Speaker 4>there's no nuance to the to the you know, the

1119
01:12:49.159 --> 01:12:51.640
<v Speaker 4>the good guy bad guy thing. You know, it's very

1120
01:12:51.800 --> 01:12:55.199
<v Speaker 4>it's there's it's just like the person who has evil

1121
01:12:55.239 --> 01:12:58.359
<v Speaker 4>motives has straight evil motives. The person has good motives

1122
01:12:58.359 --> 01:13:01.600
<v Speaker 4>has straight good motive, you know whatever. But it's just fun.

1123
01:13:01.720 --> 01:13:04.560
<v Speaker 4>It is it is. Uh, my wife loved it, you know,

1124
01:13:04.680 --> 01:13:07.439
<v Speaker 4>I walk Away and one of the positive reviews basically

1125
01:13:07.520 --> 01:13:09.680
<v Speaker 4>said this, I walk Away, and I'm like, man, that

1126
01:13:09.880 --> 01:13:14.560
<v Speaker 4>was such a fun and funny action movie. And my

1127
01:13:14.600 --> 01:13:17.720
<v Speaker 4>wife walks away with that was such a fun and

1128
01:13:17.920 --> 01:13:21.640
<v Speaker 4>funny romance movie. And I don't know how like, you know,

1129
01:13:21.720 --> 01:13:23.760
<v Speaker 4>she and I talked about it the very first time

1130
01:13:23.800 --> 01:13:26.880
<v Speaker 4>and are like, We're like, did we watch the same movie?

1131
01:13:27.159 --> 01:13:31.279
<v Speaker 4>Because She's like, oh, the dialogue between her and him

1132
01:13:31.399 --> 01:13:34.039
<v Speaker 4>was so sweet, and I'm like no, the part where

1133
01:13:34.039 --> 01:13:38.520
<v Speaker 4>he's jumping over dumpsters and like got the four by

1134
01:13:38.560 --> 01:13:41.920
<v Speaker 4>four going over the ridge, you know, like anyway, So

1135
01:13:42.800 --> 01:13:45.319
<v Speaker 4>I just I totally agree. It's a it's a stupid

1136
01:13:45.399 --> 01:13:49.720
<v Speaker 4>dumb movie, but it's it's just so good. It's so good.

1137
01:13:50.199 --> 01:13:53.560
<v Speaker 4>So uh. The one thing that I will say about

1138
01:13:53.600 --> 01:13:56.359
<v Speaker 4>the four K movie is the extended cut is not

1139
01:13:56.560 --> 01:13:58.920
<v Speaker 4>on the plain Blu ray. The extended cut is only

1140
01:13:58.960 --> 01:14:02.359
<v Speaker 4>on the four K. So I but I have one

1141
01:14:02.399 --> 01:14:10.319
<v Speaker 4>of those defective Blu ray players that happens to accidentally

1142
01:14:10.359 --> 01:14:14.119
<v Speaker 4>read four K. It's the lg let's see what's and

1143
01:14:14.159 --> 01:14:15.920
<v Speaker 4>you can still get these on Amazon, and you can

1144
01:14:15.960 --> 01:14:21.079
<v Speaker 4>downgrade the firmware. It's the LGWH sixteen n S forty,

1145
01:14:21.239 --> 01:14:24.760
<v Speaker 4>so it's it's it accidentally reads four K discs and

1146
01:14:24.800 --> 01:14:26.960
<v Speaker 4>then they patch it in the firmware that chips currently.

1147
01:14:27.000 --> 01:14:29.479
<v Speaker 4>But you can downgrade the firmware and then you can

1148
01:14:29.600 --> 01:14:33.239
<v Speaker 4>just read four K discs without any problem whatsoever on it.

1149
01:14:33.560 --> 01:14:36.159
<v Speaker 2>I can't tell you the last time that I actually

1150
01:14:36.399 --> 01:14:39.079
<v Speaker 2>held a disc in my hand or a memory.

1151
01:14:41.039 --> 01:14:44.079
<v Speaker 4>You know, that's fine, it's it's for people that want

1152
01:14:44.119 --> 01:14:47.079
<v Speaker 4>to have movies next year as well. You know. It's

1153
01:14:47.279 --> 01:14:49.119
<v Speaker 4>because all these movies are going to get pulled from

1154
01:14:49.119 --> 01:14:52.479
<v Speaker 4>all the services. And we've already had that happen a

1155
01:14:52.479 --> 01:14:54.600
<v Speaker 4>few times. You know, Disney has done the Vault thing

1156
01:14:54.640 --> 01:14:58.720
<v Speaker 4>a few times. Whatever, But obviously the digital movies are

1157
01:14:58.720 --> 01:15:00.800
<v Speaker 4>not going to stick around already. What was what was

1158
01:15:00.800 --> 01:15:03.439
<v Speaker 4>the service used to be called Ultraviolet that went down,

1159
01:15:03.479 --> 01:15:06.359
<v Speaker 4>like the entire service went down. Everybody the.

1160
01:15:08.239 --> 01:15:11.920
<v Speaker 2>Concept of owning your media, that's really strange.

1161
01:15:11.920 --> 01:15:17.920
<v Speaker 4>Right, yeah, but I I I run Plex and and

1162
01:15:18.119 --> 01:15:21.000
<v Speaker 4>all of the best movies we have, the Super Mario movie,

1163
01:15:21.000 --> 01:15:23.119
<v Speaker 4>all that, it's all on Plex. So anyway, other thing

1164
01:15:23.199 --> 01:15:25.159
<v Speaker 4>that I was going, did.

1165
01:15:25.039 --> 01:15:27.399
<v Speaker 3>You ever see the TV show, the original TV show

1166
01:15:27.439 --> 01:15:27.960
<v Speaker 3>The Fall Guy.

1167
01:15:28.640 --> 01:15:32.319
<v Speaker 4>I watched one of the episodes, and it does not

1168
01:15:32.439 --> 01:15:35.039
<v Speaker 4>seem to be in any way related to this movie.

1169
01:15:35.840 --> 01:15:39.560
<v Speaker 3>Okay, So for what it's worth, two of the main

1170
01:15:39.760 --> 01:15:42.760
<v Speaker 3>characters had cameos in your movie.

1171
01:15:43.000 --> 01:15:45.439
<v Speaker 4>Yeah, yeah, I know one at the end, like one.

1172
01:15:45.920 --> 01:15:48.560
<v Speaker 4>I could tell by the camera angle and the guys smile.

1173
01:15:49.000 --> 01:15:52.319
<v Speaker 4>I could tell like, Okay, this is a reference to something.

1174
01:15:52.720 --> 01:15:54.319
<v Speaker 4>I just don't get it. And then I found out

1175
01:15:54.319 --> 01:15:54.800
<v Speaker 4>that it was.

1176
01:15:54.880 --> 01:15:58.119
<v Speaker 3>It was Lee Major's and then Heather Thomas was also

1177
01:15:58.279 --> 01:16:01.960
<v Speaker 3>in the original TV show as well. For any of

1178
01:16:02.000 --> 01:16:04.319
<v Speaker 3>you who are too young to remember the Majors, he

1179
01:16:04.479 --> 01:16:07.840
<v Speaker 3>was probably more more well known as the six million

1180
01:16:07.880 --> 01:16:08.359
<v Speaker 3>dollar Man.

1181
01:16:09.560 --> 01:16:12.439
<v Speaker 2>Yeah. That's really funny because these days you can't buy

1182
01:16:12.479 --> 01:16:16.640
<v Speaker 2>anything with just six million dollars. You know, if they

1183
01:16:16.720 --> 01:16:18.800
<v Speaker 2>were to do that show again, he would have to

1184
01:16:18.840 --> 01:16:20.279
<v Speaker 2>be like the six trillion dollars.

1185
01:16:20.439 --> 01:16:23.399
<v Speaker 4>Yeah, there you go, right, Yeah, this this Blu ray

1186
01:16:23.439 --> 01:16:29.159
<v Speaker 4>player was Yeah. Anyway, the other thing. The other thing

1187
01:16:29.159 --> 01:16:33.000
<v Speaker 4>I was going to pick is passkys. So web off

1188
01:16:33.000 --> 01:16:37.159
<v Speaker 4>in has had a very sad history and there's a

1189
01:16:37.199 --> 01:16:39.720
<v Speaker 4>lot of backwards compatibility that people try to keep that

1190
01:16:39.840 --> 01:16:44.239
<v Speaker 4>makes it really complicated. And over some work that I've done,

1191
01:16:44.439 --> 01:16:46.600
<v Speaker 4>I have I have found that if you just focus

1192
01:16:46.640 --> 01:16:49.800
<v Speaker 4>on the paskis aspect, that like the the baseline stuff

1193
01:16:49.800 --> 01:16:52.840
<v Speaker 4>that works everywhere. Basically it's just a fancy replacement for

1194
01:16:52.880 --> 01:16:56.439
<v Speaker 4>a password manager, uh and not. You know, there's there's

1195
01:16:56.479 --> 01:17:00.800
<v Speaker 4>not really any extra security than that because it's trusted

1196
01:17:00.840 --> 01:17:03.079
<v Speaker 4>platform computing. I think they were thinking it was going

1197
01:17:03.159 --> 01:17:04.920
<v Speaker 4>to take off when they made the web offense back

1198
01:17:04.960 --> 01:17:08.319
<v Speaker 4>and then you know, reality of physics and the physical

1199
01:17:08.359 --> 01:17:11.039
<v Speaker 4>world we live in hit and we know that like

1200
01:17:11.079 --> 01:17:14.760
<v Speaker 4>that just can't happen. It's physically not possible. But anyway,

1201
01:17:14.920 --> 01:17:17.079
<v Speaker 4>so if you just focus on the baseline passkeys, you

1202
01:17:17.079 --> 01:17:19.880
<v Speaker 4>can have a really good experience. And I got a

1203
01:17:19.920 --> 01:17:24.319
<v Speaker 4>demo up on passkeys dot js dot org. And then

1204
01:17:24.680 --> 01:17:28.359
<v Speaker 4>third thing, not a pick, just a question. If anybody

1205
01:17:28.399 --> 01:17:32.279
<v Speaker 4>has experienced vertigo for multiple days in a row, please

1206
01:17:32.319 --> 01:17:36.039
<v Speaker 4>comment or tweet at me with what the what? If

1207
01:17:36.079 --> 01:17:38.319
<v Speaker 4>you've had success with some sort of solution, let me

1208
01:17:38.359 --> 01:17:41.239
<v Speaker 4>know because I am now on four days straight of

1209
01:17:41.239 --> 01:17:44.720
<v Speaker 4>twenty four to seven feeling dizzy. I don't know why,

1210
01:17:44.760 --> 01:17:47.359
<v Speaker 4>and I cannot find a remedy to it, and it's

1211
01:17:47.399 --> 01:17:52.079
<v Speaker 4>making life difficult. Is you can imagine if you felt.

1212
01:17:51.840 --> 01:17:55.239
<v Speaker 2>Dizzy, I would check if you don't have some problem

1213
01:17:55.319 --> 01:17:57.079
<v Speaker 2>in your ear, cannot or something.

1214
01:17:58.159 --> 01:18:03.039
<v Speaker 4>Yeah, that's that's uh I I I yeah, I'm gonna.

1215
01:18:03.039 --> 01:18:08.800
<v Speaker 4>I'm gonna go. I'm gonna go see someone about doing

1216
01:18:08.920 --> 01:18:11.920
<v Speaker 4>the eple maneuver, which is supposed to if the crystal

1217
01:18:12.000 --> 01:18:15.279
<v Speaker 4>gets dislodged. It's supposed to, like you move your head

1218
01:18:15.319 --> 01:18:18.760
<v Speaker 4>in certain ways and you get the fluid back. But yeah,

1219
01:18:18.920 --> 01:18:22.840
<v Speaker 4>I'm I'm four days into a I don't know why

1220
01:18:22.880 --> 01:18:26.199
<v Speaker 4>I'm feeling like I basically I feel like I have

1221
01:18:26.319 --> 01:18:33.640
<v Speaker 4>the flu, but only in the sense of dizziness and disorientation.

1222
01:18:34.119 --> 01:18:36.800
<v Speaker 2>You might want to see an ear doctor or something.

1223
01:18:36.840 --> 01:18:39.960
<v Speaker 2>Maybe you've got some sort of inflammation or something.

1224
01:18:40.000 --> 01:18:44.119
<v Speaker 4>I don't know. Yeah, but it's it's yeah, I'm gonna

1225
01:18:44.159 --> 01:18:47.880
<v Speaker 4>I'm gonna try a few things and then and then

1226
01:18:47.960 --> 01:18:50.399
<v Speaker 4>take that route if I can find someone that will

1227
01:18:50.439 --> 01:18:54.039
<v Speaker 4>get me in this week. Yes, yeah, it's it's very

1228
01:18:54.159 --> 01:18:56.920
<v Speaker 4>it's very frustrating and I'm having a hard time focusing

1229
01:18:56.960 --> 01:18:59.039
<v Speaker 4>because the world feels swimming.

1230
01:19:00.800 --> 01:19:04.399
<v Speaker 1>Yeah, with my mom, it's it's interesting you're talking about

1231
01:19:04.439 --> 01:19:06.239
<v Speaker 1>this because it was literally this weekend. My mom had

1232
01:19:06.319 --> 01:19:10.560
<v Speaker 1>similar issues and it got so bad that they went

1233
01:19:10.600 --> 01:19:15.960
<v Speaker 1>to the emergency room. But apparently hers gets aggravated as

1234
01:19:16.000 --> 01:19:19.479
<v Speaker 1>she lays on one side versus the other when she's sleeping,

1235
01:19:19.560 --> 01:19:21.159
<v Speaker 1>and I.

1236
01:19:21.199 --> 01:19:21.640
<v Speaker 2>Don't know that.

1237
01:19:21.720 --> 01:19:23.319
<v Speaker 1>Yeah, he gave her anything that would help.

1238
01:19:24.199 --> 01:19:27.520
<v Speaker 2>Yeah, probably she creates a vacuum or something in one

1239
01:19:27.560 --> 01:19:30.319
<v Speaker 2>ear and that causes a problem or something.

1240
01:19:31.119 --> 01:19:33.600
<v Speaker 4>Yeah, I wonder, I wonder if maybe it wasn't When

1241
01:19:33.600 --> 01:19:36.399
<v Speaker 4>I I was riding my motorcycle without ear plugs the

1242
01:19:36.439 --> 01:19:38.760
<v Speaker 4>other day. I don't think that was it though, because

1243
01:19:38.800 --> 01:19:40.880
<v Speaker 4>sometimes I just go do a short ride without ear

1244
01:19:40.880 --> 01:19:44.159
<v Speaker 4>plugs because it's just nice to feel the full sensation

1245
01:19:44.359 --> 01:19:49.000
<v Speaker 4>and everything. But usually I have ear plugs and some well,

1246
01:19:49.039 --> 01:19:50.920
<v Speaker 4>then sometimes I take the ear plugs out. I kind

1247
01:19:50.920 --> 01:19:53.800
<v Speaker 4>of pop them, you know, because they you know, they're

1248
01:19:53.840 --> 01:19:55.359
<v Speaker 4>jammed in there with the ear wax and everything. You

1249
01:19:55.399 --> 01:19:57.439
<v Speaker 4>pull them out and they're like oh, and I try

1250
01:19:57.439 --> 01:19:59.680
<v Speaker 4>to twist them so it's not so dramatic. But I

1251
01:19:59.680 --> 01:20:01.319
<v Speaker 4>don't know, maybe it was one of those things. But

1252
01:20:02.159 --> 01:20:05.439
<v Speaker 4>I can't pinpoint when it started happening. It's just I

1253
01:20:05.439 --> 01:20:09.239
<v Speaker 4>think it was Thursday night or Friday morning. I just

1254
01:20:09.359 --> 01:20:12.479
<v Speaker 4>noticed I was a little dizzy and then thought, oh, whatever,

1255
01:20:12.520 --> 01:20:13.800
<v Speaker 4>it'll go away, and then it hasn't.

1256
01:20:14.479 --> 01:20:18.439
<v Speaker 2>Oh. I sorry to interrupt after I finished my pics,

1257
01:20:18.439 --> 01:20:21.319
<v Speaker 2>but I just saw really amusing headline. I just remembered

1258
01:20:21.319 --> 01:20:25.880
<v Speaker 2>that I saw it. Can you guess what the total

1259
01:20:26.479 --> 01:20:30.079
<v Speaker 2>global debt is in the world in dony?

1260
01:20:33.359 --> 01:20:35.479
<v Speaker 4>I mean, guys, one hundred and fifty trillion.

1261
01:20:36.439 --> 01:20:38.239
<v Speaker 2>Three hundred and seventeen trillion.

1262
01:20:39.239 --> 01:20:42.319
<v Speaker 4>That's more than the GDPs of all the nations combined,

1263
01:20:42.359 --> 01:20:42.680
<v Speaker 4>isn't it.

1264
01:20:43.640 --> 01:20:47.239
<v Speaker 2>I don't know, but I would guess.

1265
01:20:47.279 --> 01:20:50.680
<v Speaker 4>So that's good. That's a good place to be.

1266
01:20:53.279 --> 01:20:57.039
<v Speaker 2>Yeah, when I headed.

1267
01:20:56.840 --> 01:20:59.640
<v Speaker 4>For economic collapse, this is fine.

1268
01:21:00.159 --> 01:21:02.800
<v Speaker 1>Yeah, it says. It says as of twenty twenty two,

1269
01:21:02.800 --> 01:21:07.600
<v Speaker 1>the global GDP amounted to over one hundred trillion, So, oh, good,

1270
01:21:07.960 --> 01:21:10.279
<v Speaker 1>whole much over the next yeah.

1271
01:21:09.840 --> 01:21:13.199
<v Speaker 4>Two times? How is that possible? I mean, that's a.

1272
01:21:14.800 --> 01:21:18.680
<v Speaker 2>That's because we don't we don't. We don't need to

1273
01:21:18.720 --> 01:21:20.800
<v Speaker 2>print the money anymore. It used to be gold, then

1274
01:21:20.840 --> 01:21:23.159
<v Speaker 2>it used to be printed money. Now it's just digits

1275
01:21:23.199 --> 01:21:24.199
<v Speaker 2>in a computer.

1276
01:21:24.520 --> 01:21:27.720
<v Speaker 1>Right, all right, I'm gonna go ahead and throw in

1277
01:21:27.720 --> 01:21:30.319
<v Speaker 1>some picks. I'm also when I'm done with this call,

1278
01:21:30.319 --> 01:21:32.359
<v Speaker 1>I'm gonna go downstairs and tell my kids that dad

1279
01:21:32.359 --> 01:21:35.479
<v Speaker 1>feels dizzy and that they need to be quiet and

1280
01:21:36.079 --> 01:21:39.199
<v Speaker 1>leave me alone for a little while. I'm just gonna

1281
01:21:39.279 --> 01:21:41.119
<v Speaker 1>lay here on the couch and quietly watch the show.

1282
01:21:41.159 --> 01:21:48.359
<v Speaker 1>You all need to leave anyway. Uh yeah, So picks games,

1283
01:21:48.560 --> 01:21:50.920
<v Speaker 1>My things have been kind of nuts in lieu of

1284
01:21:50.920 --> 01:21:55.079
<v Speaker 1>a game pick. I'm just gonna put out there. So

1285
01:21:55.279 --> 01:21:59.560
<v Speaker 1>my latest contract, they unexpectedly lost a customer, one of

1286
01:21:59.600 --> 01:22:02.239
<v Speaker 1>the bigger customers, and so then they unexpectedly let all

1287
01:22:02.239 --> 01:22:05.880
<v Speaker 1>of their contractors go. So if you are looking for

1288
01:22:05.920 --> 01:22:10.960
<v Speaker 1>somebody who can help you with I'm I'm into the

1289
01:22:11.000 --> 01:22:13.399
<v Speaker 1>stimulus turbo stuff or rails if you're if you have

1290
01:22:13.439 --> 01:22:18.840
<v Speaker 1>a rails system, obviously I'm qualified on that. I'm also

1291
01:22:18.880 --> 01:22:26.079
<v Speaker 1>getting into AI like chat chatbot agent stuff, and so

1292
01:22:26.319 --> 01:22:31.159
<v Speaker 1>if you're looking at that, let me know. I'm yeah.

1293
01:22:31.239 --> 01:22:34.039
<v Speaker 1>And then I think I'm just gonna do the the

1294
01:22:34.119 --> 01:22:38.279
<v Speaker 1>other stuff like my stuff picks instead of whatever else

1295
01:22:38.319 --> 01:22:42.399
<v Speaker 1>stuff picks. So JavaScript JavaScript geniuses dot com what I'm

1296
01:22:42.439 --> 01:22:44.159
<v Speaker 1>looking to do is put together a group of people

1297
01:22:44.239 --> 01:22:46.640
<v Speaker 1>who are interested in kind of pushing each other to

1298
01:22:46.680 --> 01:22:49.119
<v Speaker 1>stay current and learn new things and stuff like that

1299
01:22:49.159 --> 01:22:53.159
<v Speaker 1>in the JavaScript space. And so if you if you

1300
01:22:53.199 --> 01:22:57.159
<v Speaker 1>go there, I'm running. Uh, it's the same deal I've

1301
01:22:57.159 --> 01:22:59.000
<v Speaker 1>had and I'm going to keep that up until Black

1302
01:22:59.000 --> 01:23:03.079
<v Speaker 1>Friday is thirty nine dollars a month. There's also yearly

1303
01:23:03.199 --> 01:23:05.920
<v Speaker 1>in lifetime options if you want to join the group.

1304
01:23:05.960 --> 01:23:09.279
<v Speaker 1>We have weekly calls. We do accountability calls on Monday

1305
01:23:09.279 --> 01:23:12.000
<v Speaker 1>and Friday. Monday is here's what I'm gonna do. Friday

1306
01:23:12.039 --> 01:23:15.319
<v Speaker 1>is what you did, and then you know, we as

1307
01:23:15.359 --> 01:23:17.119
<v Speaker 1>a group will help you stay on top of an

1308
01:23:17.119 --> 01:23:19.319
<v Speaker 1>accountable on the stuff that's going to get you where

1309
01:23:19.319 --> 01:23:23.399
<v Speaker 1>you want to go. And it could be I just

1310
01:23:23.439 --> 01:23:25.840
<v Speaker 1>want to learn more JavaScript stuff or get better react

1311
01:23:25.920 --> 01:23:27.560
<v Speaker 1>some of it, or it could be I want to

1312
01:23:27.560 --> 01:23:30.960
<v Speaker 1>speak at more conferences or write a book or start

1313
01:23:30.960 --> 01:23:36.439
<v Speaker 1>a podcast or whatever related to JavaScript. All comers Welcome

1314
01:23:36.760 --> 01:23:39.479
<v Speaker 1>also includes the book club and I'm going to be

1315
01:23:39.479 --> 01:23:41.920
<v Speaker 1>putting out videos on how to do stuff. I'm probably

1316
01:23:41.920 --> 01:23:46.439
<v Speaker 1>gonna start with remix on the JavaScript series. So if

1317
01:23:46.479 --> 01:23:51.640
<v Speaker 1>you're interested in any of that stuff, you're definitely welcome

1318
01:23:51.680 --> 01:23:55.039
<v Speaker 1>to join in. I'm also doing it for Ruby, and

1319
01:23:55.159 --> 01:23:57.920
<v Speaker 1>I'm eventually a start one for AI. The other one

1320
01:23:58.000 --> 01:24:00.000
<v Speaker 1>is with the AI stuff that I am picking up.

1321
01:24:00.399 --> 01:24:02.359
<v Speaker 1>I'm gonna be doing an AI boot camp next year.

1322
01:24:02.600 --> 01:24:08.520
<v Speaker 1>It's gonna start in January, so if you're interested, I

1323
01:24:08.840 --> 01:24:12.119
<v Speaker 1>will have a website up for that here within the

1324
01:24:12.119 --> 01:24:14.680
<v Speaker 1>next day or so, so you can go sign up

1325
01:24:14.800 --> 01:24:16.680
<v Speaker 1>or jump on a call with me and we can

1326
01:24:16.760 --> 01:24:18.600
<v Speaker 1>discuss whether or not it's a good fit for you,

1327
01:24:18.640 --> 01:24:21.119
<v Speaker 1>because honestly, I want everybody who goes through the boot

1328
01:24:21.159 --> 01:24:23.439
<v Speaker 1>camp to come out of it and go, huh, I'm

1329
01:24:23.520 --> 01:24:26.000
<v Speaker 1>set up to do this, and you know, I know

1330
01:24:26.000 --> 01:24:27.960
<v Speaker 1>what the next steps are to, you know, either go

1331
01:24:28.000 --> 01:24:30.079
<v Speaker 1>find work or add this to what I'm doing at

1332
01:24:30.119 --> 01:24:33.880
<v Speaker 1>work with it. So if I don't think you're going

1333
01:24:33.960 --> 01:24:35.960
<v Speaker 1>to get that out of it, I won't sell it

1334
01:24:36.000 --> 01:24:41.279
<v Speaker 1>to you. So anyway, Yeah, that's that's pretty much the

1335
01:24:41.279 --> 01:24:44.800
<v Speaker 1>stuff I've got going on. As far as movies go,

1336
01:24:44.920 --> 01:24:48.520
<v Speaker 1>dumb movies, I'll just throw this one in. So I

1337
01:24:48.800 --> 01:24:50.680
<v Speaker 1>don't know what possessed me to do it, but I

1338
01:24:50.760 --> 01:24:53.880
<v Speaker 1>started watching the Transformers movies like starting.

1339
01:24:53.520 --> 01:24:57.439
<v Speaker 4>Oh no, that's that's that's less than dumb. That's less

1340
01:24:57.479 --> 01:25:00.000
<v Speaker 4>than dumb. It's like negative stuff.

1341
01:25:00.079 --> 01:25:04.760
<v Speaker 2>Man. There, No, it makes atal sense that Anadian culture

1342
01:25:04.800 --> 01:25:07.760
<v Speaker 2>would build a robot that looks like June Buggy.

1343
01:25:08.600 --> 01:25:11.319
<v Speaker 1>No, no, they're they're anyway.

1344
01:25:12.800 --> 01:25:15.640
<v Speaker 4>No, it's just they ruined it with the like the

1345
01:25:15.680 --> 01:25:18.479
<v Speaker 4>soft core and all that and the Romeo and Juliet

1346
01:25:18.600 --> 01:25:20.760
<v Speaker 4>Laws the pedo stuff like it was.

1347
01:25:20.760 --> 01:25:28.079
<v Speaker 1>So oh anyway, it's it's nice mindless entertainment. So anyway,

1348
01:25:28.319 --> 01:25:33.800
<v Speaker 1>I've watched the first three. I'll probably get around to

1349
01:25:33.800 --> 01:25:36.840
<v Speaker 1>watching the rest of them. Anyway, those are my picks.

1350
01:25:37.239 --> 01:25:38.159
<v Speaker 1>I made a j cry.

1351
01:25:39.119 --> 01:25:42.199
<v Speaker 4>Yeah, okay, I so I'm gonna pick uh that. You

1352
01:25:42.239 --> 01:25:45.000
<v Speaker 4>get yourself on the pirate Bay and hit up the

1353
01:25:45.039 --> 01:25:49.279
<v Speaker 4>Original Transformers, the one where the Transformers are actually the

1354
01:25:49.319 --> 01:25:53.039
<v Speaker 4>good guys rather than just anti heroes that are not

1355
01:25:53.399 --> 01:25:55.439
<v Speaker 4>that are a different set of bad than the bad guys.

1356
01:25:55.600 --> 01:26:00.439
<v Speaker 2>What's the Original Transformers? The original of the first cartoons.

1357
01:26:00.239 --> 01:26:03.319
<v Speaker 4>The cartoons. It's like it's like Captain Planet g I.

1358
01:26:03.319 --> 01:26:06.960
<v Speaker 1>Joe cartoons when I was a kid.

1359
01:26:07.560 --> 01:26:09.880
<v Speaker 4>Yeah, I like, well, the car in the cartoons, the

1360
01:26:09.920 --> 01:26:15.039
<v Speaker 4>Transformers are actually good guys. In the movies, they're anti heroes.

1361
01:26:15.199 --> 01:26:18.800
<v Speaker 4>There's like optimist Prime is mostly good, but the other

1362
01:26:18.880 --> 01:26:21.720
<v Speaker 4>ones are literally just gangsters.

1363
01:26:22.920 --> 01:26:28.000
<v Speaker 2>Okay, I'm laughing, Okay, I don't care.

1364
01:26:29.880 --> 01:26:35.720
<v Speaker 1>Yeah, anyway, let's just go ahead and wrap it up. Oh,

1365
01:26:36.359 --> 01:26:38.760
<v Speaker 1>if you all want to reach out to me about

1366
01:26:39.079 --> 01:26:42.279
<v Speaker 1>stimulus or turbo or anything else related to that, I

1367
01:26:42.319 --> 01:26:45.960
<v Speaker 1>am totally open to that. Twitter, cmx W, you can

1368
01:26:46.079 --> 01:26:50.439
<v Speaker 1>manly chuck at topendevs dot com and yeah, until next time,

1369
01:26:50.560 --> 01:26:51.720
<v Speaker 1>max out you
