WEBVTT

1
00:00:05.280 --> 00:00:09.720
<v Speaker 1>Hello everybody, and welcome to another episode of JavaScript Jabber.

2
00:00:10.080 --> 00:00:16.320
<v Speaker 1>Today I'm flying solo both as host and panelist. Maybe

3
00:00:16.719 --> 00:00:19.480
<v Speaker 1>some of our other hosts will join us later on

4
00:00:19.640 --> 00:00:25.800
<v Speaker 1>we will see. Our guest today is Josh Goldberg. Hi, Josh, Hi,

5
00:00:26.320 --> 00:00:29.920
<v Speaker 1>thanks for having me. You do know that when you wave,

6
00:00:30.480 --> 00:00:35.320
<v Speaker 1>people who listening to our podcast don't actually hear anything.

7
00:00:36.479 --> 00:00:38.920
<v Speaker 2>I was hoping the good vibes. Would you know m

8
00:00:39.000 --> 00:00:41.759
<v Speaker 2>Nix from the podcast. That's a good one.

9
00:00:42.320 --> 00:00:44.560
<v Speaker 1>Yeah. It reminds me that when my kids were really

10
00:00:44.560 --> 00:00:46.920
<v Speaker 1>young and we would drive and they would be sitting

11
00:00:46.920 --> 00:00:49.119
<v Speaker 1>in the back and I would ask them something while

12
00:00:49.159 --> 00:00:51.159
<v Speaker 1>I'm driving and they would nod their heads.

13
00:00:51.759 --> 00:00:52.560
<v Speaker 2>Yeah.

14
00:00:53.079 --> 00:00:59.079
<v Speaker 1>So yeah. Anyway, so welcome back to a show. It's

15
00:00:59.119 --> 00:01:02.479
<v Speaker 1>been a while, had you here before. We're actually going

16
00:01:02.520 --> 00:01:05.480
<v Speaker 1>to be talking about similar topics to what we've spoken

17
00:01:05.480 --> 00:01:07.799
<v Speaker 1>about in the past, but a lot of I guess

18
00:01:07.799 --> 00:01:11.079
<v Speaker 1>has happened since then, so hopefully we can catch up.

19
00:01:12.120 --> 00:01:16.079
<v Speaker 1>The topics are going to be tess Lint, which is

20
00:01:16.120 --> 00:01:18.599
<v Speaker 1>a project you've been working on for a while now,

21
00:01:19.599 --> 00:01:23.000
<v Speaker 1>and also your new conference what's it called squiggle.

22
00:01:22.599 --> 00:01:26.799
<v Speaker 2>Coff squiggle comf Yes, named after the things that give

23
00:01:26.799 --> 00:01:27.959
<v Speaker 2>you squigglies in your editor.

24
00:01:29.159 --> 00:01:32.359
<v Speaker 1>Cool. Cool, cool. So what do we want to start with?

25
00:01:34.159 --> 00:01:39.640
<v Speaker 2>Well, I'm a sucker for going in order ts s lint.

26
00:01:40.159 --> 00:01:43.519
<v Speaker 1>Yeah okay, but you know what before then, since it

27
00:01:43.599 --> 00:01:46.840
<v Speaker 1>has been a while, can you also, you know, provide

28
00:01:46.879 --> 00:01:49.680
<v Speaker 1>a quick introduction about who you are, what you do,

29
00:01:50.120 --> 00:01:51.560
<v Speaker 1>why it's exciting to have you.

30
00:01:51.560 --> 00:01:55.959
<v Speaker 2>On with pleasure. Hi everyone, I'm Josh. I'm a full

31
00:01:55.959 --> 00:01:59.319
<v Speaker 2>time independent open source maintainer. That means that instead of

32
00:01:59.359 --> 00:02:02.560
<v Speaker 2>working for one specific company, I'm independent. I work on

33
00:02:02.560 --> 00:02:04.879
<v Speaker 2>my own and I work on open source projects that

34
00:02:04.920 --> 00:02:08.199
<v Speaker 2>benefit the ecosystem for me. Specifically, the main ones I

35
00:02:08.240 --> 00:02:11.360
<v Speaker 2>work on are typescriptyestlint, which is the tool that lets

36
00:02:11.360 --> 00:02:14.639
<v Speaker 2>your run standard JavaScript tools like Eslin's are prettier on

37
00:02:14.719 --> 00:02:17.520
<v Speaker 2>types shop Code, as well as eslint itself, on the

38
00:02:17.520 --> 00:02:20.680
<v Speaker 2>committed team, and Moca. So I'm just kind of generally

39
00:02:20.680 --> 00:02:22.800
<v Speaker 2>happy to float around GitHub and try to make things

40
00:02:22.800 --> 00:02:25.719
<v Speaker 2>better for everyone.

41
00:02:25.840 --> 00:02:28.159
<v Speaker 1>It is not recall we've spoken about in the past,

42
00:02:28.199 --> 00:02:30.599
<v Speaker 1>but I think it is worth bringing it up again.

43
00:02:31.360 --> 00:02:35.039
<v Speaker 1>Is it really possible to make a living off of

44
00:02:36.120 --> 00:02:39.719
<v Speaker 1>open source? You know, especially given that it's free?

45
00:02:41.080 --> 00:02:45.479
<v Speaker 2>Yeah? Free as in it's a hard question. It is

46
00:02:45.520 --> 00:02:49.039
<v Speaker 2>theoretically possible. Some projects are better suited for it than others.

47
00:02:49.080 --> 00:02:50.879
<v Speaker 2>The ones I tend to work on tend to be

48
00:02:50.960 --> 00:02:53.840
<v Speaker 2>not very well suited. But I do. I do make

49
00:02:54.039 --> 00:02:58.639
<v Speaker 2>what is defined as a livable wage in my area,

50
00:02:59.039 --> 00:03:00.960
<v Speaker 2>which is better than the even last year, which was

51
00:03:01.039 --> 00:03:04.039
<v Speaker 2>minimum wage. But it's not anywhere near it was as

52
00:03:04.080 --> 00:03:06.719
<v Speaker 2>it was in a full time salary position for me,

53
00:03:06.840 --> 00:03:08.840
<v Speaker 2>So there's a good chance that'll eventually go back once

54
00:03:08.840 --> 00:03:10.800
<v Speaker 2>I've made the impact I wanted to an open source.

55
00:03:12.599 --> 00:03:15.520
<v Speaker 1>So you're what living off some of your savings? Is

56
00:03:15.520 --> 00:03:16.360
<v Speaker 1>that what you're saying.

57
00:03:17.759 --> 00:03:20.479
<v Speaker 2>I don't think I'm that negative right now, in large

58
00:03:20.479 --> 00:03:24.599
<v Speaker 2>part because my fantastic wife, my spouse has a real

59
00:03:24.680 --> 00:03:27.039
<v Speaker 2>job and health insurance, which is very important in the

60
00:03:27.120 --> 00:03:28.280
<v Speaker 2>United States, as some may know.

61
00:03:29.080 --> 00:03:29.639
<v Speaker 1>But I do.

62
00:03:29.759 --> 00:03:33.879
<v Speaker 2>I do get income. I have community sponsorships on a

63
00:03:33.879 --> 00:03:36.159
<v Speaker 2>lot of the projects that I'm on that I get

64
00:03:36.199 --> 00:03:39.280
<v Speaker 2>a share for many of them. I've got book revenue

65
00:03:39.280 --> 00:03:41.159
<v Speaker 2>from my learning types of good book go buy it today,

66
00:03:41.680 --> 00:03:45.039
<v Speaker 2>And generally there are some people who sponsor me individually

67
00:03:45.080 --> 00:03:47.560
<v Speaker 2>on get up sponsors, So I'm not hemorrhaging money. I'm

68
00:03:47.560 --> 00:03:48.479
<v Speaker 2>just not making a.

69
00:03:48.400 --> 00:03:51.080
<v Speaker 1>Lot of money, and if people who are listening to

70
00:03:51.159 --> 00:03:53.960
<v Speaker 1>us do want to contribute to your efforts, what's the

71
00:03:54.000 --> 00:03:55.280
<v Speaker 1>best way to go about it.

72
00:03:56.120 --> 00:03:57.840
<v Speaker 2>Well, first of all, they should feel very good about

73
00:03:57.879 --> 00:04:00.439
<v Speaker 2>themselves because that's very kind and noble of them. Thank you.

74
00:04:01.000 --> 00:04:03.439
<v Speaker 2>If they want to support me specifically and the stuff

75
00:04:03.439 --> 00:04:06.919
<v Speaker 2>that I'm specifically doing kithub dot com, slash sponsors, Slash

76
00:04:07.000 --> 00:04:09.199
<v Speaker 2>Joshua K. Goldberg, or if you just google me or

77
00:04:09.240 --> 00:04:11.919
<v Speaker 2>look me up my names on my site for any

78
00:04:11.919 --> 00:04:14.080
<v Speaker 2>of the projects I work on, if that's particularly exciting

79
00:04:14.120 --> 00:04:17.360
<v Speaker 2>to you, especially t sees link. They all have open

80
00:04:17.360 --> 00:04:20.639
<v Speaker 2>collectives that you can sponsor, so there's definitely a way

81
00:04:20.680 --> 00:04:22.800
<v Speaker 2>for you to give me money if you want to.

82
00:04:23.879 --> 00:04:26.560
<v Speaker 1>And you mentioned your book on typescript. When did that

83
00:04:26.560 --> 00:04:27.399
<v Speaker 1>come out.

84
00:04:28.160 --> 00:04:30.319
<v Speaker 2>It's been a couple of years now, I belie twenty

85
00:04:30.360 --> 00:04:34.639
<v Speaker 2>twenty two, mid late summer. It's through a Riley learning

86
00:04:34.639 --> 00:04:38.079
<v Speaker 2>Typeescript and it has this beautiful yellow and colored bird

87
00:04:38.120 --> 00:04:38.560
<v Speaker 2>on the cover.

88
00:04:40.240 --> 00:04:44.160
<v Speaker 1>And given the name learning Typeescript, I gather that it's

89
00:04:44.240 --> 00:04:47.480
<v Speaker 1>primarily for people who are not familiar with it and

90
00:04:47.519 --> 00:04:51.399
<v Speaker 1>want to get into it, like newbies, effectively exactly.

91
00:04:51.480 --> 00:04:54.120
<v Speaker 2>Yeah, the general flow of the book is that if

92
00:04:54.199 --> 00:04:57.839
<v Speaker 2>you can start with roughly intermediate JOBASCRIPT knowledge, you should

93
00:04:57.879 --> 00:05:00.519
<v Speaker 2>know how variables and closures and stuff like that work.

94
00:05:00.759 --> 00:05:04.120
<v Speaker 2>You don't need to be super fancy advanced javascripts expert.

95
00:05:04.160 --> 00:05:06.040
<v Speaker 2>You don't need to know you know, I don't know

96
00:05:06.120 --> 00:05:08.839
<v Speaker 2>symbols and stuff like that. But you don't need any

97
00:05:08.839 --> 00:05:12.319
<v Speaker 2>prior knowledge or experience with types through whatever, C Sharp,

98
00:05:12.360 --> 00:05:14.800
<v Speaker 2>C plus plus Java Rust. None of that is necessary

99
00:05:15.040 --> 00:05:17.519
<v Speaker 2>if you already know what great TYPESKIPT works a little differently,

100
00:05:17.600 --> 00:05:19.399
<v Speaker 2>so you'd still learn stuff, but you can come in

101
00:05:19.439 --> 00:05:22.959
<v Speaker 2>with just JavaScript and emerge a relatively competent typescript developer.

102
00:05:24.560 --> 00:05:27.839
<v Speaker 1>You know. That brings up an interesting point. So a

103
00:05:27.920 --> 00:05:32.639
<v Speaker 1>few weeks back, we recorded in an episode with the

104
00:05:32.920 --> 00:05:36.439
<v Speaker 1>people talking about the lead code lead code tests that

105
00:05:36.519 --> 00:05:41.800
<v Speaker 1>so many companies are using these days when filtering out applicants,

106
00:05:42.439 --> 00:05:46.000
<v Speaker 1>and I wasn't actually able to participate on it, so

107
00:05:46.040 --> 00:05:49.560
<v Speaker 1>I'm just listening to the recording like everybody else, And

108
00:05:49.720 --> 00:05:52.480
<v Speaker 1>they brought up one of the things that they discussed

109
00:05:53.279 --> 00:05:57.040
<v Speaker 1>was about which programming languages are supported by that platform.

110
00:05:57.160 --> 00:05:59.800
<v Speaker 1>Turns out that many are. You can practically choose any

111
00:06:00.079 --> 00:06:05.879
<v Speaker 1>which you want, and both JavaScript and typescript are supported

112
00:06:06.079 --> 00:06:10.519
<v Speaker 1>as languages apparently that you can use for you know,

113
00:06:11.439 --> 00:06:16.079
<v Speaker 1>solving the lead code challenge, and I, you know, I

114
00:06:16.160 --> 00:06:21.560
<v Speaker 1>was thinking about it, and if I were to do

115
00:06:21.639 --> 00:06:25.839
<v Speaker 1>it today, I would, you know, there's a good chance

116
00:06:25.839 --> 00:06:31.240
<v Speaker 1>that I would choose to use JavaScript. But I'm like

117
00:06:31.560 --> 00:06:36.920
<v Speaker 1>wondering why anybody would use typeescript as opposed to JavaScript

118
00:06:37.600 --> 00:06:43.000
<v Speaker 1>when solving elite code challenge. What do you think about that?

119
00:06:43.000 --> 00:06:46.519
<v Speaker 2>That's a good question. I don't know what i'd use, honestly,

120
00:06:46.839 --> 00:06:49.639
<v Speaker 2>I haven't done lee code in a while. I think

121
00:06:49.639 --> 00:06:51.519
<v Speaker 2>it's a fun little hobby that one can do, like

122
00:06:51.560 --> 00:06:55.480
<v Speaker 2>a niche little area programming, and I detest how associated

123
00:06:55.519 --> 00:06:59.160
<v Speaker 2>it's become with job interviews. That's just not a core

124
00:06:59.199 --> 00:07:02.680
<v Speaker 2>competency that we use day to day as much as

125
00:07:02.839 --> 00:07:07.160
<v Speaker 2>you know, debugging or pairing. But I digress. I don't know.

126
00:07:07.240 --> 00:07:09.120
<v Speaker 2>It's the rule that I normally go through is the

127
00:07:09.199 --> 00:07:11.959
<v Speaker 2>rule of three. If I'm using more than three files

128
00:07:12.079 --> 00:07:14.360
<v Speaker 2>or working with three or more people in a project,

129
00:07:14.360 --> 00:07:17.319
<v Speaker 2>I'll switch from JavaScript to type scripts. Leak code doesn't

130
00:07:17.399 --> 00:07:20.920
<v Speaker 2>really satisfy that rule. So the overhead of typescripts needing

131
00:07:20.959 --> 00:07:24.000
<v Speaker 2>to or trying to get you to define types for things,

132
00:07:24.399 --> 00:07:26.639
<v Speaker 2>or being aggressive when you haven't defined it enough. Types

133
00:07:27.199 --> 00:07:30.199
<v Speaker 2>oftentimes isn't worth it. It can be useful though, if

134
00:07:30.240 --> 00:07:32.800
<v Speaker 2>you do, and if you have experience, and if you

135
00:07:32.959 --> 00:07:35.839
<v Speaker 2>feel comfortable writing out types or just using any in

136
00:07:35.879 --> 00:07:38.759
<v Speaker 2>a lot of places. So yeah, I can see the

137
00:07:39.519 --> 00:07:41.319
<v Speaker 2>motivation for it. I wouldn't go for it myself.

138
00:07:42.079 --> 00:07:48.480
<v Speaker 1>Yeah, me too. I'm thinking that probably the sweet spot

139
00:07:48.759 --> 00:07:55.959
<v Speaker 1>for dynamic languages is rapid prototyping. And with lead code,

140
00:07:56.040 --> 00:08:00.040
<v Speaker 1>you are that's essentially what you're doing. You're trying to

141
00:08:00.160 --> 00:08:03.680
<v Speaker 1>hammer out a working solution as quickly as possible. You know,

142
00:08:03.839 --> 00:08:07.680
<v Speaker 1>usually you're constrained in time. Writing anything that at the

143
00:08:07.759 --> 00:08:11.639
<v Speaker 1>end of the day doesn't actually get translated into executable

144
00:08:11.720 --> 00:08:16.839
<v Speaker 1>code seems like a waste of time in that context.

145
00:08:16.959 --> 00:08:21.720
<v Speaker 1>So yeah, but you know, in any event, it's nice

146
00:08:21.759 --> 00:08:24.800
<v Speaker 1>of them to support it. Is an option, you know. Interesting.

147
00:08:26.319 --> 00:08:30.480
<v Speaker 1>I once, by the way, commented that my ideal development

148
00:08:30.639 --> 00:08:35.240
<v Speaker 1>environment would be me writing JavaScript and everybody else writing typescript.

149
00:08:35.759 --> 00:08:38.120
<v Speaker 1>That way, I don't have to mess around with types,

150
00:08:38.200 --> 00:08:40.919
<v Speaker 1>but everything that I do is supported by types, and

151
00:08:41.000 --> 00:08:44.080
<v Speaker 1>I get all the completion. And the only problem with

152
00:08:44.159 --> 00:08:48.639
<v Speaker 1>that is that everybody else, includes me from about a

153
00:08:48.759 --> 00:08:53.279
<v Speaker 1>week ago. So you know, I might be smiling now,

154
00:08:53.360 --> 00:08:56.440
<v Speaker 1>but I'll be sad in a week if I write

155
00:08:56.440 --> 00:08:57.720
<v Speaker 1>my stuff in JavaScript.

156
00:09:00.000 --> 00:09:02.240
<v Speaker 2>I think the really baller move for interviews is to

157
00:09:02.240 --> 00:09:05.159
<v Speaker 2>to use the types type system instead of the run.

158
00:09:05.639 --> 00:09:07.919
<v Speaker 2>That's really where we shine.

159
00:09:08.639 --> 00:09:13.360
<v Speaker 1>Yeah, using uh the type system itself as ah as

160
00:09:13.440 --> 00:09:18.559
<v Speaker 1>a programming language. Uh yeah, I know some people who

161
00:09:18.600 --> 00:09:21.600
<v Speaker 1>do that, who dabble in that sort of thing. I

162
00:09:21.679 --> 00:09:24.080
<v Speaker 1>used to do that sort of crazy stuff when I

163
00:09:24.240 --> 00:09:27.399
<v Speaker 1>back in the day with C plus plus because as sexually,

164
00:09:27.440 --> 00:09:32.519
<v Speaker 1>any language which which supports a sufficiently sophisticated generics can

165
00:09:32.559 --> 00:09:36.919
<v Speaker 1>be used as its own, you know, quote unquote type

166
00:09:37.480 --> 00:09:41.360
<v Speaker 1>programming language. Because you get conditional you effectively can implement

167
00:09:41.840 --> 00:09:48.200
<v Speaker 1>conditionals and loops uh via recursion. So so yeah, it's

168
00:09:48.320 --> 00:09:54.159
<v Speaker 1>it's an interesting, interesting approach, but mm hmm yeah, mostly

169
00:09:54.279 --> 00:09:56.600
<v Speaker 1>mostly a game and not something you want to do

170
00:09:56.799 --> 00:10:02.919
<v Speaker 1>anywhere near production code. Yeah. By the way, one more

171
00:10:02.960 --> 00:10:06.240
<v Speaker 1>interesting point about this whole thing about typescript and when

172
00:10:06.240 --> 00:10:12.039
<v Speaker 1>it's appropriate. I have to confess that when Typescript initially

173
00:10:12.120 --> 00:10:17.840
<v Speaker 1>came out, my initial attitude was kind of negative because

174
00:10:17.960 --> 00:10:24.600
<v Speaker 1>all the original demos were around classes and enams, and

175
00:10:24.600 --> 00:10:28.679
<v Speaker 1>stuff like that. And it might not be surprising given

176
00:10:28.720 --> 00:10:32.000
<v Speaker 1>that it was created by the same Microsoft people that

177
00:10:32.399 --> 00:10:36.360
<v Speaker 1>gave us c sharp, and you know, back at the

178
00:10:36.480 --> 00:10:39.360
<v Speaker 1>time they kind of, I guess, didn't really know any better.

179
00:10:40.120 --> 00:10:44.879
<v Speaker 1>But my feeling initially with looking at the original sample

180
00:10:46.639 --> 00:10:51.360
<v Speaker 1>typescript code that they were you know, showcasing, was that

181
00:10:51.399 --> 00:10:55.679
<v Speaker 1>this is kind of a poor man's Java. And since

182
00:10:55.840 --> 00:11:01.399
<v Speaker 1>I much preferred JavaScript to Java, that feeling that Typescript

183
00:11:01.440 --> 00:11:04.879
<v Speaker 1>was kind of pulling me back into the Java realm

184
00:11:05.480 --> 00:11:10.080
<v Speaker 1>was something that you know, really rubbed me the wrong way. Uh,

185
00:11:10.120 --> 00:11:14.200
<v Speaker 1>And I kind of like totally flipped on that. I

186
00:11:14.240 --> 00:11:17.879
<v Speaker 1>did like a one eighty on that when I realized

187
00:11:18.639 --> 00:11:24.399
<v Speaker 1>that you can do you know, function JavaScript functional style

188
00:11:24.480 --> 00:11:30.399
<v Speaker 1>programming and get all the benefits of types with typescript.

189
00:11:30.440 --> 00:11:33.039
<v Speaker 1>And now the typescript has come such a long way

190
00:11:33.159 --> 00:11:37.000
<v Speaker 1>and you got so much inference going on and the

191
00:11:37.039 --> 00:11:40.600
<v Speaker 1>cool things with generics and stuff like that, you can

192
00:11:40.720 --> 00:11:47.120
<v Speaker 1>achieve very cool type safety and without having to use

193
00:11:47.399 --> 00:11:52.080
<v Speaker 1>classes and interfaces at all in your code. So yeah,

194
00:11:52.120 --> 00:11:55.039
<v Speaker 1>so that's my confession about typescript. Does it kind of

195
00:11:55.200 --> 00:11:58.159
<v Speaker 1>match your own feelings about the topic?

196
00:11:59.039 --> 00:12:02.159
<v Speaker 2>It does? Yeah, I think you really hit the nail

197
00:12:02.159 --> 00:12:04.440
<v Speaker 2>on the head on the two big advancements in marketing

198
00:12:04.480 --> 00:12:06.679
<v Speaker 2>the typescripts had. One is that at the beginning they

199
00:12:06.720 --> 00:12:10.159
<v Speaker 2>were really appealing to people on the in large part

200
00:12:10.200 --> 00:12:12.720
<v Speaker 2>on the premise of you can use these features you've

201
00:12:12.759 --> 00:12:15.840
<v Speaker 2>been missing, which included both classes and the type system.

202
00:12:16.120 --> 00:12:19.720
<v Speaker 2>Nowadays the marketing doesn't really mention classes, both because that's

203
00:12:19.840 --> 00:12:22.519
<v Speaker 2>a core part of the language now over a decade later,

204
00:12:22.840 --> 00:12:26.919
<v Speaker 2>and because we accidentally ended up with the misconception in

205
00:12:26.960 --> 00:12:30.240
<v Speaker 2>the community that typescript is more for class oriented rather

206
00:12:30.279 --> 00:12:34.000
<v Speaker 2>than say, functional approaches, which is now that you've hit

207
00:12:34.039 --> 00:12:37.639
<v Speaker 2>the nail on the second point that typecript actually supports

208
00:12:37.639 --> 00:12:41.519
<v Speaker 2>functional programming and really really non class but still type

209
00:12:41.559 --> 00:12:44.919
<v Speaker 2>safe approach as well, that I would even say that

210
00:12:44.919 --> 00:12:47.120
<v Speaker 2>that's a better way of using Typescript in many cases.

211
00:12:47.879 --> 00:12:50.320
<v Speaker 2>So I think it's just really cool to see how

212
00:12:50.600 --> 00:12:53.480
<v Speaker 2>marketing evolves over time as people learn better how to

213
00:12:53.639 --> 00:12:56.039
<v Speaker 2>use and how to market a tool like typescript, for example.

214
00:12:57.120 --> 00:13:00.679
<v Speaker 1>But is it just marketing or is it also how

215
00:13:00.799 --> 00:13:04.320
<v Speaker 1>typescript itself has technically evolved.

216
00:13:05.559 --> 00:13:08.960
<v Speaker 2>It's a good question. I would love to hear you

217
00:13:09.039 --> 00:13:12.080
<v Speaker 2>interview every two to four years at the very rarest

218
00:13:12.159 --> 00:13:14.799
<v Speaker 2>or at least common core folks from the Typescript team.

219
00:13:14.799 --> 00:13:17.080
<v Speaker 2>To see how their answers to this evolve over time,

220
00:13:17.519 --> 00:13:20.919
<v Speaker 2>I'm sure would be fascinating. I think that if you

221
00:13:20.960 --> 00:13:24.480
<v Speaker 2>look back at how typescripts discussions, which are many which

222
00:13:24.480 --> 00:13:27.159
<v Speaker 2>are public, like their meeting notes and their issue responses

223
00:13:27.159 --> 00:13:29.600
<v Speaker 2>have been on GitHub, it's been pretty consistent that they

224
00:13:29.679 --> 00:13:33.240
<v Speaker 2>don't try to specifically go for say, classes and OOP,

225
00:13:33.279 --> 00:13:34.720
<v Speaker 2>It's just that that was one of the big things

226
00:13:34.720 --> 00:13:37.720
<v Speaker 2>they had to implement early on for standardization, for marketing

227
00:13:37.759 --> 00:13:40.559
<v Speaker 2>for by I don't say marketing and drug protum might

228
00:13:40.639 --> 00:13:43.240
<v Speaker 2>just mean these are the things that people needed from typescript,

229
00:13:44.000 --> 00:13:48.360
<v Speaker 2>but they've they've in virtually every discussion tried to pull

230
00:13:48.720 --> 00:13:52.519
<v Speaker 2>the focus back from specific things like you know, supporting

231
00:13:53.120 --> 00:13:58.399
<v Speaker 2>I don't know, injectable classes or supporting functional style insert

232
00:13:58.720 --> 00:14:01.720
<v Speaker 2>paradigm here, and try to think, what are the common

233
00:14:01.799 --> 00:14:05.159
<v Speaker 2>community needs for type safety. What are the ways of

234
00:14:05.360 --> 00:14:09.480
<v Speaker 2>bending or describing or manipulating types that folks are commonly

235
00:14:09.559 --> 00:14:13.720
<v Speaker 2>using across many different teams, organizations, paradigms, and how can

236
00:14:13.759 --> 00:14:15.759
<v Speaker 2>we build that in an dignostic way in the type

237
00:14:15.759 --> 00:14:19.799
<v Speaker 2>system such that anyone benefits, not just specifically say classes.

238
00:14:21.480 --> 00:14:28.440
<v Speaker 1>I'm totally with you on that. I think that first

239
00:14:28.480 --> 00:14:29.919
<v Speaker 1>of all, I have to say that in a lot

240
00:14:29.960 --> 00:14:33.960
<v Speaker 1>of ways, the Typescript people like have a super hard job.

241
00:14:34.039 --> 00:14:37.600
<v Speaker 1>I compare it to herding cats. Basically, you take the

242
00:14:38.399 --> 00:14:44.440
<v Speaker 1>poster child for dynamic languages, a language that is dynamic

243
00:14:44.600 --> 00:14:48.480
<v Speaker 1>but also has dynamic objects, like everything in job script

244
00:14:48.519 --> 00:14:51.879
<v Speaker 1>is dynamic. Is it's dynamic as you can get, and

245
00:14:52.000 --> 00:14:55.080
<v Speaker 1>then try to enforce the static type system on top

246
00:14:55.159 --> 00:15:00.519
<v Speaker 1>of that. And my feeling is that, especially in recent years,

247
00:15:00.600 --> 00:15:07.679
<v Speaker 1>and to be fair and honest, I'm not sufficiently knowledgeable

248
00:15:07.720 --> 00:15:10.679
<v Speaker 1>about the history and evolution of typescript to tell you

249
00:15:10.679 --> 00:15:14.720
<v Speaker 1>know which features came first and which features came in later,

250
00:15:15.399 --> 00:15:18.759
<v Speaker 1>and you know what happened sooner or later. I'm more

251
00:15:18.799 --> 00:15:25.519
<v Speaker 1>knowledgeable of JavaScript and Typescript in this regard. But what

252
00:15:25.600 --> 00:15:30.440
<v Speaker 1>I see now is that in the past I had

253
00:15:30.480 --> 00:15:34.120
<v Speaker 1>this kind of feeling that typescript is trying to force

254
00:15:34.200 --> 00:15:37.879
<v Speaker 1>me to do things certain ways that sometimes I wanted

255
00:15:37.919 --> 00:15:41.960
<v Speaker 1>to do. I had certain paradigms that I implemented in

256
00:15:42.039 --> 00:15:46.000
<v Speaker 1>JavaScript in ways that I really liked, and I couldn't

257
00:15:46.039 --> 00:15:49.799
<v Speaker 1>get them to work properly with typescript, and now I

258
00:15:49.960 --> 00:15:53.799
<v Speaker 1>can now. It's difficult for me to say whether it's

259
00:15:53.960 --> 00:15:58.279
<v Speaker 1>because typescript has evolved and improved or because my knowledge

260
00:15:58.320 --> 00:16:02.200
<v Speaker 1>of typescript has evolved in proved might be probably it's both,

261
00:16:03.080 --> 00:16:06.960
<v Speaker 1>But the feeling is that you can now be much

262
00:16:07.000 --> 00:16:11.039
<v Speaker 1>more expressive in what you can achieve with typescript, and

263
00:16:11.159 --> 00:16:18.399
<v Speaker 1>you don't necessarily have to forego, you know, mainstream JavaScript

264
00:16:19.480 --> 00:16:22.360
<v Speaker 1>paradigms just to get the benefits of typescript.

265
00:16:23.320 --> 00:16:27.799
<v Speaker 2>Yeah, I agreed. I think included in that second point

266
00:16:27.840 --> 00:16:32.360
<v Speaker 2>of you're more happy with typescript or more typescript d yourself,

267
00:16:32.600 --> 00:16:35.639
<v Speaker 2>part of that includes understanding intuitively what are the types

268
00:16:35.679 --> 00:16:40.799
<v Speaker 2>of flows or types that typescript is easily able to represent.

269
00:16:40.960 --> 00:16:42.519
<v Speaker 2>There are a lot of complex things you can represent

270
00:16:42.519 --> 00:16:45.360
<v Speaker 2>with typescript with a lot of glue and comfoolery, but

271
00:16:45.440 --> 00:16:48.240
<v Speaker 2>the stuff that's really clean and beautiful and sistinct people

272
00:16:48.279 --> 00:16:51.200
<v Speaker 2>tend to gravitate towards the more they write typescripts, which

273
00:16:51.200 --> 00:16:53.679
<v Speaker 2>I think is a really good thing because typescript types

274
00:16:53.720 --> 00:16:57.799
<v Speaker 2>are how we generally represent JavaScript concepts and the way

275
00:16:57.840 --> 00:17:00.440
<v Speaker 2>our data flows and code. So if something is difficult

276
00:17:00.440 --> 00:17:02.799
<v Speaker 2>to represent in typescript. There's a very good chance that

277
00:17:02.799 --> 00:17:05.240
<v Speaker 2>it's based on something that's not easy to explain to

278
00:17:05.359 --> 00:17:08.160
<v Speaker 2>others or easy to represent in code. I think there's

279
00:17:08.160 --> 00:17:09.960
<v Speaker 2>this kind of beautiful synergy there.

280
00:17:10.559 --> 00:17:14.799
<v Speaker 1>By the way, Jay Larky comments that quote, I think

281
00:17:14.920 --> 00:17:17.799
<v Speaker 1>JS got better, so they had to do less stuff

282
00:17:17.799 --> 00:17:24.799
<v Speaker 1>on top of JS nowadays. I agree, but doesn't necessarily

283
00:17:24.839 --> 00:17:28.640
<v Speaker 1>mean that the typescript people have less work, because you

284
00:17:28.759 --> 00:17:32.839
<v Speaker 1>need to support in the type system all this new

285
00:17:32.960 --> 00:17:38.400
<v Speaker 1>JS stuff as well, especially since a lot of the

286
00:17:38.440 --> 00:17:44.359
<v Speaker 1>typescript sophistication comes from the ever growing ability to statically

287
00:17:44.400 --> 00:17:48.880
<v Speaker 1>analyze the code and figure out stuff like type narrowing

288
00:17:49.480 --> 00:17:52.519
<v Speaker 1>based on logic that you actually see in the code.

289
00:17:53.119 --> 00:17:56.599
<v Speaker 1>So if you're doing like an if in the code

290
00:17:57.000 --> 00:18:01.440
<v Speaker 1>and bail out a short circuit some condition, then it

291
00:18:01.519 --> 00:18:07.119
<v Speaker 1>probably also narrows the types moving forward, because you've kind

292
00:18:07.119 --> 00:18:11.960
<v Speaker 1>of ejected out that those aspects of the types that

293
00:18:12.000 --> 00:18:16.519
<v Speaker 1>are no longer relevant. But by the way, speaking of

294
00:18:16.559 --> 00:18:19.480
<v Speaker 1>all that and taking us finally to take it to

295
00:18:19.599 --> 00:18:23.960
<v Speaker 1>ts s flint, it, you know, brings up an interesting point.

296
00:18:24.200 --> 00:18:29.079
<v Speaker 1>You know, given all this sophistication and power in typescript itself,

297
00:18:29.960 --> 00:18:33.400
<v Speaker 1>why do we actually need a linter for typescript? Isn't

298
00:18:33.400 --> 00:18:35.759
<v Speaker 1>typescript itself enough? In that regard?

299
00:18:36.839 --> 00:18:39.279
<v Speaker 2>I love it. There's so many good reasons why one

300
00:18:39.279 --> 00:18:42.920
<v Speaker 2>would want a linter, and a few bad reasons, just

301
00:18:42.960 --> 00:18:45.839
<v Speaker 2>for my emotional sake, If you don't mind, I'd like

302
00:18:45.880 --> 00:18:48.200
<v Speaker 2>to start with the bad. A lot of folks to

303
00:18:48.440 --> 00:18:51.079
<v Speaker 2>go for it, Yes, a lot of folks used to

304
00:18:51.160 --> 00:18:54.160
<v Speaker 2>use eslint for a few things that, among others that

305
00:18:54.200 --> 00:18:58.200
<v Speaker 2>we no longer recommend in the linting world. Formatting or

306
00:18:58.240 --> 00:19:02.480
<v Speaker 2>silly stylistic rules would be the big one. Es slint

307
00:19:02.519 --> 00:19:04.759
<v Speaker 2>is a linter, which means you it allows you to

308
00:19:04.920 --> 00:19:08.200
<v Speaker 2>provide a bunch of individual rules, which are little pieces

309
00:19:08.200 --> 00:19:10.160
<v Speaker 2>of code that yell at you if your code is

310
00:19:10.200 --> 00:19:11.839
<v Speaker 2>not working the way it should or it doesn't look

311
00:19:11.880 --> 00:19:14.960
<v Speaker 2>the way it should. And then that's separate from a

312
00:19:15.000 --> 00:19:17.599
<v Speaker 2>formatter which reformats your code or a type checker which

313
00:19:17.640 --> 00:19:18.559
<v Speaker 2>looks at all the types.

314
00:19:18.359 --> 00:19:18.839
<v Speaker 1>In your code.

315
00:19:19.319 --> 00:19:23.160
<v Speaker 2>Formatter winter type checker. A linter is structurally not very

316
00:19:23.160 --> 00:19:26.400
<v Speaker 2>good at formatting. So if you're using es and for formatting,

317
00:19:26.680 --> 00:19:28.359
<v Speaker 2>there are a lot of gaps, like there are a

318
00:19:28.359 --> 00:19:30.319
<v Speaker 2>lot of little edge cases that aren't really covered by

319
00:19:30.319 --> 00:19:32.440
<v Speaker 2>any one rule, or it's hard to write that type

320
00:19:32.440 --> 00:19:34.119
<v Speaker 2>of logic in a linch role. It's much easier to

321
00:19:34.160 --> 00:19:38.039
<v Speaker 2>do a big formatter sweep, like with prettier. So there are.

322
00:19:38.359 --> 00:19:41.039
<v Speaker 1>Formatting is about just to make it clear to our

323
00:19:41.039 --> 00:19:47.359
<v Speaker 1>audience about stuff like indentation, line lengths, line breaks, stuff

324
00:19:47.400 --> 00:19:47.799
<v Speaker 1>like that.

325
00:19:48.720 --> 00:19:53.960
<v Speaker 2>Yeah, yeah, semichel and you know white space type Yeah,

326
00:19:54.119 --> 00:19:57.640
<v Speaker 2>so uh there are. There is a project, really good

327
00:19:57.680 --> 00:20:00.640
<v Speaker 2>one called the Lent Stylistic for in four in formatting

328
00:20:00.640 --> 00:20:02.599
<v Speaker 2>with d slint, but it's not part of Core anymore,

329
00:20:02.599 --> 00:20:04.759
<v Speaker 2>and a lot of people associated, oh it's yelling about

330
00:20:04.759 --> 00:20:07.799
<v Speaker 2>me doing at me about semi Collin's with linter. Then then

331
00:20:07.839 --> 00:20:11.519
<v Speaker 2>just stop using linters altogether. It's not the right conclusion,

332
00:20:12.960 --> 00:20:14.480
<v Speaker 2>but there are a lot of really good things you

333
00:20:14.519 --> 00:20:18.519
<v Speaker 2>can do with them. Generally speaking, winters can apply logic

334
00:20:18.559 --> 00:20:21.279
<v Speaker 2>in cases where it might be type safe. For example,

335
00:20:21.880 --> 00:20:24.680
<v Speaker 2>you might be creating a promise which is type safe,

336
00:20:24.799 --> 00:20:27.079
<v Speaker 2>but then you do something dangerous with it that's still

337
00:20:27.079 --> 00:20:29.519
<v Speaker 2>type safe, such as not handling the rejection case of

338
00:20:29.559 --> 00:20:31.720
<v Speaker 2>that promise, like if you forget to await it and

339
00:20:31.720 --> 00:20:34.400
<v Speaker 2>then you console log it. That's all type safe, but

340
00:20:34.559 --> 00:20:37.359
<v Speaker 2>that's probably not what you wanted to do, which means

341
00:20:37.359 --> 00:20:39.359
<v Speaker 2>you still want a tool separate from your type checker

342
00:20:39.359 --> 00:20:41.440
<v Speaker 2>to'll let you know about these probable mishaps.

343
00:20:43.880 --> 00:20:46.640
<v Speaker 1>So can you give a couple of examples of some

344
00:20:46.720 --> 00:20:51.200
<v Speaker 1>of the rules that DSCS lint enforces. I know we

345
00:20:51.319 --> 00:20:54.519
<v Speaker 1>discussed those in the previous time that we had you

346
00:20:54.599 --> 00:20:58.319
<v Speaker 1>on the show, but I think it's still worth reviewing.

347
00:20:58.519 --> 00:21:01.319
<v Speaker 1>Also if you've got some new one since then, you know.

348
00:21:02.079 --> 00:21:06.839
<v Speaker 2>Oh yeah. The classic example that we always jump to

349
00:21:07.119 --> 00:21:09.519
<v Speaker 2>is promises like the you know you forgot to await

350
00:21:09.599 --> 00:21:12.640
<v Speaker 2>type stuff, because that's that's a huge source of bugs,

351
00:21:12.680 --> 00:21:14.599
<v Speaker 2>and we get a lot of reports from from people

352
00:21:14.640 --> 00:21:18.440
<v Speaker 2>that that's the key thing they need from us, you know,

353
00:21:18.559 --> 00:21:21.720
<v Speaker 2>having a having a function that returns a promise, particularly

354
00:21:21.759 --> 00:21:23.440
<v Speaker 2>that in your code, and then passing it to something

355
00:21:23.880 --> 00:21:26.240
<v Speaker 2>that doesn't know the function that's calling that you're passing

356
00:21:26.640 --> 00:21:29.519
<v Speaker 2>returns a promise. So then the async logic just floats

357
00:21:29.519 --> 00:21:31.799
<v Speaker 2>off in the distance somewhere that that type of weird

358
00:21:31.920 --> 00:21:34.720
<v Speaker 2>edge case that is still type safe but not right.

359
00:21:35.960 --> 00:21:38.400
<v Speaker 2>Another one would be for in array is the rule

360
00:21:38.440 --> 00:21:40.799
<v Speaker 2>or no foreign array, where there are two common ways

361
00:21:40.799 --> 00:21:43.039
<v Speaker 2>of looping over an object in jobs this four in

362
00:21:43.279 --> 00:21:46.119
<v Speaker 2>and four of four in loops over the keys for

363
00:21:46.279 --> 00:21:49.440
<v Speaker 2>of loops over the values of inodurable. So if you

364
00:21:49.519 --> 00:21:52.000
<v Speaker 2>use four in on an array, you'll get the stringified

365
00:21:52.079 --> 00:21:55.960
<v Speaker 2>array keys, which is technically type safe. That's technically something

366
00:21:56.000 --> 00:21:58.359
<v Speaker 2>some people might want to do, but in practice, why

367
00:21:58.359 --> 00:21:59.960
<v Speaker 2>the heck would you ever want to do that. That's

368
00:22:00.079 --> 00:22:02.279
<v Speaker 2>that's a link rule yelling at you. Area of concern.

369
00:22:02.640 --> 00:22:05.920
<v Speaker 1>Yeah, four in is one of those things that in

370
00:22:05.960 --> 00:22:10.160
<v Speaker 1>the language it's legal, probably doesn't It doesn't do what

371
00:22:10.200 --> 00:22:14.359
<v Speaker 1>you probably expect, and therefore you should probably not use it.

372
00:22:15.160 --> 00:22:18.519
<v Speaker 1>Or put another way, if you're Kive Simpson, then you

373
00:22:18.599 --> 00:22:20.720
<v Speaker 1>probably have a very good reason to use it, but

374
00:22:20.839 --> 00:22:23.319
<v Speaker 1>otherwise you probably don't. Then don't and don't.

375
00:22:24.480 --> 00:22:27.519
<v Speaker 2>Yeah, there's I think you touch on such an interesting

376
00:22:27.559 --> 00:22:29.359
<v Speaker 2>point that there are a lot of people who are

377
00:22:29.559 --> 00:22:33.720
<v Speaker 2>very very deeply experienced, knowledgeable, influential javascrip developers who do

378
00:22:33.759 --> 00:22:35.640
<v Speaker 2>not see the value of linting, or at least do

379
00:22:35.680 --> 00:22:39.319
<v Speaker 2>not themselves experience it because they instinctively, you know, they

380
00:22:39.359 --> 00:22:41.480
<v Speaker 2>always handle their promises, they know what they're doing. They

381
00:22:41.480 --> 00:22:43.279
<v Speaker 2>don't write four in on an array, they write for

382
00:22:43.440 --> 00:22:45.200
<v Speaker 2>of but a lot of the value the winters for

383
00:22:45.279 --> 00:22:47.599
<v Speaker 2>people who don't have, you know, twenty years of writing

384
00:22:47.799 --> 00:22:51.319
<v Speaker 2>javascripts and then typescript people who are still new and learning.

385
00:22:51.759 --> 00:22:58.279
<v Speaker 1>To be fair, there's a certain point in it, I'd

386
00:22:58.319 --> 00:23:02.039
<v Speaker 1>say not seeing the value in linting is a bit harsh.

387
00:23:02.599 --> 00:23:07.720
<v Speaker 1>I would say rather that they would disable certain rules

388
00:23:07.759 --> 00:23:11.359
<v Speaker 1>that you probably want to keep enabled for most people.

389
00:23:14.039 --> 00:23:22.079
<v Speaker 1>And but the reality is that usually like you don't

390
00:23:22.079 --> 00:23:26.160
<v Speaker 1>work alone, and you want to conform to the race

391
00:23:26.279 --> 00:23:29.720
<v Speaker 1>the rest of the codebase. So the example that I

392
00:23:29.880 --> 00:23:31.599
<v Speaker 1>like to give, and I don't know if there's a

393
00:23:31.680 --> 00:23:35.200
<v Speaker 1>linting or formatting rule for that, is that whole debate

394
00:23:35.279 --> 00:23:41.119
<v Speaker 1>about whether when you're creating functions named functions, whether you

395
00:23:41.200 --> 00:23:44.559
<v Speaker 1>should use the function keyword, or whether you should do

396
00:23:44.680 --> 00:23:49.759
<v Speaker 1>something like const name equals in err. I see a

397
00:23:49.799 --> 00:23:54.880
<v Speaker 1>lot of people using uh. Now. Now, obviously they're not identical.

398
00:23:54.960 --> 00:23:57.559
<v Speaker 1>There are certain differences, and we can you know, touch

399
00:23:57.559 --> 00:24:02.079
<v Speaker 1>on those, you know, but but to a great extent,

400
00:24:02.759 --> 00:24:08.039
<v Speaker 1>it's an just an issue of personal preference. My personal

401
00:24:08.119 --> 00:24:11.440
<v Speaker 1>preference is the function keyword, and I can explain why

402
00:24:11.480 --> 00:24:14.240
<v Speaker 1>that is. But at the end of the day, is

403
00:24:14.319 --> 00:24:18.200
<v Speaker 1>what I do is I conform with the project code base,

404
00:24:18.359 --> 00:24:22.960
<v Speaker 1>Like if the project use it, does it prefers errow

405
00:24:23.119 --> 00:24:27.240
<v Speaker 1>named errow functions. I will use named errow functions because

406
00:24:27.279 --> 00:24:31.319
<v Speaker 1>if you start, you know, deviating in your own code,

407
00:24:31.920 --> 00:24:37.079
<v Speaker 1>you're creating an unwanted and unnecessary cognitive overhead because people

408
00:24:37.200 --> 00:24:39.880
<v Speaker 1>will look at that piece of code later and say, hey,

409
00:24:40.559 --> 00:24:44.680
<v Speaker 1>this code looks different than the rest. Why is that?

410
00:24:45.000 --> 00:24:48.119
<v Speaker 1>Is it doing something different? You know, and they have

411
00:24:48.200 --> 00:24:52.400
<v Speaker 1>to start thinking about it, you know, start they don't

412
00:24:52.480 --> 00:24:56.359
<v Speaker 1>trust their instincts around it anymore, and that's a bad thing.

413
00:24:56.960 --> 00:25:01.079
<v Speaker 1>So consistency above everything else, and that that's another big

414
00:25:01.440 --> 00:25:09.359
<v Speaker 1>benefit of linting, both stylistic linting and semantic linting. I

415
00:25:09.400 --> 00:25:13.359
<v Speaker 1>agree that it generates consistency.

416
00:25:14.160 --> 00:25:17.599
<v Speaker 2>Yeah, that's something a formatter can't do because, as you said,

417
00:25:17.640 --> 00:25:21.039
<v Speaker 2>sometimes there is a subtle logical difference between different keywords

418
00:25:21.119 --> 00:25:23.480
<v Speaker 2>or different types, and that's something a type checker won't

419
00:25:23.480 --> 00:25:26.519
<v Speaker 2>do because well it's all type safe. That's exactly what

420
00:25:26.839 --> 00:25:29.559
<v Speaker 2>one of the big use cases for winter is keeping on.

421
00:25:29.720 --> 00:25:34.839
<v Speaker 1>So you said that some of the main benefit of

422
00:25:34.960 --> 00:25:42.440
<v Speaker 1>linting is to highlight things that are correct, like using

423
00:25:43.519 --> 00:25:48.559
<v Speaker 1>four in or not doing not putting a weight on

424
00:25:48.599 --> 00:25:55.160
<v Speaker 1>your promises or maybe not putting a catch somewhere. So

425
00:25:55.319 --> 00:25:58.160
<v Speaker 1>those are all things that are totally valid in terms

426
00:25:58.200 --> 00:26:05.079
<v Speaker 1>of the code. Are probably something that things that you

427
00:26:05.119 --> 00:26:09.720
<v Speaker 1>know are not right. That's put it is way you

428
00:26:09.759 --> 00:26:13.240
<v Speaker 1>probably don't want to do. So it's it's it's a

429
00:26:13.279 --> 00:26:16.160
<v Speaker 1>warning rather than an error. Would be the way that

430
00:26:16.200 --> 00:26:22.000
<v Speaker 1>I would phrase it, and then you want and that's

431
00:26:22.039 --> 00:26:25.680
<v Speaker 1>where the linter kind of steps in. Is that the

432
00:26:25.720 --> 00:26:27.240
<v Speaker 1>way that you would phrase it as well?

433
00:26:28.160 --> 00:26:31.839
<v Speaker 2>Yeah, it's a warning that in most cases you generally

434
00:26:31.880 --> 00:26:34.759
<v Speaker 2>still want to fail the build down. Yes, yeah, for sure,

435
00:26:36.359 --> 00:26:39.079
<v Speaker 2>there's a one more really good use case that it

436
00:26:39.119 --> 00:26:41.799
<v Speaker 2>gets forgotten a lot. You can write custom Lynch rules.

437
00:26:41.839 --> 00:26:44.799
<v Speaker 2>That's one of the big things that ESLNT became successful

438
00:26:44.839 --> 00:26:47.119
<v Speaker 2>from being able to support early on. If you're on

439
00:26:47.160 --> 00:26:49.400
<v Speaker 2>a team that, let's say, moving from one way of

440
00:26:49.440 --> 00:26:51.880
<v Speaker 2>calling an API to another, you can write a Lynch

441
00:26:51.920 --> 00:26:55.039
<v Speaker 2>role enforcing you know that people use the new way

442
00:26:55.119 --> 00:26:56.599
<v Speaker 2>not the old way, and you can even write a

443
00:26:56.599 --> 00:26:59.359
<v Speaker 2>fixer like an auto fixer in your Olynch role. So

444
00:26:59.480 --> 00:27:01.079
<v Speaker 2>migrant code from the old way to the new way

445
00:27:01.119 --> 00:27:03.119
<v Speaker 2>as a form of a code mob and having been

446
00:27:03.119 --> 00:27:04.720
<v Speaker 2>on a web platform team. I can tell you that's

447
00:27:04.720 --> 00:27:06.000
<v Speaker 2>incredibly helpful and useful.

448
00:27:08.119 --> 00:27:14.240
<v Speaker 1>That is nice. So what is new in TSC slint.

449
00:27:14.279 --> 00:27:18.319
<v Speaker 1>I gather that a new version is coming out, came

450
00:27:18.359 --> 00:27:19.720
<v Speaker 1>out about to come out.

451
00:27:20.599 --> 00:27:23.400
<v Speaker 2>Came out type ship yes, and V eight thank you

452
00:27:23.400 --> 00:27:24.160
<v Speaker 2>for bringing it up.

453
00:27:26.559 --> 00:27:27.880
<v Speaker 1>V eight is a special name.

454
00:27:28.480 --> 00:27:30.880
<v Speaker 2>I know we've had a few people get confused about

455
00:27:30.920 --> 00:27:32.839
<v Speaker 2>how it's not the Tomato juice and it's not the

456
00:27:32.880 --> 00:27:37.559
<v Speaker 2>engine underlying you know, Chromium and JavaScript. But it's our

457
00:27:37.599 --> 00:27:40.599
<v Speaker 2>newest major version. It has a lot of good things

458
00:27:40.599 --> 00:27:43.720
<v Speaker 2>in it. Just the high level overview is every major

459
00:27:43.839 --> 00:27:46.359
<v Speaker 2>version we improve and iterate on the list of recommended

460
00:27:46.440 --> 00:27:49.400
<v Speaker 2>rule sets are little sharebok in things. This one has

461
00:27:49.759 --> 00:27:52.400
<v Speaker 2>ESL and V nine support, which was unfortunately kind of

462
00:27:52.799 --> 00:27:56.200
<v Speaker 2>delayed on our end. And it has this new thing

463
00:27:56.240 --> 00:27:58.599
<v Speaker 2>called the Product Service, which makes typed rules the most

464
00:27:58.599 --> 00:28:02.160
<v Speaker 2>powerful rules we offer a lot more we hope, easy, straightforward,

465
00:28:02.279 --> 00:28:05.039
<v Speaker 2>understandable to configure. So we're really excited about it.

466
00:28:07.680 --> 00:28:14.359
<v Speaker 1>So what's the thing that you're most excited about in

467
00:28:14.400 --> 00:28:16.160
<v Speaker 1>the context of the new version?

468
00:28:17.559 --> 00:28:20.359
<v Speaker 2>The Project Service. A lot of the lint rules that

469
00:28:20.359 --> 00:28:23.519
<v Speaker 2>we just talked about and that are elsewhere mentioned about

470
00:28:23.559 --> 00:28:27.240
<v Speaker 2>being awesome and powerful need type information. For example, we

471
00:28:27.319 --> 00:28:29.039
<v Speaker 2>said no for in array, Well, how do you know

472
00:28:29.079 --> 00:28:32.759
<v Speaker 2>what is an array? Or you know, properly calling a

473
00:28:32.799 --> 00:28:35.000
<v Speaker 2>function that's a sync and make some promise, how do

474
00:28:35.000 --> 00:28:36.759
<v Speaker 2>you know the function is a sync or re turns

475
00:28:36.759 --> 00:28:39.000
<v Speaker 2>of promise. In general, you have to use a type

476
00:28:39.039 --> 00:28:40.839
<v Speaker 2>checker for that because what if you import it from

477
00:28:40.839 --> 00:28:44.039
<v Speaker 2>a file or some other MPM package or something, and

478
00:28:44.079 --> 00:28:45.480
<v Speaker 2>in order to do that we have to then call

479
00:28:45.519 --> 00:28:48.119
<v Speaker 2>into the Typescript APIs And there are not that many

480
00:28:48.119 --> 00:28:50.160
<v Speaker 2>products that do at. So this is still kind of

481
00:28:50.160 --> 00:28:53.400
<v Speaker 2>a new and exploratory area in the realm of JavaScript

482
00:28:53.359 --> 00:28:56.759
<v Speaker 2>typescript doing so. The project service is this term for

483
00:28:56.799 --> 00:28:59.880
<v Speaker 2>this new set of APIs that we're using from Typescript

484
00:29:00.079 --> 00:29:04.039
<v Speaker 2>at align type checking to behave more like what you're

485
00:29:04.119 --> 00:29:06.319
<v Speaker 2>using your editor, which means it's a little easier to

486
00:29:06.359 --> 00:29:09.000
<v Speaker 2>set up. We can infer more stuff and it shouldn't

487
00:29:09.000 --> 00:29:12.160
<v Speaker 2>have these weird differences where eslint understands something differently than

488
00:29:12.160 --> 00:29:13.200
<v Speaker 2>what you see in vis code.

489
00:29:14.880 --> 00:29:19.680
<v Speaker 1>Cool. So it's like effectively leveraging the language server to

490
00:29:19.720 --> 00:29:20.519
<v Speaker 1>a greater extent.

491
00:29:22.319 --> 00:29:25.319
<v Speaker 2>Yeah, yeah, a lot more code path sharing under the hood.

492
00:29:25.680 --> 00:29:27.880
<v Speaker 2>We use what the typescript calls it, the project service,

493
00:29:27.920 --> 00:29:31.160
<v Speaker 2>which is the set of functions provided by Typescript that

494
00:29:31.559 --> 00:29:33.480
<v Speaker 2>you can pass a path to a file and we'll

495
00:29:33.519 --> 00:29:36.319
<v Speaker 2>give you back here's how to describe type information for

496
00:29:36.359 --> 00:29:39.039
<v Speaker 2>the file. Some APIs like that, which is really exciting

497
00:29:39.079 --> 00:29:41.960
<v Speaker 2>because previously we were manually creating those things on our end,

498
00:29:42.039 --> 00:29:45.319
<v Speaker 2>effectively doing what the project service does for us. And

499
00:29:45.359 --> 00:29:49.319
<v Speaker 2>because we are not Typescripts, neither technically nor organizationally the

500
00:29:49.319 --> 00:29:51.079
<v Speaker 2>people behind it, we weren't doing as good of a

501
00:29:51.160 --> 00:29:53.480
<v Speaker 2>job as what the project service is able to do now.

502
00:29:54.799 --> 00:29:57.519
<v Speaker 1>By the way, one more point that Jay Larky brought

503
00:29:57.599 --> 00:30:02.519
<v Speaker 1>up in another comment is that some things are framework specific,

504
00:30:02.799 --> 00:30:11.720
<v Speaker 1>like rules of hooks or solid lind for restructuring props. Yeah,

505
00:30:11.759 --> 00:30:15.640
<v Speaker 1>that's absolutely true. I mean, you know, these days, most

506
00:30:16.559 --> 00:30:20.799
<v Speaker 1>typescripts JavaScript developers work in the context of a framework

507
00:30:20.839 --> 00:30:25.519
<v Speaker 1>and a meta framework, and there are let's call it,

508
00:30:25.799 --> 00:30:31.079
<v Speaker 1>additional rules that are that are or paradigms that are

509
00:30:31.200 --> 00:30:37.200
<v Speaker 1>more specific for whatever framework you choose. So things that

510
00:30:37.279 --> 00:30:40.240
<v Speaker 1>again are totally legal in the context of you know,

511
00:30:40.440 --> 00:30:44.400
<v Speaker 1>general purpose typescript or JavaScript might be things that you

512
00:30:44.559 --> 00:30:47.640
<v Speaker 1>want to avoid in the context of framework, and indeed

513
00:30:47.680 --> 00:30:52.359
<v Speaker 1>the structuring is probably in issues with the structuring in

514
00:30:53.359 --> 00:30:58.240
<v Speaker 1>solid is probably a good example where you might unintentionally

515
00:30:58.319 --> 00:31:03.279
<v Speaker 1>lose reactivity because of the structuring that's perfectly legal in

516
00:31:03.400 --> 00:31:04.680
<v Speaker 1>JavaScript and typescript.

517
00:31:05.480 --> 00:31:08.000
<v Speaker 2>Yeah, shout out j Larkie a great point.

518
00:31:08.720 --> 00:31:12.400
<v Speaker 1>Yeah, by the way, it's an interesting In another context,

519
00:31:13.079 --> 00:31:17.279
<v Speaker 1>we had the people from the Meta team a few

520
00:31:18.480 --> 00:31:22.400
<v Speaker 1>what's it weeks months back talking about the new React compiler,

521
00:31:23.119 --> 00:31:31.400
<v Speaker 1>and interestingly that compiler also has a linking aspect to it.

522
00:31:31.559 --> 00:31:35.480
<v Speaker 1>They have like the rules of React, and they're looking

523
00:31:35.519 --> 00:31:41.839
<v Speaker 1>at ways to enforce best practices of React using that compiler.

524
00:31:42.960 --> 00:31:47.079
<v Speaker 1>So it'll be interesting to see how they flag things,

525
00:31:47.160 --> 00:31:51.599
<v Speaker 1>whether it's the errors of warnings or whatnot. Like you said,

526
00:31:51.680 --> 00:31:54.759
<v Speaker 1>even if it's warnings, there's a good chance you still

527
00:31:54.759 --> 00:32:00.000
<v Speaker 1>want to break the build. But interesting. Yeah, it's interesting

528
00:32:00.079 --> 00:32:03.279
<v Speaker 1>to see blinting making its way into so much stuff.

529
00:32:04.279 --> 00:32:06.680
<v Speaker 2>Yeah, I'm really excited about it. I think it's a

530
00:32:06.720 --> 00:32:09.680
<v Speaker 2>really really cool area and it's really useful. And now

531
00:32:09.720 --> 00:32:12.160
<v Speaker 2>that folks respect it, you know, it's it's getting more

532
00:32:12.160 --> 00:32:12.920
<v Speaker 2>and more stuff.

533
00:32:13.559 --> 00:32:19.759
<v Speaker 1>Mm hmm. And I now that that's out, I imagine

534
00:32:19.799 --> 00:32:22.920
<v Speaker 1>that your work you've started working on the next version, right.

535
00:32:24.200 --> 00:32:27.599
<v Speaker 2>Yeah, we tend to reserve a few months even in

536
00:32:27.599 --> 00:32:29.920
<v Speaker 2>a year or two at most, probably just up to

537
00:32:29.960 --> 00:32:32.640
<v Speaker 2>a few months after each major version of just cleanups.

538
00:32:32.720 --> 00:32:35.000
<v Speaker 2>You know, we released this big new thing, this project service,

539
00:32:35.039 --> 00:32:37.720
<v Speaker 2>which is a different way of configuring type flinting. Well,

540
00:32:37.759 --> 00:32:41.200
<v Speaker 2>now we have all the myriad different ways people were

541
00:32:41.240 --> 00:32:43.839
<v Speaker 2>previously setting up type plinting coming in and telling us

542
00:32:43.839 --> 00:32:45.960
<v Speaker 2>way as it does or doesn't work for them. So

543
00:32:46.039 --> 00:32:48.839
<v Speaker 2>there's a lot of clean up there. Also, I think

544
00:32:48.880 --> 00:32:51.039
<v Speaker 2>there's a lot of value in a project just spending

545
00:32:51.079 --> 00:32:54.480
<v Speaker 2>time working on things that don't have a huge determined

546
00:32:54.519 --> 00:32:58.079
<v Speaker 2>purpose like you know, paper cuts, cleanups, documentation improvements, which

547
00:32:58.079 --> 00:32:59.400
<v Speaker 2>is I think the phase we're in right now.

548
00:33:00.119 --> 00:33:03.000
<v Speaker 1>Hmm. Cool. So you're not yet thinking so much about

549
00:33:03.119 --> 00:33:04.960
<v Speaker 1>V nine at this point in.

550
00:33:05.039 --> 00:33:11.680
<v Speaker 2>Time, Yeah, not so much. I think long term, there

551
00:33:11.759 --> 00:33:14.920
<v Speaker 2>is a new snazzy thing we want to start using more,

552
00:33:15.000 --> 00:33:18.000
<v Speaker 2>which is there's an API that typescript used to not

553
00:33:18.119 --> 00:33:23.240
<v Speaker 2>expose called the assignability API. Is type assignable too previously

554
00:33:23.279 --> 00:33:26.680
<v Speaker 2>in type checking. APIs to the stuff that Lynch rules

555
00:33:26.680 --> 00:33:29.079
<v Speaker 2>can use. You can you can get the type for something,

556
00:33:29.319 --> 00:33:31.920
<v Speaker 2>you can say, get the type of this function, call

557
00:33:32.079 --> 00:33:34.319
<v Speaker 2>the returns type and see if it's let's say, a

558
00:33:34.400 --> 00:33:37.640
<v Speaker 2>promise or something with a dot. Then but you couldn't

559
00:33:37.720 --> 00:33:39.880
<v Speaker 2>check two things and see if one is assignable to

560
00:33:39.920 --> 00:33:42.559
<v Speaker 2>the other, like if this number is assignable to that

561
00:33:42.880 --> 00:33:46.960
<v Speaker 2>string or something else. But now that that API is

562
00:33:47.000 --> 00:33:49.279
<v Speaker 2>available to us, they marked it as stable and you

563
00:33:49.319 --> 00:33:51.279
<v Speaker 2>can use it. We think there are a lot of

564
00:33:51.359 --> 00:33:54.720
<v Speaker 2>really interesting Lynch rules you can do with it. For example,

565
00:33:56.640 --> 00:34:00.000
<v Speaker 2>you could, instead of just saying no inferable types, don't

566
00:34:00.039 --> 00:34:02.720
<v Speaker 2>at of type annotation that's triple legal to the same

567
00:34:02.799 --> 00:34:05.720
<v Speaker 2>as whatever type something is, you could write a linter

568
00:34:05.799 --> 00:34:09.320
<v Speaker 2>role that bans type annotations that are wider than the thing.

569
00:34:09.800 --> 00:34:13.440
<v Speaker 2>Like if you say constant value colon string equals quotes,

570
00:34:13.639 --> 00:34:17.280
<v Speaker 2>we can say, aha, that string is actually losing type information.

571
00:34:17.360 --> 00:34:19.840
<v Speaker 2>Typescript by default would be able to infer that this

572
00:34:19.880 --> 00:34:23.159
<v Speaker 2>is some string literal or union of literals rather than

573
00:34:23.159 --> 00:34:26.559
<v Speaker 2>just the general string. So very exciting stuff.

574
00:34:26.599 --> 00:34:30.159
<v Speaker 1>I know, Yeah, no, this is this is cool. Look,

575
00:34:32.480 --> 00:34:37.559
<v Speaker 1>there is a challenge here, and it's it's an issue

576
00:34:37.559 --> 00:34:41.920
<v Speaker 1>that's been brought up by people like THEO I think

577
00:34:42.840 --> 00:34:52.679
<v Speaker 1>and others. Also Ryan Carniato about how like that typescript

578
00:34:52.719 --> 00:34:57.840
<v Speaker 1>really has two target audiences in a way, there's the

579
00:34:58.639 --> 00:35:05.199
<v Speaker 1>distinction that they may it was between application developers and

580
00:35:05.639 --> 00:35:14.079
<v Speaker 1>library developers or library makers that application developers usually are

581
00:35:14.159 --> 00:35:17.920
<v Speaker 1>able to use it at you know, without diving too

582
00:35:18.000 --> 00:35:23.639
<v Speaker 1>deeply into sophisticated types, and library developers or people that

583
00:35:23.719 --> 00:35:27.320
<v Speaker 1>create APIs are kind of forced to. I think the

584
00:35:27.920 --> 00:35:32.199
<v Speaker 1>line is often drawn around generics, but you know, I'm

585
00:35:32.719 --> 00:35:36.320
<v Speaker 1>it seems to me that generics is becoming more like,

586
00:35:37.559 --> 00:35:42.679
<v Speaker 1>you know, public domain like it's it's no longer such

587
00:35:43.159 --> 00:35:47.800
<v Speaker 1>black magic that as it used to be, I think.

588
00:35:48.239 --> 00:35:51.800
<v Speaker 1>But you know, it's an interesting point and I'd love

589
00:35:51.840 --> 00:35:54.239
<v Speaker 1>to hear from our audience about that what they think.

590
00:35:55.440 --> 00:35:57.800
<v Speaker 1>So it used to be that, you know, if you

591
00:35:57.840 --> 00:36:01.880
<v Speaker 1>were an application developer, you could use typescript without having

592
00:36:01.880 --> 00:36:04.920
<v Speaker 1>to understand how generics work. But if you were a

593
00:36:04.960 --> 00:36:08.960
<v Speaker 1>library developer, if you created APIs, you had to understand generics.

594
00:36:09.519 --> 00:36:12.880
<v Speaker 1>It's interesting to think whether or not a tool like

595
00:36:13.480 --> 00:36:20.079
<v Speaker 1>E like ts S SLINT can in a sense make it

596
00:36:20.280 --> 00:36:26.519
<v Speaker 1>easier for people to up their typescript game, like to

597
00:36:26.679 --> 00:36:33.960
<v Speaker 1>be more like library developers and not and being able

598
00:36:34.039 --> 00:36:37.679
<v Speaker 1>to do it without getting too much in the weeds.

599
00:36:38.360 --> 00:36:41.360
<v Speaker 1>Like The alternative, of course, is to use some sort

600
00:36:41.440 --> 00:36:44.840
<v Speaker 1>of chat GPT like tool to write your typeescript for you.

601
00:36:45.559 --> 00:36:50.400
<v Speaker 1>But I'm wondering whether something like eslint ts slint can

602
00:36:50.480 --> 00:36:52.800
<v Speaker 1>also help in that context. What do you think?

603
00:36:53.840 --> 00:36:56.800
<v Speaker 2>Oh, I have so many thoughts here, yes, strong degree.

604
00:36:58.480 --> 00:37:01.760
<v Speaker 2>Another big benefit of interrules can be best practices, not

605
00:37:01.920 --> 00:37:04.039
<v Speaker 2>just the you know, don't use four in on an array,

606
00:37:04.360 --> 00:37:09.239
<v Speaker 2>but things like preferring you know, stylistic consistency and how

607
00:37:09.280 --> 00:37:12.280
<v Speaker 2>you write your types. Types versus interfaces is one of

608
00:37:12.320 --> 00:37:14.960
<v Speaker 2>the big debates in type scripts, where much like the

609
00:37:15.000 --> 00:37:18.119
<v Speaker 2>functions you mentioned earlier, the answer is it doesn't matter,

610
00:37:18.199 --> 00:37:22.239
<v Speaker 2>just be consistent. We do have quite a few rules

611
00:37:22.239 --> 00:37:25.800
<v Speaker 2>though that that flag common bad practices that results from

612
00:37:25.800 --> 00:37:29.000
<v Speaker 2>people not having that full deep understanding and then let

613
00:37:29.039 --> 00:37:31.239
<v Speaker 2>you know, hey, this is why it's wrong. Here are

614
00:37:31.280 --> 00:37:34.679
<v Speaker 2>the option or options to fix it. I think the

615
00:37:34.719 --> 00:37:37.760
<v Speaker 2>two really exciting big ones that I can dive into

616
00:37:37.760 --> 00:37:41.360
<v Speaker 2>if you want are empty types and the golden rule

617
00:37:41.440 --> 00:37:44.920
<v Speaker 2>generics or unnecessary type parameters. Those are two big ones

618
00:37:44.920 --> 00:37:46.280
<v Speaker 2>that a lot of people trip up on that we

619
00:37:46.320 --> 00:37:48.039
<v Speaker 2>now have line rules to help people.

620
00:37:48.039 --> 00:37:50.880
<v Speaker 1>Learn no, please do, please do awesome.

621
00:37:51.320 --> 00:37:55.400
<v Speaker 2>So the empty object or the just curly boys object

622
00:37:55.480 --> 00:38:02.000
<v Speaker 2>type in typeescript that describes any object any value other

623
00:38:02.079 --> 00:38:05.360
<v Speaker 2>than null and undefined. So you can say let value

624
00:38:05.480 --> 00:38:10.039
<v Speaker 2>colon curly brackets. Just empty object equals quote something. The

625
00:38:10.199 --> 00:38:13.119
<v Speaker 2>string is a value in JavaScript and typescript. Therefore it's

626
00:38:13.119 --> 00:38:15.800
<v Speaker 2>assignable to the empty object type. Same with number. The

627
00:38:15.840 --> 00:38:20.519
<v Speaker 2>literal zero is allowed, which is horrifying and confusing to

628
00:38:20.639 --> 00:38:22.960
<v Speaker 2>many people. So we have a win role that says, hey,

629
00:38:23.320 --> 00:38:27.039
<v Speaker 2>don't use the empty object type except in certain situations

630
00:38:27.039 --> 00:38:29.719
<v Speaker 2>where it's reasonable to. Instead, what you probably want is

631
00:38:29.760 --> 00:38:33.320
<v Speaker 2>an insert list of common alternatives, such as unknown or non.

632
00:38:33.440 --> 00:38:37.119
<v Speaker 1>So basically, just to clarify though, in typescript, when you

633
00:38:37.280 --> 00:38:41.440
<v Speaker 1>use empty object as a type, not as a value,

634
00:38:41.719 --> 00:38:46.360
<v Speaker 1>but as a type, it means anything which isn't null

635
00:38:46.639 --> 00:38:47.440
<v Speaker 1>or undefined.

636
00:38:49.119 --> 00:38:51.840
<v Speaker 2>Yes, I might be missing some nuance there, but that's

637
00:38:51.920 --> 00:38:54.760
<v Speaker 2>roughly what it comes out to in production in practice.

638
00:38:56.719 --> 00:39:01.840
<v Speaker 1>Okay. To be honest, I'm you know, I'm struggling to

639
00:39:01.960 --> 00:39:08.679
<v Speaker 1>remember if I've ever used this. Probably not. I prefer

640
00:39:08.800 --> 00:39:13.679
<v Speaker 1>my type to be a bit narrower, fantastic. It's not

641
00:39:13.840 --> 00:39:16.039
<v Speaker 1>much better than in any. Let's put it this way.

642
00:39:17.880 --> 00:39:21.199
<v Speaker 2>Yeah, it's it's like it's this weird kind of halfway

643
00:39:21.280 --> 00:39:24.960
<v Speaker 2>between any and unknown, where a lot of things are

644
00:39:24.960 --> 00:39:27.559
<v Speaker 2>assignable to it, but you can't really do anything with it.

645
00:39:29.119 --> 00:39:32.239
<v Speaker 2>And honestly, some people just happen across the type and

646
00:39:32.280 --> 00:39:34.400
<v Speaker 2>then use it instead of unknown. That's like a really

647
00:39:34.440 --> 00:39:37.239
<v Speaker 2>common slip up there where they should have just used

648
00:39:37.360 --> 00:39:38.159
<v Speaker 2>unknown or any.

649
00:39:39.719 --> 00:39:41.920
<v Speaker 1>Yeah, that's what Jay Larki is saying as well.

650
00:39:43.199 --> 00:39:43.800
<v Speaker 2>Hi j Larki.

651
00:39:45.880 --> 00:39:50.519
<v Speaker 1>Yeah, so you you've got an S T S C slint.

652
00:39:50.800 --> 00:39:53.559
<v Speaker 1>It's a problem. I start saying is lint, and then

653
00:39:53.599 --> 00:39:58.199
<v Speaker 1>I remember to say ts. So you've got a T

654
00:39:58.400 --> 00:40:01.280
<v Speaker 1>SC slint rule? That basic? What forbids it?

655
00:40:02.519 --> 00:40:04.360
<v Speaker 2>We used to have. We used to have a rule

656
00:40:04.400 --> 00:40:08.239
<v Speaker 2>called band types, which banned a list of problematic built

657
00:40:08.239 --> 00:40:11.559
<v Speaker 2>in types such as that and uppercase en number as

658
00:40:11.599 --> 00:40:13.800
<v Speaker 2>opposed to lowercase end numbers same as string and boolean.

659
00:40:14.400 --> 00:40:17.039
<v Speaker 2>We split it up into several rules. So the specific

660
00:40:17.360 --> 00:40:20.360
<v Speaker 2>rule we're talking about now I have to go to

661
00:40:20.400 --> 00:40:22.159
<v Speaker 2>our website to look up the name because I can

662
00:40:22.199 --> 00:40:26.880
<v Speaker 2>never remember is no empty object type that's specifically.

663
00:40:26.239 --> 00:40:26.719
<v Speaker 1>For that one.

664
00:40:27.400 --> 00:40:29.159
<v Speaker 2>And then we have a few other rules for other

665
00:40:29.239 --> 00:40:32.719
<v Speaker 2>problematic built in types, like the uppercase built ins.

666
00:40:32.920 --> 00:40:36.000
<v Speaker 1>So it's basically it's kind of like JavaScript in a sense.

667
00:40:36.039 --> 00:40:40.760
<v Speaker 1>And it's not surprising that once type script adds stuff in,

668
00:40:41.360 --> 00:40:45.320
<v Speaker 1>it's very difficult for them to take it out without

669
00:40:45.519 --> 00:40:50.360
<v Speaker 1>you know, breaking an extinct code basis. But it's easier

670
00:40:50.400 --> 00:40:53.280
<v Speaker 1>for you guys to add rules that forbid it.

671
00:40:54.079 --> 00:40:57.800
<v Speaker 2>Yeah, and arguably in this case they made the right

672
00:40:57.880 --> 00:41:00.840
<v Speaker 2>choice by having it as is. On my right, Let's

673
00:41:00.840 --> 00:41:03.840
<v Speaker 2>say generic function that takes in a t a generic

674
00:41:03.880 --> 00:41:07.440
<v Speaker 2>type that extends any object with length number as a property.

675
00:41:07.880 --> 00:41:11.239
<v Speaker 2>So you could pass in strings arrays some object that

676
00:41:11.280 --> 00:41:14.719
<v Speaker 2>happens to have length on it. That's all fine, intentionally,

677
00:41:14.760 --> 00:41:19.079
<v Speaker 2>that type that squiggly brackets length number type allows a

678
00:41:19.199 --> 00:41:21.000
<v Speaker 2>raise because the rays are objects that happen to have

679
00:41:21.039 --> 00:41:23.840
<v Speaker 2>a length property. It would be weird and confusing if

680
00:41:23.880 --> 00:41:26.719
<v Speaker 2>removing that length property from the object now meant a raise.

681
00:41:26.960 --> 00:41:31.280
<v Speaker 2>Warrant allowed in this case. So there's no real right

682
00:41:31.320 --> 00:41:33.679
<v Speaker 2>answer here. Either you have a weirdness in the type system,

683
00:41:34.039 --> 00:41:35.679
<v Speaker 2>or you have a weirdness in the type system that

684
00:41:35.760 --> 00:41:38.760
<v Speaker 2>also tips people up, sometimes in a different way than before.

685
00:41:40.800 --> 00:41:46.320
<v Speaker 1>Interesting. Okay, So that was one interesting example. What will

686
00:41:46.440 --> 00:41:48.440
<v Speaker 1>you had? The second one was it? What was it?

687
00:41:49.639 --> 00:41:52.199
<v Speaker 2>I respect and appreciate that you remember that I'd forgotten

688
00:41:52.199 --> 00:41:58.000
<v Speaker 2>about it. It's a new rule called no unnecessary type parameters.

689
00:41:58.599 --> 00:42:02.239
<v Speaker 2>It's based on what's called the Golden Rule generics, which

690
00:42:02.280 --> 00:42:04.320
<v Speaker 2>is actually comes from another types good book published by

691
00:42:04.320 --> 00:42:08.159
<v Speaker 2>I Rightiley I'm authored by Dan Vandercamp, who then was

692
00:42:08.360 --> 00:42:10.480
<v Speaker 2>a co author on the PR adding this lunch role.

693
00:42:10.559 --> 00:42:15.599
<v Speaker 2>Shout out Dan Vandercamp. But the idea is people oftentimes

694
00:42:15.599 --> 00:42:19.119
<v Speaker 2>write generic type parameters for functions that don't actually do

695
00:42:19.199 --> 00:42:23.639
<v Speaker 2>anything or actively hide type errors inside. The most common

696
00:42:23.679 --> 00:42:26.960
<v Speaker 2>one is they'll write wrappers around Jason dot stringify or

697
00:42:27.159 --> 00:42:29.400
<v Speaker 2>some kind of parsing thing where they'll add in a

698
00:42:29.440 --> 00:42:32.559
<v Speaker 2>generic type, saying, okay, the result of this function is

699
00:42:32.599 --> 00:42:35.679
<v Speaker 2>whatever generic you pass me. Let's say Jason dot stringify

700
00:42:35.800 --> 00:42:39.360
<v Speaker 2>my type turned Jason dot pars thingy as my type.

701
00:42:40.079 --> 00:42:43.079
<v Speaker 2>The problem is there's nothing in the type system that

702
00:42:43.280 --> 00:42:47.800
<v Speaker 2>actually verifies the value you return from that function is

703
00:42:47.840 --> 00:42:49.599
<v Speaker 2>the type you said it was, and there's nothing at

704
00:42:49.639 --> 00:42:52.800
<v Speaker 2>run time either, So this is unsafe. Someone could pass

705
00:42:52.800 --> 00:42:56.960
<v Speaker 2>a totally invalid string and your type parameter usage made

706
00:42:57.000 --> 00:42:59.400
<v Speaker 2>it look like the return of that function adheres to

707
00:42:59.440 --> 00:43:02.239
<v Speaker 2>that type, even though the totally invalid string gave you

708
00:43:02.280 --> 00:43:05.280
<v Speaker 2>some other garbage. So this is what's called the golden

709
00:43:05.320 --> 00:43:08.519
<v Speaker 2>rule of generics. Only use type parameters if they are

710
00:43:08.599 --> 00:43:11.559
<v Speaker 2>actively useful, if they're actually used to relate two types

711
00:43:11.599 --> 00:43:14.239
<v Speaker 2>later on, or if they're somehow used repeatedly throughout your

712
00:43:14.280 --> 00:43:17.719
<v Speaker 2>type signature. This rule is new, and I'm still not sure.

713
00:43:17.760 --> 00:43:20.039
<v Speaker 2>I'm quite good at explaining it. Did that kind of

714
00:43:20.119 --> 00:43:20.639
<v Speaker 2>make sense?

715
00:43:21.559 --> 00:43:27.000
<v Speaker 1>Yeah, but I'm still thinking about it because but obviously,

716
00:43:27.079 --> 00:43:31.880
<v Speaker 1>if there's a type that you pass in that you

717
00:43:31.920 --> 00:43:36.440
<v Speaker 1>don't actually use, like an unused parameter, that's really easy

718
00:43:36.519 --> 00:43:42.159
<v Speaker 1>to flag, but you are talking about something else.

719
00:43:43.800 --> 00:43:46.400
<v Speaker 2>Yeah. Unused would be that it's declared once and never

720
00:43:46.480 --> 00:43:49.519
<v Speaker 2>used again. Unnecessary in this context would be that it's

721
00:43:49.519 --> 00:43:52.880
<v Speaker 2>declared once and used once, such as in the return.

722
00:43:52.559 --> 00:43:53.039
<v Speaker 1>Of a function.

723
00:43:55.119 --> 00:43:56.920
<v Speaker 2>The point of a type parameter is to relate two

724
00:43:57.000 --> 00:43:59.800
<v Speaker 2>things to say, based on the input. The output is

725
00:43:59.800 --> 00:44:01.320
<v Speaker 2>defend if you're.

726
00:44:03.559 --> 00:44:07.559
<v Speaker 1>Yeah, if if you're just let's put it this way.

727
00:44:07.639 --> 00:44:14.320
<v Speaker 1>If the type can never be inferred, then it's kind

728
00:44:14.400 --> 00:44:23.320
<v Speaker 1>of and it's kind of pointless in a sense. I

729
00:44:23.360 --> 00:44:29.199
<v Speaker 1>need to think about that though, like you might explicitly

730
00:44:29.440 --> 00:44:34.719
<v Speaker 1>pass in a particular type. Let's put it this way.

731
00:44:34.840 --> 00:44:41.159
<v Speaker 1>Whenever I'm whenever I'm using generics, and I find myself

732
00:44:42.079 --> 00:44:48.559
<v Speaker 1>being required to explicitly specify the type rather than having

733
00:44:48.679 --> 00:44:52.920
<v Speaker 1>it being inferred, then it kind of feels like a

734
00:44:52.960 --> 00:44:54.639
<v Speaker 1>cold smell. Yeah.

735
00:44:55.880 --> 00:44:58.519
<v Speaker 2>That's a great point, both on this context and just

736
00:44:58.559 --> 00:45:01.199
<v Speaker 2>the general usability if you should stry sure you're you know, generic,

737
00:45:01.320 --> 00:45:03.800
<v Speaker 2>such that people don't have to do weird explicit things.

738
00:45:05.559 --> 00:45:07.559
<v Speaker 2>The I think a better example that I should have

739
00:45:07.559 --> 00:45:09.119
<v Speaker 2>given to start would be let's say you're writing a

740
00:45:09.159 --> 00:45:11.960
<v Speaker 2>generic log function. Log takes a typecharameter T and a

741
00:45:11.960 --> 00:45:15.079
<v Speaker 2>single value of type T and returns void. So you

742
00:45:15.079 --> 00:45:17.880
<v Speaker 2>could like log parentheses some strength, or log parentheses in

743
00:45:17.920 --> 00:45:20.559
<v Speaker 2>a array or an object or whatnot. There's no point

744
00:45:20.599 --> 00:45:23.360
<v Speaker 2>to that T, to that type parameter. You're not returning it.

745
00:45:23.880 --> 00:45:26.400
<v Speaker 2>You could have said unknown for your values type and

746
00:45:26.639 --> 00:45:29.480
<v Speaker 2>there would be no functional difference in your code or

747
00:45:29.519 --> 00:45:34.519
<v Speaker 2>its types. So that T function log t parentheses value T.

748
00:45:35.000 --> 00:45:37.480
<v Speaker 2>It's not unused because the value is still type T,

749
00:45:38.119 --> 00:45:40.440
<v Speaker 2>but it's unnecessary. It doesn't change the return type. It

750
00:45:40.480 --> 00:45:43.320
<v Speaker 2>doesn't relate anything. Does that make sense.

751
00:45:43.800 --> 00:45:49.360
<v Speaker 1>Yes. Here's the thing though, because in in other programming

752
00:45:49.440 --> 00:45:57.119
<v Speaker 1>languages statically typed programming languages where where the type system

753
00:45:57.239 --> 00:46:02.800
<v Speaker 1>is part of the actual compile languages like C plus

754
00:46:02.800 --> 00:46:08.079
<v Speaker 1>plus or Java or C sharp, then these case it

755
00:46:08.280 --> 00:46:13.360
<v Speaker 1>is useful because that's for two reasons. First of all,

756
00:46:13.480 --> 00:46:19.079
<v Speaker 1>that's how they make themselves more like JavaScript. And the

757
00:46:19.199 --> 00:46:23.360
<v Speaker 1>second thing is that it allows them to have different

758
00:46:23.400 --> 00:46:29.320
<v Speaker 1>implementations thanks to functional overloading. So they can have like

759
00:46:29.679 --> 00:46:33.719
<v Speaker 1>a generic parameter like you said, t, and the type

760
00:46:33.760 --> 00:46:37.119
<v Speaker 1>goes in, but then they have a different implementation if

761
00:46:37.159 --> 00:46:39.400
<v Speaker 1>t is a string or t is a number, or

762
00:46:39.519 --> 00:46:45.400
<v Speaker 1>t is an error or whatever. In JavaScript, those things

763
00:46:45.679 --> 00:46:51.280
<v Speaker 1>are meaningless. First of all, you don't need to create

764
00:46:51.360 --> 00:46:55.960
<v Speaker 1>dynamic on type of JavaScript because it is. And with Typescript,

765
00:46:56.079 --> 00:46:58.440
<v Speaker 1>like you said, it's just any and you've got it.

766
00:46:59.119 --> 00:47:02.119
<v Speaker 1>You've got the same dynamic capabilities that you had before,

767
00:47:02.760 --> 00:47:10.800
<v Speaker 1>and you don't really have implementation overloading. So both of

768
00:47:10.880 --> 00:47:13.960
<v Speaker 1>those benefits that you have in other programming languages are

769
00:47:14.039 --> 00:47:19.159
<v Speaker 1>kind of meaningless in the context of Typescript. But like

770
00:47:19.239 --> 00:47:23.039
<v Speaker 1>you said, it's too legal. So yeah, it's a place

771
00:47:23.039 --> 00:47:25.360
<v Speaker 1>where the linter can kind of step in. But yeah,

772
00:47:25.360 --> 00:47:27.000
<v Speaker 1>I think that's a really good example.

773
00:47:28.000 --> 00:47:31.639
<v Speaker 2>Thanks what we've seen when people adopt the rule in

774
00:47:31.719 --> 00:47:34.960
<v Speaker 2>larger code bases is still have the occasional little thing

775
00:47:35.039 --> 00:47:37.679
<v Speaker 2>like the parts of the log function. It'll catch, you know,

776
00:47:37.719 --> 00:47:40.039
<v Speaker 2>save them a few characters or some clarity here and there.

777
00:47:40.639 --> 00:47:43.440
<v Speaker 2>But then deep in their utilities library, there will be

778
00:47:43.480 --> 00:47:47.159
<v Speaker 2>this long trail of deleted code where there's this chain

779
00:47:47.199 --> 00:47:49.639
<v Speaker 2>of whatever five things deeper. At the very bottom of

780
00:47:49.639 --> 00:47:52.760
<v Speaker 2>the chain, there's an unnecessary type parameter. And because of

781
00:47:52.760 --> 00:47:56.280
<v Speaker 2>that unnecessary type parameter existing, they previously had all sorts

782
00:47:56.320 --> 00:47:59.239
<v Speaker 2>of places passing type parameters through piping it down to

783
00:47:59.280 --> 00:48:03.199
<v Speaker 2>get there. And once we remove the unnecessary typearameter, we

784
00:48:03.199 --> 00:48:06.559
<v Speaker 2>could delete a dozen different type parameters in their code,

785
00:48:06.559 --> 00:48:10.320
<v Speaker 2>making it all simpler automatically or semi automatically with the rule,

786
00:48:10.840 --> 00:48:14.480
<v Speaker 2>and it doesn't actually harm or remove anything that was useful.

787
00:48:15.159 --> 00:48:16.960
<v Speaker 2>So this rule, I think is going to be more

788
00:48:16.960 --> 00:48:19.039
<v Speaker 2>and more exciting to people as time goes on and

789
00:48:19.079 --> 00:48:20.519
<v Speaker 2>we advertise it and learn about it more.

790
00:48:21.000 --> 00:48:23.239
<v Speaker 1>Yeah, I've been thinking about another way to phrase it.

791
00:48:23.280 --> 00:48:25.639
<v Speaker 1>At the end of the day, we have to remember

792
00:48:25.760 --> 00:48:30.599
<v Speaker 1>that in typescript, ultimately all the types get stripped away.

793
00:48:31.159 --> 00:48:34.079
<v Speaker 1>Types that you put in have zero impact on the

794
00:48:34.079 --> 00:48:38.119
<v Speaker 1>code that gets generated. They're they're totally they're deleted in

795
00:48:38.159 --> 00:48:40.239
<v Speaker 1>this context by the way. You know, it could have

796
00:48:40.320 --> 00:48:43.039
<v Speaker 1>been a pick. But it's interesting, what then, what Node

797
00:48:43.079 --> 00:48:46.360
<v Speaker 1>is now introducing with that ability to like with their

798
00:48:46.440 --> 00:48:50.400
<v Speaker 1>support for typescript, which which literally just strips out all

799
00:48:50.440 --> 00:48:57.320
<v Speaker 1>the types. And therefore, if if the types have zero

800
00:48:57.440 --> 00:49:03.480
<v Speaker 1>impact on run time, they're value is that they assist

801
00:49:03.559 --> 00:49:07.800
<v Speaker 1>you during the development time. But if they don't do that,

802
00:49:09.320 --> 00:49:10.679
<v Speaker 1>then they're pointless.

803
00:49:11.360 --> 00:49:15.760
<v Speaker 2>Yes, yeah, well, I mean I would say there is

804
00:49:15.800 --> 00:49:18.159
<v Speaker 2>one point to them, which is some people feel very

805
00:49:18.199 --> 00:49:21.360
<v Speaker 2>good when they put types in that are very complicated,

806
00:49:21.360 --> 00:49:23.960
<v Speaker 2>and that honestly is a reason for a lot of

807
00:49:24.000 --> 00:49:27.599
<v Speaker 2>the really complex types out there. And you know, sometimes

808
00:49:27.599 --> 00:49:29.960
<v Speaker 2>it's worth it, sometimes it's not. I think a lot

809
00:49:29.960 --> 00:49:33.599
<v Speaker 2>of developers go through a lot of growing pains adding types,

810
00:49:33.639 --> 00:49:35.880
<v Speaker 2>getting excited about it, and then realizing, oh no, not

811
00:49:35.960 --> 00:49:38.440
<v Speaker 2>all this was useful before they find that beautiful zen

812
00:49:38.480 --> 00:49:40.639
<v Speaker 2>of only adding them where it's it's actually functional.

813
00:49:41.280 --> 00:49:44.320
<v Speaker 1>Let's put it this way. You can have sophisticated types

814
00:49:44.320 --> 00:49:48.599
<v Speaker 1>in your typescript if the end result is that the

815
00:49:48.679 --> 00:49:52.480
<v Speaker 1>actual user of the API can avoid specifying any types.

816
00:49:53.280 --> 00:49:58.199
<v Speaker 1>That's the true beauty of sophisticated types in typescript. Yeah,

817
00:49:58.800 --> 00:50:02.239
<v Speaker 1>if you're the user of your API needs to specify

818
00:50:02.480 --> 00:50:07.320
<v Speaker 1>types like in generic types, then then my argument is

819
00:50:07.360 --> 00:50:09.960
<v Speaker 1>that it's a code smart you kind of failed.

820
00:50:10.840 --> 00:50:14.079
<v Speaker 2>Yeah, it'd be cool to see if someone could enforce

821
00:50:14.119 --> 00:50:16.199
<v Speaker 2>that with a Linch rule. You know, I don't know

822
00:50:16.199 --> 00:50:19.079
<v Speaker 2>how that would work, but there whatever is the best practice.

823
00:50:19.119 --> 00:50:21.079
<v Speaker 2>My instinct is to try to and codify it, even

824
00:50:21.159 --> 00:50:23.440
<v Speaker 2>if it's not possible. You know, there are some best

825
00:50:23.440 --> 00:50:25.800
<v Speaker 2>practices that are not really code capable.

826
00:50:26.639 --> 00:50:29.079
<v Speaker 1>So, unless you've got more things that you want to

827
00:50:29.079 --> 00:50:32.119
<v Speaker 1>say about typescript and types and linting, I think we

828
00:50:32.239 --> 00:50:34.679
<v Speaker 1>want to talk a little bit about squiggle COMF, don't we.

829
00:50:35.320 --> 00:50:38.599
<v Speaker 2>Yeah, let's do it. Squiggle COMF Conference for Excellent Web

830
00:50:38.639 --> 00:50:41.760
<v Speaker 2>Dev twoing, Sparkle Emoji.

831
00:50:44.360 --> 00:50:46.679
<v Speaker 1>It's it's one of those times where you actually want

832
00:50:46.719 --> 00:50:49.400
<v Speaker 1>those automatic reactions that you get on the Mac where

833
00:50:49.440 --> 00:50:52.119
<v Speaker 1>you do like something like that or balloons pop up.

834
00:50:52.159 --> 00:50:54.360
<v Speaker 1>I can never get it to work when I wanted

835
00:50:54.400 --> 00:50:54.800
<v Speaker 1>to work.

836
00:50:55.480 --> 00:50:57.599
<v Speaker 2>Yeah, I think I disabled them at the OS level

837
00:50:57.639 --> 00:50:59.679
<v Speaker 2>and then completely forgot about it. And I always get

838
00:50:59.719 --> 00:51:00.400
<v Speaker 2>this point.

839
00:51:03.159 --> 00:51:06.119
<v Speaker 1>So squiggle like I think you might have said that

840
00:51:06.199 --> 00:51:09.559
<v Speaker 1>it's because of the squiggle lines that we get from

841
00:51:10.000 --> 00:51:15.480
<v Speaker 1>developer tools that you know, want to highlight certain things

842
00:51:15.559 --> 00:51:18.239
<v Speaker 1>or draw attention to certain things, so they put a

843
00:51:18.280 --> 00:51:22.320
<v Speaker 1>squiggly line under it. I actually think that it came

844
00:51:22.519 --> 00:51:25.480
<v Speaker 1>it was we had it first in things like word

845
00:51:25.599 --> 00:51:28.920
<v Speaker 1>or office before it actually made its way to developer tooling.

846
00:51:29.679 --> 00:51:33.719
<v Speaker 2>I think, yes, Like I also think that, but I'm

847
00:51:33.719 --> 00:51:34.599
<v Speaker 2>not sure myself.

848
00:51:35.119 --> 00:51:39.159
<v Speaker 1>Yeah, like spelling errors and then grammar errors and stuff

849
00:51:39.159 --> 00:51:43.960
<v Speaker 1>like that and anyway, so that's the Moulti's that's where

850
00:51:44.000 --> 00:51:48.199
<v Speaker 1>the name comes from. Right, It's because the topic of

851
00:51:48.239 --> 00:51:51.239
<v Speaker 1>the conference is developer tooling, right.

852
00:51:52.000 --> 00:51:55.480
<v Speaker 2>Yes, we're talking about I mean the catphrase is excellent

853
00:51:55.480 --> 00:51:57.960
<v Speaker 2>web debt tooling. But in general, yeah, it's anything that you,

854
00:51:58.000 --> 00:52:03.239
<v Speaker 2>as a person writing web such as without limited to JavaScript,

855
00:52:03.280 --> 00:52:06.519
<v Speaker 2>typescript rust might want to learn about. So everything from

856
00:52:06.559 --> 00:52:09.760
<v Speaker 2>typescript at scale at say how Bloomberg does things to

857
00:52:10.280 --> 00:52:12.599
<v Speaker 2>the person who may know my Zisha's talking about the

858
00:52:12.679 --> 00:52:14.920
<v Speaker 2>journey of that open source tooling and the lessons learned.

859
00:52:15.559 --> 00:52:17.599
<v Speaker 1>So first of all, when and where.

860
00:52:18.280 --> 00:52:21.559
<v Speaker 2>October third for talks and then morning workshops October fourth,

861
00:52:21.559 --> 00:52:24.440
<v Speaker 2>that's a Thursday, twenty twenty four, so at time of

862
00:52:24.519 --> 00:52:25.719
<v Speaker 2>recording in the month and a half.

863
00:52:27.239 --> 00:52:32.079
<v Speaker 1>And it's like, is it online, is it physical? It is?

864
00:52:32.960 --> 00:52:37.239
<v Speaker 2>It's physical. Will put the talks up for free videos

865
00:52:37.280 --> 00:52:41.159
<v Speaker 2>after the conference. But the location, the venue is the

866
00:52:41.199 --> 00:52:44.880
<v Speaker 2>attached theater at the Boston New England Aquarium, so we

867
00:52:44.920 --> 00:52:46.880
<v Speaker 2>have got a bit of a fish theme. I will say,

868
00:52:46.880 --> 00:52:50.320
<v Speaker 2>there's an excellent penguin exhibit next door at the aquarium itself,

869
00:52:50.519 --> 00:52:53.159
<v Speaker 2>and we're on the pier, you know, like on the water,

870
00:52:53.599 --> 00:52:55.039
<v Speaker 2>so I think it's going to be a lot of fun.

871
00:52:55.280 --> 00:52:57.360
<v Speaker 2>Lunch is going to be at Feneral Hall that like

872
00:52:57.440 --> 00:53:00.119
<v Speaker 2>really nice too of her Steam marketplace right next to

873
00:53:00.159 --> 00:53:02.440
<v Speaker 2>the venue. And because it's a Thursday during the week,

874
00:53:02.960 --> 00:53:04.440
<v Speaker 2>you have to be not so crowded.

875
00:53:05.360 --> 00:53:08.360
<v Speaker 1>And it's so it's one day for the talks and

876
00:53:08.480 --> 00:53:11.119
<v Speaker 1>the second day for workshops. That's the format.

877
00:53:11.840 --> 00:53:15.519
<v Speaker 2>Yeah, morning workshops. We're trying to keep it a little smaller.

878
00:53:15.639 --> 00:53:17.559
<v Speaker 2>I think our deal would have been two days of

879
00:53:17.599 --> 00:53:19.840
<v Speaker 2>talks with some workshops, but it's our first time and

880
00:53:19.880 --> 00:53:21.320
<v Speaker 2>we wanted to make sure we could get it right

881
00:53:21.320 --> 00:53:22.239
<v Speaker 2>before really going thick.

882
00:53:22.840 --> 00:53:24.360
<v Speaker 1>Can people still get tickets?

883
00:53:25.320 --> 00:53:27.280
<v Speaker 2>They can, and I would encourage them to do so.

884
00:53:27.760 --> 00:53:30.400
<v Speaker 2>Fun fact that a lot of conference organizers have told

885
00:53:30.480 --> 00:53:33.519
<v Speaker 2>us we've seen also that most people wait until the

886
00:53:33.559 --> 00:53:36.400
<v Speaker 2>last minute to buy tickets, which is horrible for two things.

887
00:53:36.440 --> 00:53:38.719
<v Speaker 2>One it's well, you never know, maybe they'll sell out.

888
00:53:38.960 --> 00:53:41.079
<v Speaker 2>Two it's very scary for US conference organizers.

889
00:53:41.199 --> 00:53:43.840
<v Speaker 1>Yeah to see.

890
00:53:44.000 --> 00:53:46.159
<v Speaker 2>Yeah, so please buy tickets. Discoidal the com We got

891
00:53:46.159 --> 00:53:49.559
<v Speaker 2>both discount options on the website. We're happy to work

892
00:53:49.559 --> 00:53:51.639
<v Speaker 2>with you if you need help getting it. We also

893
00:53:51.639 --> 00:53:54.440
<v Speaker 2>have volunteering options if you can't afford a ticket.

894
00:53:54.719 --> 00:53:57.440
<v Speaker 1>So let us know. So how many talks are you

895
00:53:57.480 --> 00:54:00.239
<v Speaker 1>planning to have me?

896
00:54:00.320 --> 00:54:05.639
<v Speaker 2>Get that schedule up right now? Currently our plan is

897
00:54:06.920 --> 00:54:09.119
<v Speaker 2>nine full length talks and five lightning talks.

898
00:54:09.800 --> 00:54:14.199
<v Speaker 1>Oh cool, that's really nice. Any any ones that you

899
00:54:14.400 --> 00:54:17.360
<v Speaker 1>especially want to draw attention to, you.

900
00:54:17.320 --> 00:54:22.679
<v Speaker 2>Know, I fear I fear responding to that to assertively,

901
00:54:22.719 --> 00:54:27.000
<v Speaker 2>as I don't want to upset any speakers. But I'll

902
00:54:27.000 --> 00:54:30.480
<v Speaker 2>say our launch speakers, as an arbitrary delineation are Dan

903
00:54:30.559 --> 00:54:35.239
<v Speaker 2>Vandercamp whoever. Earlier he's talking about ASTs and source code

904
00:54:35.280 --> 00:54:39.159
<v Speaker 2>and text like how source files actually work. Roselle Scarlett

905
00:54:39.199 --> 00:54:42.039
<v Speaker 2>over at TVD talking about documentation as part of your

906
00:54:42.079 --> 00:54:46.519
<v Speaker 2>tooling and processes, and Tishy and Cinacova dragon me are

907
00:54:46.559 --> 00:54:48.880
<v Speaker 2>over at Bloomberg talking about Typescript at scale and the

908
00:54:48.880 --> 00:54:52.360
<v Speaker 2>things they do to manage a gigantic amount of Typescript code.

909
00:54:52.639 --> 00:54:55.360
<v Speaker 2>Also fun fact, they contributed some great features.

910
00:54:55.039 --> 00:54:59.280
<v Speaker 1>Up to Typescript. Yeah, they're doing some really interesting stuff

911
00:54:59.280 --> 00:55:06.880
<v Speaker 1>over at Bloomberg, that's for sure, So that is really cool. Also,

912
00:55:06.960 --> 00:55:11.880
<v Speaker 1>Boston is obviously a beautiful city. Yeah, and October that

913
00:55:12.000 --> 00:55:15.679
<v Speaker 1>means like fall, so it's like the trees will be

914
00:55:15.719 --> 00:55:16.719
<v Speaker 1>all red and stuff.

915
00:55:18.360 --> 00:55:21.639
<v Speaker 2>I hope, So, to be honest, I'd originally really wanted

916
00:55:21.639 --> 00:55:24.400
<v Speaker 2>a Halloween conference, as that is my favorite holiday. By far,

917
00:55:24.719 --> 00:55:27.800
<v Speaker 2>I was told rather bluntly that parents do not want

918
00:55:27.920 --> 00:55:30.559
<v Speaker 2>a conference instead of trig or treating. It's not something

919
00:55:30.559 --> 00:55:32.599
<v Speaker 2>that they can support. So yeah, I think we'll have

920
00:55:32.599 --> 00:55:34.480
<v Speaker 2>a good fall thing going on. You're right. It's a

921
00:55:34.480 --> 00:55:37.800
<v Speaker 2>beautiful city, beautiful area. And one of the things we

922
00:55:37.840 --> 00:55:41.039
<v Speaker 2>intentionally did was have it on a Thursday with workshops

923
00:55:41.079 --> 00:55:43.000
<v Speaker 2>next morning so that speakers can go with us on

924
00:55:43.039 --> 00:55:45.480
<v Speaker 2>a ductor after and then we're going to try to

925
00:55:45.519 --> 00:55:47.880
<v Speaker 2>get some kind of partnership with the aquarium to tell

926
00:55:47.920 --> 00:55:48.639
<v Speaker 2>people explore that.

927
00:55:48.719 --> 00:55:51.480
<v Speaker 1>Are you also still looking for sponsors and stuff like that.

928
00:55:53.159 --> 00:55:56.280
<v Speaker 2>If someone wants to sponsor us, they certainly can reach out.

929
00:55:56.320 --> 00:55:58.159
<v Speaker 2>It's on the website. But we've got a good set

930
00:55:58.199 --> 00:56:01.440
<v Speaker 2>of sponsors so far. I can't now them all, but

931
00:56:02.400 --> 00:56:05.079
<v Speaker 2>we're pretty happy with it. Yeah. No, if if you

932
00:56:05.119 --> 00:56:06.880
<v Speaker 2>want to send us money, we're happy to work with you.

933
00:56:08.599 --> 00:56:13.400
<v Speaker 1>That's really cool. It's it's really nice to see a

934
00:56:13.440 --> 00:56:18.159
<v Speaker 1>new conference appearing. It's ever it seems like ever since COVID,

935
00:56:18.840 --> 00:56:21.719
<v Speaker 1>you know, conferencing has been in a bit of a rut.

936
00:56:22.760 --> 00:56:25.159
<v Speaker 1>Like we all hope that it would make a total

937
00:56:25.199 --> 00:56:29.400
<v Speaker 1>comeback after COVID, but it seems to be fairly challenging,

938
00:56:30.320 --> 00:56:38.039
<v Speaker 1>and I'm even seeing certain conferences like suspend operation and

939
00:56:38.079 --> 00:56:41.079
<v Speaker 1>so seeing a new one come along, especially about such

940
00:56:41.519 --> 00:56:48.280
<v Speaker 1>an important and exciting and interesting topic, seems like a

941
00:56:48.360 --> 00:56:51.639
<v Speaker 1>great thing. And hopefully I can get my own employer

942
00:56:51.719 --> 00:56:55.039
<v Speaker 1>to sponsor let's say next year or something, because we

943
00:56:55.079 --> 00:56:59.559
<v Speaker 1>are also into developer stuff. You know, some of our

944
00:56:59.559 --> 00:57:01.719
<v Speaker 1>stuff is and ready yet, so we're not ready to

945
00:57:01.760 --> 00:57:04.760
<v Speaker 1>showcase it yet. Hopefully next year we will be. So

946
00:57:05.280 --> 00:57:08.079
<v Speaker 1>we will say we will see. I'd love to talk

947
00:57:08.119 --> 00:57:14.239
<v Speaker 1>at the confidence like that. Anything else before I put

948
00:57:14.320 --> 00:57:17.239
<v Speaker 1>us in two picks.

949
00:57:19.079 --> 00:57:21.800
<v Speaker 2>No, I appreciate actually, yeah, one thing. I appreciate you

950
00:57:21.880 --> 00:57:24.599
<v Speaker 2>giving me the opportunity to like scriggle comp The reason

951
00:57:24.639 --> 00:57:27.440
<v Speaker 2>why we chose to have it this year, you know,

952
00:57:27.480 --> 00:57:30.400
<v Speaker 2>post COVID, neither neither of us two organizers actually live

953
00:57:30.440 --> 00:57:33.280
<v Speaker 2>in Boston. I'm moving into August this year. Is we

954
00:57:33.320 --> 00:57:37.119
<v Speaker 2>agree it there's a lot of benefit from conferences. You

955
00:57:37.159 --> 00:57:38.719
<v Speaker 2>don't have to go to a conference, you know, to

956
00:57:38.880 --> 00:57:41.519
<v Speaker 2>be whatever a great dev infortunate, et cetera. But there's

957
00:57:41.519 --> 00:57:43.159
<v Speaker 2>a lot of benefit from the Hallway track, from just

958
00:57:43.199 --> 00:57:47.280
<v Speaker 2>chatting with people. Oh yeah, for giving cocks. So we're

959
00:57:47.320 --> 00:57:49.519
<v Speaker 2>really excited to be able to provide that, you know,

960
00:57:49.639 --> 00:57:53.280
<v Speaker 2>to people, both generally in Boston and generally in web

961
00:57:53.360 --> 00:57:55.920
<v Speaker 2>dep tooling, which doesn't have a lot of dedicated conferences

962
00:57:55.920 --> 00:57:56.800
<v Speaker 2>for it specifically.

963
00:57:57.960 --> 00:58:03.239
<v Speaker 1>Yeah, it seems like it should mean like developers are

964
00:58:03.320 --> 00:58:07.719
<v Speaker 1>so into tooling. It feels like we are, like we

965
00:58:07.840 --> 00:58:12.400
<v Speaker 1>definitely should have a conference about tooling. So it's it's

966
00:58:12.440 --> 00:58:13.800
<v Speaker 1>great that finally we do.

967
00:58:14.800 --> 00:58:15.559
<v Speaker 2>Yeah.

968
00:58:15.639 --> 00:58:18.119
<v Speaker 1>But by the way, so this is I think, is

969
00:58:18.159 --> 00:58:20.280
<v Speaker 1>it your first time as a conference organizer.

970
00:58:21.400 --> 00:58:25.360
<v Speaker 2>Yeah, I've helped out with conferences before, like websites are

971
00:58:25.400 --> 00:58:28.719
<v Speaker 2>helping with promotions, but nothing quite so in the weeds

972
00:58:28.559 --> 00:58:31.119
<v Speaker 2>as being an actual organizer. And I gotta say it's

973
00:58:31.119 --> 00:58:32.960
<v Speaker 2>a lot of work. They were right, all the people

974
00:58:32.960 --> 00:58:34.199
<v Speaker 2>who told us it was a lot of work.

975
00:58:35.559 --> 00:58:41.840
<v Speaker 1>Yeah, for sure, h happily I've I've yet to to

976
00:58:41.840 --> 00:58:45.920
<v Speaker 1>to do it. I've I've spoken at conferences as have you,

977
00:58:46.440 --> 00:58:54.679
<v Speaker 1>but organizing I don't know. I'd rather let somebody else

978
00:58:54.719 --> 00:59:00.760
<v Speaker 1>do it. Okay, Then before we go going to picks,

979
00:59:00.800 --> 00:59:04.039
<v Speaker 1>if people want to, you know, connect with you, be

980
00:59:04.159 --> 00:59:10.079
<v Speaker 1>it about TSC S, flint, about linting in general, about

981
00:59:10.320 --> 00:59:15.000
<v Speaker 1>open source, about squiggle conf what's the best way to

982
00:59:15.079 --> 00:59:15.760
<v Speaker 1>reach out to you?

983
00:59:17.039 --> 00:59:20.760
<v Speaker 2>Love the question for me. Joshua K. Goldberg on virtually

984
00:59:20.800 --> 00:59:25.559
<v Speaker 2>every platform dot Com, GitHub, Twitch, YouTube, Twitter, Blue sky

985
00:59:25.719 --> 00:59:30.840
<v Speaker 2>Mastered on Joshua K. Goldberg for my projects. Each of

986
00:59:30.880 --> 00:59:33.280
<v Speaker 2>them have their own website. So tych it b a slint,

987
00:59:33.519 --> 00:59:37.599
<v Speaker 2>be a slint moca. Yeslint time, but on the committer team.

988
00:59:37.639 --> 00:59:39.719
<v Speaker 2>So please don't come at me yelling about flat configure

989
00:59:39.760 --> 00:59:42.039
<v Speaker 2>or whatever pain you're going through. That's the team at

990
00:59:42.039 --> 00:59:44.800
<v Speaker 2>holl but for all of the projects, we're always happy

991
00:59:44.840 --> 00:59:46.280
<v Speaker 2>to hear your feedback and work with you.

992
00:59:47.360 --> 00:59:52.840
<v Speaker 1>Cool. Okay, then I'll pull us now into picks. To

993
00:59:52.920 --> 00:59:56.519
<v Speaker 1>be honest, if I don't have so much in the

994
00:59:56.559 --> 00:59:59.079
<v Speaker 1>context of picks, I actually, you know what, I actually

995
00:59:59.079 --> 01:00:04.199
<v Speaker 1>have two things. So my first pick is I might

996
01:00:04.239 --> 01:00:10.800
<v Speaker 1>have mentioned this before. I recently started tweeting out my

997
01:00:11.039 --> 01:00:17.960
<v Speaker 1>favorite stand alone fantasy novels. So one thing about fantasy

998
01:00:18.079 --> 01:00:22.719
<v Speaker 1>books is that fantasy authors really love to write a

999
01:00:22.760 --> 01:00:31.199
<v Speaker 1>series of books, usually trilogies, but not necessarily, and I

1000
01:00:31.280 --> 01:00:34.840
<v Speaker 1>sometimes want to just go for a single standalone books,

1001
01:00:34.840 --> 01:00:38.440
<v Speaker 1>something that you know, you can read on its own,

1002
01:00:38.559 --> 01:00:41.119
<v Speaker 1>finish it, and then kind of move on with your life.

1003
01:00:41.840 --> 01:00:47.760
<v Speaker 1>And that's especially the special benefit is that you don't

1004
01:00:47.760 --> 01:00:50.199
<v Speaker 1>have to worry about when the next book is ever

1005
01:00:50.320 --> 01:00:55.079
<v Speaker 1>going to come out, you know cough cough. You know

1006
01:00:56.360 --> 01:01:01.280
<v Speaker 1>uh George R. R. Martin and uh you know Game

1007
01:01:01.320 --> 01:01:06.519
<v Speaker 1>of Thrones and Tales of Ice and Fire, which seems

1008
01:01:06.639 --> 01:01:09.119
<v Speaker 1>to be to be honest, if he ever does come

1009
01:01:09.159 --> 01:01:11.920
<v Speaker 1>out with with the next book, which is I'm highly

1010
01:01:12.000 --> 01:01:16.119
<v Speaker 1>doubtful of, I probably won't read it now. It's it's

1011
01:01:16.239 --> 01:01:21.519
<v Speaker 1>the time. The time is coming gone anyway, So I

1012
01:01:21.519 --> 01:01:25.920
<v Speaker 1>I tweeted out the list. I actually have a couple

1013
01:01:25.960 --> 01:01:27.880
<v Speaker 1>of more books that I have to tweet out in

1014
01:01:27.960 --> 01:01:31.599
<v Speaker 1>this context, so you know, let me see if I

1015
01:01:31.639 --> 01:01:37.880
<v Speaker 1>can remember some of the examples that I gave. One

1016
01:01:37.920 --> 01:01:41.400
<v Speaker 1>of them would be Neil Gaiman's Never Where Have You

1017
01:01:41.480 --> 01:01:43.159
<v Speaker 1>Read It? No?

1018
01:01:43.280 --> 01:01:44.400
<v Speaker 2>But I know the author name.

1019
01:01:45.360 --> 01:01:52.519
<v Speaker 1>Yes, and uh. Another one is uh Zilasni's Lord of Light.

1020
01:01:53.360 --> 01:01:59.000
<v Speaker 1>Roger Zilasni was a very famous UH science fiction and

1021
01:01:59.079 --> 01:02:04.719
<v Speaker 1>fantasy author, very prolific, now deceased, so he wrote some

1022
01:02:04.920 --> 01:02:08.800
<v Speaker 1>very famous series of books. But I have a very

1023
01:02:09.320 --> 01:02:12.119
<v Speaker 1>special spot for the Lord of lightbook, which is a

1024
01:02:12.159 --> 01:02:19.000
<v Speaker 1>standalone book. And and you know, I'll basically i'll i'll

1025
01:02:19.039 --> 01:02:22.960
<v Speaker 1>post the link to that Twitter thread that I keep

1026
01:02:23.000 --> 01:02:26.360
<v Speaker 1>adding to in the show notes, so that would be

1027
01:02:26.519 --> 01:02:29.599
<v Speaker 1>my first pick. And by the way, if people have

1028
01:02:29.960 --> 01:02:33.280
<v Speaker 1>their own favorite books that they want to suggest, you know,

1029
01:02:33.960 --> 01:02:36.519
<v Speaker 1>feel free to send them to me. I love a

1030
01:02:36.599 --> 01:02:41.320
<v Speaker 1>good I love suggestions of good books. Another one, by

1031
01:02:41.360 --> 01:02:46.039
<v Speaker 1>the way, you know what, I'll give you another one

1032
01:02:46.159 --> 01:02:51.840
<v Speaker 1>or two. There's a Weave World by Clive Barker. Have

1033
01:02:51.960 --> 01:02:53.159
<v Speaker 1>you heard of Clive Barker?

1034
01:02:55.559 --> 01:02:56.599
<v Speaker 2>Vaguely familiar name.

1035
01:02:57.079 --> 01:03:01.840
<v Speaker 1>Yeah, he actually is more famous for writing horror related stuff,

1036
01:03:02.039 --> 01:03:07.400
<v Speaker 1>like the Pinhead character if You is from one of

1037
01:03:07.440 --> 01:03:13.840
<v Speaker 1>his books. And so he wrote this crazy book called

1038
01:03:13.920 --> 01:03:18.880
<v Speaker 1>weave World, which is a crazy combination of It's like

1039
01:03:19.039 --> 01:03:24.039
<v Speaker 1>part fantasy, part horror. It's very weird and it's very

1040
01:03:24.079 --> 01:03:29.239
<v Speaker 1>wonderful in my opinion. So that's another great standalone book.

1041
01:03:30.360 --> 01:03:40.440
<v Speaker 1>And another one would be Kigana by Guy Granville k.

1042
01:03:40.800 --> 01:03:47.440
<v Speaker 1>He's the guy that worked with Christopher Tolkien on releasing

1043
01:03:47.480 --> 01:03:53.519
<v Speaker 1>the Silmarillion. They basically went through Tolkien's notes and writings

1044
01:03:53.559 --> 01:03:56.639
<v Speaker 1>and and basically managed to make a book out of it.

1045
01:03:58.000 --> 01:04:02.599
<v Speaker 1>So he wrote some book on his own and his

1046
01:04:02.719 --> 01:04:05.199
<v Speaker 1>stand alone book is called tigan and it's also a

1047
01:04:05.239 --> 01:04:08.480
<v Speaker 1>great book. I think I actually picked that one. You

1048
01:04:08.519 --> 01:04:11.440
<v Speaker 1>our in the last episode that I participated on, sort

1049
01:04:11.880 --> 01:04:17.039
<v Speaker 1>mentioning it again the second. My second pick is I've

1050
01:04:17.039 --> 01:04:19.599
<v Speaker 1>been kind of down. This is this is not a

1051
01:04:19.639 --> 01:04:23.119
<v Speaker 1>good time for me. I mean, on a personal level,

1052
01:04:23.199 --> 01:04:25.599
<v Speaker 1>things are fine. I've got a new job that I'm

1053
01:04:25.639 --> 01:04:28.840
<v Speaker 1>happy with, Everybody in my family is healthy and whatnot.

1054
01:04:29.559 --> 01:04:33.719
<v Speaker 1>But my my mother in law passed away, and in

1055
01:04:33.840 --> 01:04:37.440
<v Speaker 1>Israel in general, it's a it's a bad time, and

1056
01:04:37.800 --> 01:04:42.679
<v Speaker 1>uh yeah, so I've been kind of down and I'm,

1057
01:04:42.760 --> 01:04:44.920
<v Speaker 1>you know, looking for things that can pick me up.

1058
01:04:45.079 --> 01:04:51.400
<v Speaker 1>And my wife and I happened on the Despicable Me

1059
01:04:51.599 --> 01:04:55.760
<v Speaker 1>Sash Minion movies and we kind of rewatched several of

1060
01:04:55.800 --> 01:05:00.519
<v Speaker 1>them and they're so great. They're so lighthearted, funny, pleasant

1061
01:05:00.519 --> 01:05:05.239
<v Speaker 1>to watch. The Minion characters are obviously wonderful, but not

1062
01:05:05.440 --> 01:05:09.840
<v Speaker 1>just the group character is great as well. So yeah,

1063
01:05:09.880 --> 01:05:12.360
<v Speaker 1>if you're looking for pick me up, I would definitely

1064
01:05:12.400 --> 01:05:17.559
<v Speaker 1>recommend these movies. And those would be my picks for today.

1065
01:05:17.639 --> 01:05:19.039
<v Speaker 1>Do you have any picks for us?

1066
01:05:19.119 --> 01:05:25.360
<v Speaker 2>Josh, I do plus one ted having some nice, lighthearted,

1067
01:05:25.920 --> 01:05:31.119
<v Speaker 2>high quality lightheartedness in today's world. I've been wanting to

1068
01:05:31.159 --> 01:05:32.960
<v Speaker 2>become more of a reader. I used to when as

1069
01:05:33.000 --> 01:05:36.760
<v Speaker 2>a teenager, read constantly, I know, exhoomed everything from the

1070
01:05:36.880 --> 01:05:40.000
<v Speaker 2>depths of the sci fi fantasy section of my local library,

1071
01:05:40.719 --> 01:05:42.320
<v Speaker 2>and I haven't done that as much recently, so I'm

1072
01:05:42.320 --> 01:05:44.760
<v Speaker 2>still kind of catching up. So recently I've led kind

1073
01:05:44.760 --> 01:05:46.960
<v Speaker 2>of the classics that a lot of people may know.

1074
01:05:47.880 --> 01:05:50.559
<v Speaker 2>Neuromancer is a great sci fi book. I think it's

1075
01:05:50.639 --> 01:05:53.400
<v Speaker 2>rather influence on the genre. I'm not cutting new ground here.

1076
01:05:54.440 --> 01:05:57.039
<v Speaker 2>I recently read through the Foundation series also, which was

1077
01:05:57.159 --> 01:06:02.760
<v Speaker 2>very good, really really changed over the course of the series. Yeah, yeah,

1078
01:06:02.800 --> 01:06:04.199
<v Speaker 2>a lot of respect for that.

1079
01:06:05.079 --> 01:06:08.199
<v Speaker 1>People should be aware that the book series is very

1080
01:06:08.239 --> 01:06:11.280
<v Speaker 1>different from the TV show. Both are actually pretty are good,

1081
01:06:11.840 --> 01:06:15.039
<v Speaker 1>but they're very different, both in terms of tone and

1082
01:06:15.079 --> 01:06:17.079
<v Speaker 1>the actual story. Yeah.

1083
01:06:18.880 --> 01:06:22.239
<v Speaker 2>Similar. On that note, Witcher loved the game, you know,

1084
01:06:22.280 --> 01:06:24.480
<v Speaker 2>Butcher three was the one I played. I've been meaning

1085
01:06:24.480 --> 01:06:26.599
<v Speaker 2>to play the others, and then I'm in a book

1086
01:06:26.639 --> 01:06:30.679
<v Speaker 2>club with some friends reading the series. Not a huge

1087
01:06:30.679 --> 01:06:32.000
<v Speaker 2>fan of the show, to be honest.

1088
01:06:32.119 --> 01:06:34.599
<v Speaker 1>Yeah, to me, to be honest as well, I wanted

1089
01:06:34.599 --> 01:06:36.559
<v Speaker 1>to say it. I tried to watch the show and

1090
01:06:36.599 --> 01:06:37.800
<v Speaker 1>I couldn't get into it.

1091
01:06:38.920 --> 01:06:40.440
<v Speaker 2>Yeah, there are a lot of great parts of it,

1092
01:06:40.519 --> 01:06:44.000
<v Speaker 2>especially Henry Cavill. Oh my gosh, but that one bathroom scene,

1093
01:06:44.039 --> 01:06:48.280
<v Speaker 2>but his acting is phenomenal, and just I couldn't get

1094
01:06:48.280 --> 01:06:48.800
<v Speaker 2>into the rest of.

1095
01:06:48.800 --> 01:06:53.119
<v Speaker 1>The show, you know. Yeah, yeah, this is what it is.

1096
01:06:53.920 --> 01:06:58.039
<v Speaker 2>It is what it is. Now. Otherwise, my wife and

1097
01:06:58.039 --> 01:07:00.480
<v Speaker 2>I we've been watching Monk, the old TV show. It's

1098
01:07:00.559 --> 01:07:01.000
<v Speaker 2>kind of hard.

1099
01:07:01.320 --> 01:07:02.639
<v Speaker 1>It's on Netflix, I believe.

1100
01:07:03.360 --> 01:07:07.519
<v Speaker 2>Yeah, yeah, midway through it. It's quite good. Highly recommend

1101
01:07:07.519 --> 01:07:09.360
<v Speaker 2>it's it's very nice. It's kind of the I think

1102
01:07:09.400 --> 01:07:12.440
<v Speaker 2>the epitome of that genre, that era of early two

1103
01:07:12.440 --> 01:07:16.320
<v Speaker 2>thousands episodic shows where people they had an appetite for

1104
01:07:16.360 --> 01:07:19.239
<v Speaker 2>actual good shows, but it wasn't you know, there's really

1105
01:07:19.320 --> 01:07:21.760
<v Speaker 2>deep intense stuff you get these days with these HBO

1106
01:07:21.800 --> 01:07:22.639
<v Speaker 2>mini series.

1107
01:07:22.480 --> 01:07:26.960
<v Speaker 1>Is so yeah, you could was just a single episode.

1108
01:07:27.000 --> 01:07:30.920
<v Speaker 1>Then it's totally self contained. It's not quite believable, like

1109
01:07:31.000 --> 01:07:33.079
<v Speaker 1>you know, it's it's funny to compare to a lot

1110
01:07:33.159 --> 01:07:36.840
<v Speaker 1>of the British TV shows of the same time or

1111
01:07:36.880 --> 01:07:42.039
<v Speaker 1>the same era, where in the American shows you had

1112
01:07:42.159 --> 01:07:46.199
<v Speaker 1>like that every episode was self contained. So I feel

1113
01:07:46.239 --> 01:07:49.119
<v Speaker 1>like it was a crime drama. The crime happened at

1114
01:07:49.159 --> 01:07:54.320
<v Speaker 1>the beginning, they solved it, there was a trial, the

1115
01:07:54.320 --> 01:07:57.679
<v Speaker 1>criminal got convicted done. It's like, you know, Law and

1116
01:07:57.800 --> 01:08:00.360
<v Speaker 1>Order I think was the epitome of that type of

1117
01:08:00.440 --> 01:08:07.320
<v Speaker 1>shows also and also CSI, whereas the British shows they

1118
01:08:07.480 --> 01:08:11.440
<v Speaker 1>kind of, you know, the entire season was just the

1119
01:08:12.000 --> 01:08:16.279
<v Speaker 1>one crime, and then the mini dramas of that you

1120
01:08:16.399 --> 01:08:19.920
<v Speaker 1>get on streaming today kind of emulate those those British

1121
01:08:19.960 --> 01:08:23.720
<v Speaker 1>shows where it's the entire season for that the one crime.

1122
01:08:25.119 --> 01:08:29.560
<v Speaker 2>Yeah, different that actually, by the way, reminds me I

1123
01:08:29.600 --> 01:08:32.920
<v Speaker 2>fell in love with the show Good Omens, the British one.

1124
01:08:33.279 --> 01:08:37.000
<v Speaker 2>I had never heard of it until it randomly popped

1125
01:08:37.039 --> 01:08:40.760
<v Speaker 2>up and read it or something. But it's fantastic. Highly recommend.

1126
01:08:42.199 --> 01:08:47.000
<v Speaker 2>It's this whimsical, I don't know, you know, biblical characters

1127
01:08:47.039 --> 01:08:52.079
<v Speaker 2>in the modern day. It's it has Michael Sheen and

1128
01:08:52.159 --> 01:08:55.199
<v Speaker 2>David Tennant. John Ham shows up in the later season.

1129
01:08:56.399 --> 01:08:57.880
<v Speaker 2>Really really good stuff. Highly recommend.

1130
01:08:58.720 --> 01:09:02.159
<v Speaker 1>Funnily, I read the book, but if not seen, not

1131
01:09:02.359 --> 01:09:06.640
<v Speaker 1>watch the TV show. The book, by the way, is

1132
01:09:06.680 --> 01:09:08.640
<v Speaker 1>by Neil Gaiman and Terry Pratchett.

1133
01:09:09.399 --> 01:09:14.439
<v Speaker 2>Yeah, it's hilarious. It's it's all sorts of lever. I'd say,

1134
01:09:14.840 --> 01:09:16.560
<v Speaker 2>it's I don't know how to describe these it's like

1135
01:09:16.640 --> 01:09:19.760
<v Speaker 2>very British humor, Like you know, it's it's these characters

1136
01:09:20.000 --> 01:09:23.920
<v Speaker 2>who driven by these odd quirks, just getting these ridiculous situations.

1137
01:09:23.920 --> 01:09:26.000
<v Speaker 2>But it's also this really compelling story about you know,

1138
01:09:27.039 --> 01:09:30.520
<v Speaker 2>good versus evil and the nuances and the inability to

1139
01:09:30.520 --> 01:09:34.760
<v Speaker 2>define those two concepts in a dynamic, people driven world.

1140
01:09:35.640 --> 01:09:38.840
<v Speaker 1>If that's your jam, then I would highly recommend that

1141
01:09:38.920 --> 01:09:42.880
<v Speaker 1>you read, not watch, read the Hitchhiker's Guide to the

1142
01:09:42.880 --> 01:09:48.920
<v Speaker 1>Galaxy series of books. The movies pretty bad. The books,

1143
01:09:48.960 --> 01:09:55.359
<v Speaker 1>on the other hand, are awesome. Okay, So so if

1144
01:09:55.439 --> 01:09:58.640
<v Speaker 1>that kind of sense of humor carry, Pratchett was very

1145
01:09:58.720 --> 01:10:03.760
<v Speaker 1>much inspired by Douglas Adams, let's put it this way. Yeah,

1146
01:10:04.239 --> 01:10:07.079
<v Speaker 1>So with that, I think i'll end our show. Thank

1147
01:10:07.119 --> 01:10:10.199
<v Speaker 1>you again for coming again onto our show and speaking

1148
01:10:10.199 --> 01:10:15.359
<v Speaker 1>both about tsslint and about squiggleconf and putting yourself out

1149
01:10:15.359 --> 01:10:18.880
<v Speaker 1>there and all the best with both endeavors and with

1150
01:10:19.000 --> 01:10:19.920
<v Speaker 1>the move to Boston.

1151
01:10:21.000 --> 01:10:24.119
<v Speaker 2>Thanks Dan. Yeah, I really appreciate you having me on here,

1152
01:10:24.199 --> 01:10:26.079
<v Speaker 2>letting me plug things, and also, you know, best of

1153
01:10:26.159 --> 01:10:28.479
<v Speaker 2>luck with the new job and getting them to sponsor

1154
01:10:28.560 --> 01:10:29.840
<v Speaker 2>school Comp twenty twenty five.

1155
01:10:30.359 --> 01:10:34.920
<v Speaker 1>Yeah, that's hope. That's hope. So okay, bye everybody, thank

1156
01:10:34.960 --> 01:10:36.560
<v Speaker 1>you for listening in. Bye bye.
