WEBVTT

1
00:00:05.160 --> 00:00:08.919
<v Speaker 1>Hello, everybody, Welcome to another exciting episode of JavaScript jabb Er.

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

3
00:00:11.240 --> 00:00:13.279
<v Speaker 1>radio and the voice for being of mine. But I'm

4
00:00:13.320 --> 00:00:15.480
<v Speaker 1>your host today, whether you like it or not. Anyway

5
00:00:16.519 --> 00:00:19.760
<v Speaker 1>with me today, I have on our panel mister Dan Shapier.

6
00:00:19.800 --> 00:00:20.519
<v Speaker 2>How you doing Dan?

7
00:00:21.760 --> 00:00:24.280
<v Speaker 3>As well as can be expected given that I live

8
00:00:24.320 --> 00:00:24.960
<v Speaker 3>in Tel Aviv.

9
00:00:25.679 --> 00:00:28.640
<v Speaker 1>Yes, I would say it's rather explosive times, there isn't it.

10
00:00:29.199 --> 00:00:31.160
<v Speaker 3>Yeah, you can tell Aviv if you want, if you

11
00:00:31.199 --> 00:00:32.159
<v Speaker 3>want to joke about it.

12
00:00:32.159 --> 00:00:35.920
<v Speaker 2>Yet is it so? Yeah?

13
00:00:36.000 --> 00:00:39.000
<v Speaker 3>If you put in this way, there's greater than zero

14
00:00:39.039 --> 00:00:42.359
<v Speaker 3>possibility that doing the recording today, I'll need to jump

15
00:00:42.399 --> 00:00:43.679
<v Speaker 3>off and run to the bomb shelter.

16
00:00:43.960 --> 00:00:44.520
<v Speaker 2>Bomb shelter.

17
00:00:44.719 --> 00:00:48.320
<v Speaker 1>Yes, yes, if you've been watching the news, you should

18
00:00:48.320 --> 00:00:50.159
<v Speaker 1>know what's going on in Tel Aviv. We'll leave it

19
00:00:50.200 --> 00:00:50.520
<v Speaker 1>at that.

20
00:00:52.439 --> 00:00:53.000
<v Speaker 2>With me.

21
00:00:53.359 --> 00:00:57.200
<v Speaker 1>With us, we have our very special guests, mister Dmitri Metropolis.

22
00:00:57.200 --> 00:00:58.000
<v Speaker 2>How are you doing, Dmitri?

23
00:00:58.560 --> 00:01:00.560
<v Speaker 4>Great? Great, happy to be thank you.

24
00:01:00.880 --> 00:01:03.359
<v Speaker 1>And yes, we were asking him ahead of time that

25
00:01:03.399 --> 00:01:06.000
<v Speaker 1>as Metropolis has in the same city where Superman lives,

26
00:01:06.640 --> 00:01:08.280
<v Speaker 1>so you know, it's a it's.

27
00:01:08.200 --> 00:01:11.000
<v Speaker 4>An old Greek name, so it's probably in the old days,

28
00:01:11.079 --> 00:01:13.040
<v Speaker 4>was pronounced a little different. You know. Ancient Greek was

29
00:01:13.040 --> 00:01:18.159
<v Speaker 4>a tonal language actually, so it had pitches like Chinese. Yes, right,

30
00:01:18.280 --> 00:01:19.719
<v Speaker 4>very different from how it sounds today.

31
00:01:20.400 --> 00:01:21.159
<v Speaker 2>Yeah, that's true.

32
00:01:21.200 --> 00:01:23.439
<v Speaker 1>I've spent some time in China, and I have friends

33
00:01:23.480 --> 00:01:26.359
<v Speaker 1>that have lived there for a long time and speak

34
00:01:27.680 --> 00:01:32.280
<v Speaker 1>China Chinese, and the tones make a huge difference in

35
00:01:32.439 --> 00:01:34.920
<v Speaker 1>what you say. You can say one word with two

36
00:01:34.959 --> 00:01:36.760
<v Speaker 1>different tones and they mean two different things. And if

37
00:01:36.799 --> 00:01:38.640
<v Speaker 1>you get lazy, you can say something that you really

38
00:01:38.719 --> 00:01:39.439
<v Speaker 1>didn't want to say.

39
00:01:40.959 --> 00:01:43.120
<v Speaker 3>It literally means city, doesn't it.

40
00:01:44.480 --> 00:01:48.280
<v Speaker 4>Yeah. And by the way, which city, people, I think?

41
00:01:48.359 --> 00:01:50.480
<v Speaker 3>Oh, okay, And by the way, which city do you

42
00:01:50.519 --> 00:01:51.200
<v Speaker 3>actually live in?

43
00:01:52.040 --> 00:01:54.239
<v Speaker 4>I live in here in Michigan. I live like a

44
00:01:54.599 --> 00:01:59.280
<v Speaker 4>bit north of Detroit, the Mitten State. Yeah. People make

45
00:01:59.280 --> 00:02:00.719
<v Speaker 4>fun of us because you can, you know, you can

46
00:02:00.760 --> 00:02:03.200
<v Speaker 4>say where you're from by holding up your hand, right.

47
00:02:03.640 --> 00:02:05.799
<v Speaker 4>But you know, hey, whatever, are.

48
00:02:05.680 --> 00:02:08.080
<v Speaker 2>You one of those up people? Are you down on the.

49
00:02:07.920 --> 00:02:12.439
<v Speaker 4>No, I'm not there. They're called us. Yeah, I'm not aperuh,

50
00:02:12.680 --> 00:02:15.759
<v Speaker 4>but uh, you know it's beautiful up there, so I

51
00:02:15.840 --> 00:02:16.560
<v Speaker 4>won't hate on him.

52
00:02:17.159 --> 00:02:20.280
<v Speaker 1>There's a I still have this really old humor song

53
00:02:20.319 --> 00:02:23.400
<v Speaker 1>on my computer from a group called the Upers, and

54
00:02:23.400 --> 00:02:25.039
<v Speaker 1>it's about the second week of deer Camp.

55
00:02:25.639 --> 00:02:29.159
<v Speaker 2>Uh. They were like a little comedy group back in

56
00:02:29.199 --> 00:02:29.520
<v Speaker 2>the day.

57
00:02:29.800 --> 00:02:30.520
<v Speaker 4>Sounds about right.

58
00:02:30.639 --> 00:02:31.599
<v Speaker 2>It's a very old song.

59
00:02:32.360 --> 00:02:34.439
<v Speaker 1>It's a second week of deer Camp and all the

60
00:02:34.439 --> 00:02:40.840
<v Speaker 1>guys are here anyway, So moving on to our topic, usure, Uh,

61
00:02:41.120 --> 00:02:42.560
<v Speaker 1>we're going to talk about Dimitris.

62
00:02:42.680 --> 00:02:45.520
<v Speaker 3>Oh, I would like to introduce the topic. If you

63
00:02:45.560 --> 00:02:49.360
<v Speaker 3>don't know, I was first of all, I have to

64
00:02:49.400 --> 00:02:52.159
<v Speaker 3>mention that it was when it just when it was announced.

65
00:02:52.199 --> 00:02:55.719
<v Speaker 3>It was obviously my pick on the very next podcast

66
00:02:56.039 --> 00:02:59.159
<v Speaker 3>and I and I basically called shot a shotgun on it,

67
00:02:59.319 --> 00:03:02.840
<v Speaker 3>so with y else could pick it because for me, it's

68
00:03:02.840 --> 00:03:06.520
<v Speaker 3>a totally insane, wacky and out of this world project.

69
00:03:08.000 --> 00:03:13.159
<v Speaker 3>It's simultaneously amazing and I think also educational. The fact

70
00:03:13.199 --> 00:03:17.080
<v Speaker 3>that it's that it was actually created and the amount

71
00:03:17.120 --> 00:03:19.719
<v Speaker 3>of effort that you put into it, based on the

72
00:03:19.800 --> 00:03:22.520
<v Speaker 3>video that being released about it is more or less insane,

73
00:03:22.599 --> 00:03:27.199
<v Speaker 3>and we will obviously learn more about it. So without

74
00:03:27.199 --> 00:03:29.159
<v Speaker 3>further ado, what did you do?

75
00:03:30.840 --> 00:03:33.280
<v Speaker 4>I think I had a thought, and the thought never

76
00:03:33.800 --> 00:03:35.759
<v Speaker 4>I could never let the thought go. I think that's

77
00:03:35.840 --> 00:03:37.759
<v Speaker 4>ultimately the answer to the question of what I did,

78
00:03:37.840 --> 00:03:41.159
<v Speaker 4>and the thought was, yeah, but there's no way you

79
00:03:41.159 --> 00:03:45.280
<v Speaker 4>could run doom and typescripts type system. You know, that

80
00:03:45.439 --> 00:03:48.919
<v Speaker 4>was the thought. I think that I have opinions that

81
00:03:48.960 --> 00:03:51.080
<v Speaker 4>informed that thought, and one of the core ones is

82
00:03:51.639 --> 00:03:54.199
<v Speaker 4>my feelings about what it means for a system to

83
00:03:54.240 --> 00:03:57.960
<v Speaker 4>be turning complete. So a couple of years ago, someone

84
00:03:58.199 --> 00:04:00.599
<v Speaker 4>posted an issue It's still the Open on the Typescript

85
00:04:00.680 --> 00:04:02.639
<v Speaker 4>repo saying, hey, I was just playing around and I

86
00:04:02.680 --> 00:04:05.360
<v Speaker 4>noticed I think the type system is turing complete. And

87
00:04:05.400 --> 00:04:06.639
<v Speaker 4>it got a lot of press and it was very

88
00:04:06.719 --> 00:04:08.199
<v Speaker 4>you know, we all had a laugh, you know, everybody

89
00:04:08.240 --> 00:04:11.400
<v Speaker 4>typescript nerds had to laugh about it. But since that time,

90
00:04:11.520 --> 00:04:13.840
<v Speaker 4>I think people would say, I'd hear here and there

91
00:04:13.840 --> 00:04:15.719
<v Speaker 4>if someone say, oh, well, but if it's turning complete,

92
00:04:15.759 --> 00:04:18.360
<v Speaker 4>then of course it could you know, X Y Z thing,

93
00:04:19.040 --> 00:04:21.639
<v Speaker 4>and I just think that's baloney. I just it's totally

94
00:04:22.160 --> 00:04:25.079
<v Speaker 4>I just fundamentally cannot get on board with that kind

95
00:04:25.079 --> 00:04:28.360
<v Speaker 4>of thinking because Turing completeness, well we could.

96
00:04:29.680 --> 00:04:31.959
<v Speaker 2>Incomplete, yeah, touring complete.

97
00:04:32.319 --> 00:04:36.839
<v Speaker 4>So there's this guy, Alan Turing, and he made quite

98
00:04:36.839 --> 00:04:38.720
<v Speaker 4>a lot of contributions to society, but one of them

99
00:04:38.800 --> 00:04:42.480
<v Speaker 4>was he described a system that we now call a

100
00:04:42.519 --> 00:04:47.160
<v Speaker 4>Turing machine. And Turing machines can be used to represent

101
00:04:47.319 --> 00:04:53.279
<v Speaker 4>arbitrary calculations and you know, perform arbitrary CPU work, and

102
00:04:53.480 --> 00:04:57.040
<v Speaker 4>Touring machines are extremely are well known for being extraordinarily simple. Actually,

103
00:04:57.079 --> 00:04:58.639
<v Speaker 4>you can do it in binary. You can do it

104
00:04:58.639 --> 00:05:00.879
<v Speaker 4>with like a ticker tape. You can think of this

105
00:05:00.920 --> 00:05:03.519
<v Speaker 4>little bug kind of dancing through a ticker tape, you know,

106
00:05:03.560 --> 00:05:07.439
<v Speaker 4>looking at the one zero or one bit in front

107
00:05:07.439 --> 00:05:09.040
<v Speaker 4>of it and making a decision about where to go

108
00:05:09.079 --> 00:05:09.839
<v Speaker 4>and what to do next.

109
00:05:10.120 --> 00:05:15.519
<v Speaker 3>Basically, it's if I remember correctly, it's a theoretical machine. Yes,

110
00:05:15.720 --> 00:05:19.879
<v Speaker 3>that is the simplest mechanism that can perform any computation.

111
00:05:20.519 --> 00:05:23.240
<v Speaker 4>Right, So, if you can show that a system is

112
00:05:23.279 --> 00:05:28.360
<v Speaker 4>Turing complete, there's a chain of mathematical proofs that demonstrate

113
00:05:28.439 --> 00:05:31.199
<v Speaker 4>that you could build your way up to creating an

114
00:05:31.240 --> 00:05:37.199
<v Speaker 4>extraordinarily complex system like any In fact, any computer could

115
00:05:37.199 --> 00:05:42.160
<v Speaker 4>be built from the bones of a Turing complete machine theoretically,

116
00:05:43.959 --> 00:05:48.000
<v Speaker 4>and the theoretically part is where I totally fall off

117
00:05:48.000 --> 00:05:52.040
<v Speaker 4>from the bandwagon, because to me, it's not interesting. So

118
00:05:52.079 --> 00:05:54.839
<v Speaker 4>if I told you, hey, you know, Dan, I have

119
00:05:54.879 --> 00:05:58.920
<v Speaker 4>this machine in my basement and it can compute you know,

120
00:05:59.040 --> 00:06:02.000
<v Speaker 4>one plus one, except that it will take one hundred

121
00:06:02.160 --> 00:06:06.800
<v Speaker 4>million billion years and all the atoms in the observable universe.

122
00:06:07.040 --> 00:06:07.720
<v Speaker 4>Isn't it cool?

123
00:06:09.319 --> 00:06:09.480
<v Speaker 3>Now?

124
00:06:09.560 --> 00:06:11.279
<v Speaker 4>Tell me Dan, how cool do you.

125
00:06:11.240 --> 00:06:13.759
<v Speaker 3>Think that is? How? That's how, that's how we're supposed

126
00:06:13.759 --> 00:06:16.879
<v Speaker 3>to prove string theory. I believe they need to build

127
00:06:19.399 --> 00:06:22.079
<v Speaker 3>a Liege hedron collider the size of the universe or

128
00:06:22.079 --> 00:06:24.160
<v Speaker 3>something along these lines in order to prove right.

129
00:06:24.759 --> 00:06:28.120
<v Speaker 4>So like, I just don't find that super interesting. And

130
00:06:28.720 --> 00:06:31.199
<v Speaker 4>so what happened was, you know, I have a YouTube

131
00:06:31.279 --> 00:06:34.360
<v Speaker 4>channel that I participate in called Michigan Type Script and

132
00:06:34.680 --> 00:06:37.759
<v Speaker 4>I help out with making videos there, and I got

133
00:06:37.800 --> 00:06:39.199
<v Speaker 4>the thought one day, you know, would be a cool

134
00:06:39.240 --> 00:06:43.959
<v Speaker 4>project is to show what the blocker is. Why, to

135
00:06:44.040 --> 00:06:46.199
<v Speaker 4>demonstrate my the thing that I just laid out, which

136
00:06:46.240 --> 00:06:48.800
<v Speaker 4>is that being turn complete is not enough. You need

137
00:06:48.879 --> 00:06:51.639
<v Speaker 4>a lot more into in order to do anything of

138
00:06:51.680 --> 00:06:56.120
<v Speaker 4>any like real significance. And I, you know, thought this

139
00:06:56.160 --> 00:06:58.319
<v Speaker 4>would take one or two weeks maybe of like putting

140
00:06:58.399 --> 00:07:01.000
<v Speaker 4>around with the type system. You know, I have to

141
00:07:01.040 --> 00:07:03.680
<v Speaker 4>mention like I had done a video series on advanced

142
00:07:03.680 --> 00:07:06.360
<v Speaker 4>typescript type stuff. So there's these things called the Type

143
00:07:06.399 --> 00:07:09.040
<v Speaker 4>Challenges made by Anthony Fou really great stuff, but they're

144
00:07:09.439 --> 00:07:12.040
<v Speaker 4>they're very hard, and like the last one is making

145
00:07:12.079 --> 00:07:15.879
<v Speaker 4>a Jason parser purely in Typescript type system. So some

146
00:07:15.920 --> 00:07:20.040
<v Speaker 4>people are not aware that you can do arbitrary kind

147
00:07:20.040 --> 00:07:23.560
<v Speaker 4>of kind of computations. It's called type level programming these days,

148
00:07:24.040 --> 00:07:26.920
<v Speaker 4>and there is a lot that you can accomplish with

149
00:07:27.079 --> 00:07:30.040
<v Speaker 4>very small building blocks, almost like what a turning machine

150
00:07:30.079 --> 00:07:33.160
<v Speaker 4>gives you. And so I just thought I would work

151
00:07:33.199 --> 00:07:34.399
<v Speaker 4>on findings.

152
00:07:34.600 --> 00:07:38.240
<v Speaker 3>Stop you for a second, please, I'm thinking that we

153
00:07:38.279 --> 00:07:43.600
<v Speaker 3>are potentially losing some of our listeners and the distinction

154
00:07:43.800 --> 00:07:48.199
<v Speaker 3>between running things in Typescript versus running things in the

155
00:07:48.279 --> 00:07:53.920
<v Speaker 3>Typescript type system, because it seems like, essentially it seems

156
00:07:53.920 --> 00:07:57.800
<v Speaker 3>like it should be the same thing, but it totally isn't.

157
00:07:58.399 --> 00:08:02.639
<v Speaker 3>So maybe you can make this distinction clearer before we proceed.

158
00:08:02.959 --> 00:08:04.839
<v Speaker 4>I love it, Thank you for stopping me. Yeah, it's

159
00:08:04.839 --> 00:08:10.079
<v Speaker 4>a very important distinction. So Typescript's whole point is to

160
00:08:10.160 --> 00:08:13.199
<v Speaker 4>add types to JavaScript. So JavaScript is an existing language,

161
00:08:13.199 --> 00:08:16.079
<v Speaker 4>but it doesn't have a type system in the sense

162
00:08:16.079 --> 00:08:18.800
<v Speaker 4>that you can't say here's a variable, and this variable

163
00:08:18.839 --> 00:08:21.240
<v Speaker 4>is a number and it can only be a number,

164
00:08:21.319 --> 00:08:22.920
<v Speaker 4>so if you try to assign a strength to it,

165
00:08:23.040 --> 00:08:26.040
<v Speaker 4>we're going to have an error. That's something that typescript

166
00:08:26.040 --> 00:08:28.240
<v Speaker 4>gives you, but JavaScript is lacking, and that's the whole

167
00:08:28.240 --> 00:08:31.160
<v Speaker 4>point of typescript in the kind of the most essential sense.

168
00:08:33.320 --> 00:08:37.080
<v Speaker 4>Over the years, as typescript has evolved, there are more

169
00:08:37.120 --> 00:08:39.840
<v Speaker 4>and more things that typescript has enabled you to do

170
00:08:39.960 --> 00:08:43.919
<v Speaker 4>with the type system. So originally it was very simple

171
00:08:44.000 --> 00:08:46.799
<v Speaker 4>types like I just said, like number and string. But

172
00:08:46.879 --> 00:08:50.840
<v Speaker 4>eventually they started being able to do things with what

173
00:08:50.879 --> 00:08:54.159
<v Speaker 4>we call literal types. So what if instead of saying

174
00:08:54.200 --> 00:08:56.480
<v Speaker 4>I have this variable and it's a number, you can

175
00:08:56.480 --> 00:08:59.200
<v Speaker 4>only assign numbers to it. If I say I have

176
00:08:59.279 --> 00:09:03.080
<v Speaker 4>this variable, you can only assign these specific numbers to it.

177
00:09:03.120 --> 00:09:05.480
<v Speaker 4>You can only assign one, two, three, and four to

178
00:09:05.600 --> 00:09:08.320
<v Speaker 4>this variable. And if you try to assign five, even

179
00:09:08.360 --> 00:09:09.960
<v Speaker 4>though it's a number, we're going to give you a

180
00:09:09.960 --> 00:09:13.360
<v Speaker 4>type error. So there are literal types, and you can

181
00:09:13.399 --> 00:09:16.159
<v Speaker 4>do this with strings too, So you can say I

182
00:09:16.200 --> 00:09:19.080
<v Speaker 4>have this variable. The only types that are allowed to

183
00:09:19.279 --> 00:09:22.879
<v Speaker 4>assign to this variable are red, green, and blue. These

184
00:09:22.960 --> 00:09:24.720
<v Speaker 4>you know R E D G R E E N

185
00:09:24.919 --> 00:09:28.320
<v Speaker 4>D L U E those are the available string options

186
00:09:28.320 --> 00:09:32.840
<v Speaker 4>that you can assign to this type. Well, there's another

187
00:09:32.879 --> 00:09:36.000
<v Speaker 4>thing that they added that goes even further, which is.

188
00:09:35.919 --> 00:09:38.440
<v Speaker 3>That and again I'll stop you for a second just

189
00:09:38.480 --> 00:09:43.360
<v Speaker 3>to clarify why this might be useful, because and I

190
00:09:43.360 --> 00:09:46.960
<v Speaker 3>think your example with colors is excellent because, for example,

191
00:09:47.000 --> 00:09:51.440
<v Speaker 3>if I'm implementing a type or a variable that's supposed

192
00:09:51.440 --> 00:09:55.440
<v Speaker 3>to have contained a color that, for example, use in CSS,

193
00:09:55.840 --> 00:09:59.159
<v Speaker 3>and I don't want to allow any arbitrary string to

194
00:09:59.200 --> 00:10:03.120
<v Speaker 3>be assigned to it. I want the static type checking

195
00:10:03.240 --> 00:10:07.360
<v Speaker 3>to validate that at run time. Well, actually at build time,

196
00:10:07.399 --> 00:10:12.279
<v Speaker 3>I'm validating that I can only assign but the specific

197
00:10:12.519 --> 00:10:15.000
<v Speaker 3>string values to it, and if I try to assign

198
00:10:15.039 --> 00:10:19.440
<v Speaker 3>a general string to it, I will get a development

199
00:10:19.480 --> 00:10:21.080
<v Speaker 3>time or buil time type error.

200
00:10:21.879 --> 00:10:23.639
<v Speaker 4>Exactly. Yeah, what if you put it you just have

201
00:10:23.679 --> 00:10:26.679
<v Speaker 4>a typo. You know. Typescript is really amazing because it

202
00:10:26.720 --> 00:10:29.320
<v Speaker 4>can keep these kinds of errors, this whole class of

203
00:10:29.399 --> 00:10:30.399
<v Speaker 4>errors out of the program.

204
00:10:30.440 --> 00:10:33.159
<v Speaker 3>I write red instead of bread or something along it.

205
00:10:33.159 --> 00:10:37.480
<v Speaker 4>Right, exactly, yeah, perfect. So the second thing that they

206
00:10:37.519 --> 00:10:41.840
<v Speaker 4>added is something called generics. Generics exists in lots of languages,

207
00:10:41.879 --> 00:10:46.240
<v Speaker 4>but generics is a way to operate on types. So

208
00:10:46.440 --> 00:10:49.559
<v Speaker 4>it's kind of like a function. You say, I'm gonna

209
00:10:49.639 --> 00:10:52.720
<v Speaker 4>take as a parameter some other function, Like we were

210
00:10:52.720 --> 00:10:54.759
<v Speaker 4>saying red, green, and blue. Okay, So I'm going to

211
00:10:54.799 --> 00:10:57.799
<v Speaker 4>take some other type and you can add to it,

212
00:10:57.960 --> 00:11:00.000
<v Speaker 4>or you can change it, or you can inspect it

213
00:10:59.879 --> 00:11:02.039
<v Speaker 4>and see what it does and do something different. So

214
00:11:02.039 --> 00:11:03.639
<v Speaker 4>you can say, oh, if it's red, I'm going to

215
00:11:03.720 --> 00:11:05.600
<v Speaker 4>return the number one. If it's green, I'm going to

216
00:11:05.639 --> 00:11:07.440
<v Speaker 4>return five, and if it's blue, I'm going to return

217
00:11:07.480 --> 00:11:10.120
<v Speaker 4>one thousand. You can do stuff like that.

218
00:11:09.840 --> 00:11:13.360
<v Speaker 2>Is it an oversimplification to say? It's almost like a class.

219
00:11:13.000 --> 00:11:16.720
<v Speaker 1>Override and object oriented programming where you can take something

220
00:11:16.759 --> 00:11:17.480
<v Speaker 1>and extend it.

221
00:11:17.960 --> 00:11:21.600
<v Speaker 3>Yeah, but it's done it it's build time or dev

222
00:11:21.720 --> 00:11:27.000
<v Speaker 3>time rather than at run time. You're specifying the type.

223
00:11:27.039 --> 00:11:30.159
<v Speaker 3>The arguments to the type are themselves types.

224
00:11:32.440 --> 00:11:34.039
<v Speaker 4>So it's kind of like a It's kind of like

225
00:11:34.080 --> 00:11:37.559
<v Speaker 4>its own programming language tucked away inside of JavaScript. It's

226
00:11:37.600 --> 00:11:39.320
<v Speaker 4>like you have JavaScript, and then you have this other

227
00:11:39.399 --> 00:11:42.200
<v Speaker 4>language on top that allows you to kind of speak

228
00:11:42.200 --> 00:11:44.480
<v Speaker 4>in these other terms, and it's often in reference to

229
00:11:44.480 --> 00:11:46.440
<v Speaker 4>what the JavaScript is doing. I mean, that's the intention.

230
00:11:47.440 --> 00:11:50.159
<v Speaker 3>I'd like you can have another example. I'd likely to

231
00:11:50.440 --> 00:11:53.919
<v Speaker 3>try to give another example that might clarify why something

232
00:11:54.000 --> 00:12:00.720
<v Speaker 3>like this might be useful. Let's say I'm implementing calculator,

233
00:12:00.919 --> 00:12:03.480
<v Speaker 3>a hand calculator, and I want to do it in

234
00:12:03.840 --> 00:12:06.399
<v Speaker 3>a type form, and I want to represent an expression.

235
00:12:07.080 --> 00:12:12.240
<v Speaker 3>For example, I want to represent the addition operator. So

236
00:12:12.399 --> 00:12:16.279
<v Speaker 3>the addition operator has something on the left, the addition operator,

237
00:12:16.320 --> 00:12:18.879
<v Speaker 3>and then something on the right, and I can say

238
00:12:18.960 --> 00:12:23.519
<v Speaker 3>that an expression is a generic type that has a

239
00:12:23.639 --> 00:12:27.200
<v Speaker 3>number on the left and an expression on the right.

240
00:12:29.240 --> 00:12:33.759
<v Speaker 3>So it's so it's am I am? I kind of

241
00:12:33.799 --> 00:12:35.279
<v Speaker 3>getting the point across, Steve.

242
00:12:36.320 --> 00:12:36.960
<v Speaker 2>Yeah, I think so.

243
00:12:37.120 --> 00:12:40.200
<v Speaker 1>I mean, being the visual person that I am, probably

244
00:12:40.200 --> 00:12:41.759
<v Speaker 1>be easier to see some code examples.

245
00:12:41.799 --> 00:12:43.000
<v Speaker 2>But yeah, I think I give you.

246
00:12:43.399 --> 00:12:48.720
<v Speaker 4>For you sure, Yeah, so you can you can provide

247
00:12:49.519 --> 00:12:52.759
<v Speaker 4>you can create functions that are kind of within the

248
00:12:52.799 --> 00:12:57.039
<v Speaker 4>type system only, and you can create types that you know,

249
00:12:57.159 --> 00:13:00.360
<v Speaker 4>that are just artifacts of the type system that don't

250
00:13:00.360 --> 00:13:03.960
<v Speaker 4>exist at run time. So JavaScript is really weird because

251
00:13:04.200 --> 00:13:06.440
<v Speaker 4>you know, we kind of attached a type system to

252
00:13:06.480 --> 00:13:08.519
<v Speaker 4>it later. I mean, this also kind of happened in Python,

253
00:13:08.559 --> 00:13:11.639
<v Speaker 4>but it's a part of Python, whereas in JavaScript, you know,

254
00:13:11.799 --> 00:13:14.320
<v Speaker 4>there is no part of JavaScript that includes a type system.

255
00:13:14.360 --> 00:13:17.919
<v Speaker 4>It's collect purely typescript and the type Script team there's

256
00:13:17.919 --> 00:13:19.879
<v Speaker 4>no spec for it either, right, it's just something that

257
00:13:19.919 --> 00:13:24.080
<v Speaker 4>they kind of developed and designed and they have documentation,

258
00:13:24.279 --> 00:13:28.279
<v Speaker 4>I guess. But the JavaScript language itself is standardized and

259
00:13:28.360 --> 00:13:33.440
<v Speaker 4>has a specification that's completely abstracted from the engines themselves,

260
00:13:33.440 --> 00:13:36.360
<v Speaker 4>like V eight that run the JavaScript code.

261
00:13:38.200 --> 00:13:39.840
<v Speaker 2>That's that's the EKMAS.

262
00:13:40.279 --> 00:13:42.279
<v Speaker 3>Yeah exactly, Yeah, EKMASCRIPT.

263
00:13:42.320 --> 00:13:45.039
<v Speaker 4>That's an European Computer Manufacturers Association. Yeah.

264
00:13:45.320 --> 00:13:50.159
<v Speaker 3>By the way, an anecdote, that's the origin of the acronym.

265
00:13:50.200 --> 00:13:53.159
<v Speaker 3>But EKMA is no longer an acronym. They've turned it

266
00:13:53.200 --> 00:13:58.840
<v Speaker 3>into the name. Oh really, yes, so it's literally trade.

267
00:13:59.080 --> 00:14:03.000
<v Speaker 3>It's trademark as EKMA, the word EKMA.

268
00:14:03.600 --> 00:14:08.320
<v Speaker 4>That's interesting. I had no idea. Well I'll put that

269
00:14:08.360 --> 00:14:12.960
<v Speaker 4>in my bag of bar trip. Yeah. Yeah, useful knowledge exactly.

270
00:14:13.440 --> 00:14:14.879
<v Speaker 4>It's cool to it's kind of fun to know this

271
00:14:14.960 --> 00:14:19.480
<v Speaker 4>kind of stuff though. So what happens is similar to

272
00:14:19.519 --> 00:14:21.879
<v Speaker 4>how we were talking about a turing machine. As you

273
00:14:22.720 --> 00:14:26.360
<v Speaker 4>start to have bigger and bigger building blocks that you construct,

274
00:14:26.440 --> 00:14:30.279
<v Speaker 4>you can start to do harder and harder things. And

275
00:14:31.080 --> 00:14:34.720
<v Speaker 4>my thesis was on this project. You know that may

276
00:14:34.759 --> 00:14:38.159
<v Speaker 4>be true, but there's going to come a point when

277
00:14:38.159 --> 00:14:40.720
<v Speaker 4>you hit some kind of immovable object. There's going to

278
00:14:40.799 --> 00:14:45.960
<v Speaker 4>be some unstoppable blocking point where you can't continue pushing

279
00:14:46.080 --> 00:14:49.000
<v Speaker 4>because you hit some memory constraint, or you hit some

280
00:14:49.440 --> 00:14:53.120
<v Speaker 4>CPU time constraint, or you hit some issue that is

281
00:14:53.159 --> 00:14:57.320
<v Speaker 4>just not solvable with the tools that we have today. Like,

282
00:14:57.399 --> 00:14:59.440
<v Speaker 4>maybe someday someone could do it, but I was sure

283
00:14:59.720 --> 00:15:01.799
<v Speaker 4>that it would not. It would never be possible in

284
00:15:01.840 --> 00:15:04.679
<v Speaker 4>today's Typescript to be able to do something like run

285
00:15:04.799 --> 00:15:06.720
<v Speaker 4>doom and we can talk, we can get into like

286
00:15:06.759 --> 00:15:08.559
<v Speaker 4>what does it even really mean to say that you

287
00:15:08.679 --> 00:15:11.399
<v Speaker 4>ran doom? And I can explain that, But that was

288
00:15:11.440 --> 00:15:12.679
<v Speaker 4>basically the idea of the project.

289
00:15:13.039 --> 00:15:16.559
<v Speaker 3>But again moving slightly back to the type system itself

290
00:15:17.240 --> 00:15:20.519
<v Speaker 3>in order to say that the type system might be

291
00:15:20.600 --> 00:15:23.399
<v Speaker 3>touring complete. And by the way, typescript is not the

292
00:15:23.399 --> 00:15:27.240
<v Speaker 3>only one. I encountered a similar situation with generics and

293
00:15:27.279 --> 00:15:28.679
<v Speaker 3>C plus plus back in the day.

294
00:15:28.759 --> 00:15:30.600
<v Speaker 4>Yeah, C plus pus templates are also.

295
00:15:30.720 --> 00:15:36.240
<v Speaker 3>Yeah, exactly. So basically the fact, once you have generics

296
00:15:36.399 --> 00:15:44.080
<v Speaker 3>and the generics are flexible enough, you become touring complete

297
00:15:44.120 --> 00:15:49.240
<v Speaker 3>because you get effectively loops and conditionals, which is basically

298
00:15:49.279 --> 00:15:52.639
<v Speaker 3>what you really need in order to kind of be

299
00:15:52.759 --> 00:15:53.600
<v Speaker 3>touring complete.

300
00:15:54.000 --> 00:15:57.080
<v Speaker 4>Interesting side note on that, I learned that actually the

301
00:15:57.120 --> 00:16:00.000
<v Speaker 4>definition of a Turing machine does not include the ability

302
00:16:00.120 --> 00:16:04.919
<v Speaker 4>to loop it. Uh, it's it's so like CE so

303
00:16:05.000 --> 00:16:07.759
<v Speaker 4>c C has a formatting syntax, right, there's like the

304
00:16:07.799 --> 00:16:12.960
<v Speaker 4>C print F formatting. Yeah, it's also considered Turing complete,

305
00:16:13.200 --> 00:16:15.879
<v Speaker 4>but you need to invoke it over and over again

306
00:16:15.919 --> 00:16:17.720
<v Speaker 4>in a loop outside so.

307
00:16:17.919 --> 00:16:20.840
<v Speaker 3>You can write infinitely long programs.

308
00:16:21.240 --> 00:16:23.519
<v Speaker 4>So it's not included in the which actually, to me

309
00:16:23.840 --> 00:16:26.360
<v Speaker 4>really adds fuel to my fire because like, I really

310
00:16:26.399 --> 00:16:28.919
<v Speaker 4>have the position and I still do after completing this project,

311
00:16:28.960 --> 00:16:33.159
<v Speaker 4>that calling something Turing machete complete is not really that interesting.

312
00:16:33.200 --> 00:16:36.440
<v Speaker 4>I don't find it that interesting. I think. Actually, I'll

313
00:16:36.440 --> 00:16:39.240
<v Speaker 4>tell you a funny thing about Doom. Actually, independent of

314
00:16:39.240 --> 00:16:42.519
<v Speaker 4>my project, I learned when I released this that the

315
00:16:42.600 --> 00:16:45.960
<v Speaker 4>Doom game, not like the engine, but like inside the

316
00:16:46.000 --> 00:16:48.200
<v Speaker 4>game with your character and the gun and like things

317
00:16:48.200 --> 00:16:49.759
<v Speaker 4>that you can do in the game is known to

318
00:16:49.799 --> 00:16:54.399
<v Speaker 4>be Turing complete. Because you know, I was I was

319
00:16:54.440 --> 00:16:56.960
<v Speaker 4>listening to watching people argue about this in comments, and

320
00:16:57.120 --> 00:16:59.480
<v Speaker 4>you know, one person was saying, well, actually the measure

321
00:16:59.600 --> 00:17:02.919
<v Speaker 4>should be Doom complete. If the system can run Doom,

322
00:17:03.279 --> 00:17:06.039
<v Speaker 4>then that's like the bar of what is mathematically interesting.

323
00:17:06.039 --> 00:17:08.200
<v Speaker 4>And someone said, well, you could make a computer that

324
00:17:08.279 --> 00:17:10.640
<v Speaker 4>only can run Doom and can't do anything else, and

325
00:17:10.640 --> 00:17:12.640
<v Speaker 4>then like, that's not very interesting. You made an ask

326
00:17:12.759 --> 00:17:16.240
<v Speaker 4>basically for just Doom. And then they came back the

327
00:17:16.359 --> 00:17:18.119
<v Speaker 4>you know, the first person came back to say, oh,

328
00:17:18.119 --> 00:17:20.079
<v Speaker 4>you must not be aware that the Doom game itself

329
00:17:20.160 --> 00:17:22.319
<v Speaker 4>is turning complete, and so then you have the full

330
00:17:22.359 --> 00:17:25.079
<v Speaker 4>circle completing the loop that actually and so this is

331
00:17:25.119 --> 00:17:27.880
<v Speaker 4>my my champion thing I'd like to champion to the

332
00:17:27.920 --> 00:17:30.440
<v Speaker 4>world is that actually, Doom complete is the more interesting

333
00:17:30.440 --> 00:17:31.319
<v Speaker 4>mathematical proof.

334
00:17:32.039 --> 00:17:35.359
<v Speaker 3>By the way, I'm reminded that somebody implemented the CPU

335
00:17:35.440 --> 00:17:36.880
<v Speaker 3>inside my Minecraft.

336
00:17:37.559 --> 00:17:40.240
<v Speaker 4>Yes, yeah, exactly. Yeah, so it's a similar sort of

337
00:17:40.319 --> 00:17:43.240
<v Speaker 4>project to something like that. Yeah.

338
00:17:43.799 --> 00:17:47.960
<v Speaker 3>So, going back to what we were saying in the

339
00:17:48.000 --> 00:17:52.519
<v Speaker 3>context of the quote unquote Doom complete, the type system

340
00:17:52.599 --> 00:18:03.920
<v Speaker 3>itself provides the building blocks for implementing additionals and loops, right,

341
00:18:04.279 --> 00:18:08.400
<v Speaker 3>I mean, conditionals would basically be let's say a generic

342
00:18:08.519 --> 00:18:12.440
<v Speaker 3>type that accepts two types and then in a condition

343
00:18:13.000 --> 00:18:17.799
<v Speaker 3>and based on evaluates that condition at build time and

344
00:18:18.039 --> 00:18:21.119
<v Speaker 3>basically would return either the first type or the second

345
00:18:21.160 --> 00:18:22.759
<v Speaker 3>type based on the condition.

346
00:18:22.960 --> 00:18:28.279
<v Speaker 4>Right exactly. Yeah, that's that's basically the kind of core

347
00:18:28.319 --> 00:18:31.480
<v Speaker 4>building blocks that you have, you have and then from there.

348
00:18:31.720 --> 00:18:34.480
<v Speaker 4>So what's funny is there's no loops in the type system,

349
00:18:34.839 --> 00:18:38.200
<v Speaker 4>but there is recursion, so anytime you want to do

350
00:18:38.880 --> 00:18:40.640
<v Speaker 4>right right, So but I'm saying there's no there's no

351
00:18:40.680 --> 00:18:43.480
<v Speaker 4>construct like in JavaScript you can make you can make

352
00:18:43.480 --> 00:18:46.279
<v Speaker 4>a wild loop, but there's no construct of anything like that.

353
00:18:46.319 --> 00:18:51.759
<v Speaker 4>But you can achieve it by making by making conditionals

354
00:18:51.960 --> 00:18:55.000
<v Speaker 4>that have recursion inside of them. They have to have

355
00:18:55.039 --> 00:18:57.039
<v Speaker 4>conditionals because of course if you don't have a condition

356
00:18:57.079 --> 00:19:00.599
<v Speaker 4>then it could loop forever. But anyway, this is the

357
00:19:00.640 --> 00:19:02.920
<v Speaker 4>construct that you end up using. And so actually all

358
00:19:02.920 --> 00:19:05.519
<v Speaker 4>of the machine state and all the looping and all

359
00:19:05.559 --> 00:19:09.359
<v Speaker 4>that stuff happens with recursion purely.

360
00:19:10.200 --> 00:19:12.799
<v Speaker 3>Well, you know, when I first saw it, I was

361
00:19:12.920 --> 00:19:17.480
<v Speaker 3>I laughed because again I encountered similar not nothing to

362
00:19:17.519 --> 00:19:23.079
<v Speaker 3>this extent, but similar, let's call it similar kind of

363
00:19:23.279 --> 00:19:31.519
<v Speaker 3>projects in concept, not in scope, back in the temp

364
00:19:31.799 --> 00:19:36.039
<v Speaker 3>C plus plus template days. And basically it's because if

365
00:19:36.039 --> 00:19:39.680
<v Speaker 3>you think about it, type system with generics is effectively

366
00:19:39.720 --> 00:19:41.079
<v Speaker 3>a flavor of lisp.

367
00:19:41.759 --> 00:19:44.240
<v Speaker 4>Yeah, I tell people that that it's it's it's very

368
00:19:44.319 --> 00:19:47.279
<v Speaker 4>much like a lispy sort of thing where you also

369
00:19:47.400 --> 00:19:50.759
<v Speaker 4>don't have statements all you all you have is expressions.

370
00:19:51.240 --> 00:19:54.519
<v Speaker 4>So you have a you have a sense in which

371
00:19:54.720 --> 00:19:58.119
<v Speaker 4>you can create statements by having an expression that you

372
00:19:58.119 --> 00:20:00.400
<v Speaker 4>know is returned from something else. And there are some

373
00:20:00.440 --> 00:20:02.160
<v Speaker 4>workarounds that I came up with but didn't end up

374
00:20:02.200 --> 00:20:04.480
<v Speaker 4>actually needing to use to kind of fake statements using

375
00:20:04.559 --> 00:20:07.920
<v Speaker 4>generic parameters. But yeah, in the end, it's it's a

376
00:20:08.000 --> 00:20:10.960
<v Speaker 4>very straightforward system. If you just think of it like lisp,

377
00:20:11.039 --> 00:20:13.640
<v Speaker 4>it kind of maps to that fairly, fairly directly.

378
00:20:14.359 --> 00:20:19.039
<v Speaker 3>So basically, when you write a program, let's put doom

379
00:20:19.039 --> 00:20:21.119
<v Speaker 3>aside for a minute. Let's say I'm writing a much

380
00:20:21.519 --> 00:20:25.759
<v Speaker 3>simpler quote unquote program in the typescript type system, right,

381
00:20:25.920 --> 00:20:32.839
<v Speaker 3>I run the program by executing by executing TSC.

382
00:20:33.359 --> 00:20:36.160
<v Speaker 4>Right, Yeah, so you run the type checker. So you know,

383
00:20:36.200 --> 00:20:37.759
<v Speaker 4>the thing that we talked about in the beginning that

384
00:20:37.839 --> 00:20:41.880
<v Speaker 4>keeps you from mistyping red or green or blue. That

385
00:20:42.079 --> 00:20:47.720
<v Speaker 4>system is the thing that is actually running your you know, program,

386
00:20:48.039 --> 00:20:49.279
<v Speaker 4>if you want to think of it that way, And

387
00:20:49.319 --> 00:20:51.559
<v Speaker 4>the program is a type, so actually all of Doom

388
00:20:51.880 --> 00:20:54.359
<v Speaker 4>had to be converted in a sense into a single

389
00:20:54.960 --> 00:20:57.279
<v Speaker 4>individual typescript type.

390
00:20:58.039 --> 00:21:03.920
<v Speaker 3>So that begs the question again before delving into Doom itself. Yep,

391
00:21:04.000 --> 00:21:07.039
<v Speaker 3>how do you input or output anything?

392
00:21:08.559 --> 00:21:11.960
<v Speaker 4>So ASKI, art is the way that you output? So

393
00:21:12.359 --> 00:21:14.880
<v Speaker 4>you basically because I said that you have a you

394
00:21:14.920 --> 00:21:18.160
<v Speaker 4>know you have strings, I found a way to display

395
00:21:18.440 --> 00:21:21.480
<v Speaker 4>a kind of two dimensional string, so you have new

396
00:21:21.519 --> 00:21:25.759
<v Speaker 4>lines and it's actually new lines are collapsed by the editor.

397
00:21:25.799 --> 00:21:28.240
<v Speaker 4>But essentially what happens is there's a type and you

398
00:21:28.240 --> 00:21:31.160
<v Speaker 4>hover your mouse over it, and what appears in the

399
00:21:31.160 --> 00:21:33.960
<v Speaker 4>hover that's supposed to be the you know, the place

400
00:21:34.000 --> 00:21:35.440
<v Speaker 4>where it is, the place where it tells you what

401
00:21:35.480 --> 00:21:37.480
<v Speaker 4>the type of that variable is. What appears is a

402
00:21:37.480 --> 00:21:40.559
<v Speaker 4>frame of Doom. That's the end kind of result of

403
00:21:40.599 --> 00:21:46.200
<v Speaker 4>the whole thing. As for inputs, the inputs are like

404
00:21:46.279 --> 00:21:49.119
<v Speaker 4>pre encoded, but you can send them in as parameters.

405
00:21:49.680 --> 00:21:52.720
<v Speaker 4>So it's kind of similar to any kind of other

406
00:21:52.799 --> 00:21:55.519
<v Speaker 4>programming where you know you you would have there's no

407
00:21:55.640 --> 00:21:58.559
<v Speaker 4>keyboard inputs and there's no time dimension. So if you

408
00:21:58.599 --> 00:22:01.559
<v Speaker 4>have keyboard inputs you would use is like a list

409
00:22:01.680 --> 00:22:04.839
<v Speaker 4>of keyboard commands, very similar to how like a tool

410
00:22:04.839 --> 00:22:08.400
<v Speaker 4>assisted speed runner works. So you would just say on

411
00:22:08.400 --> 00:22:10.440
<v Speaker 4>this frame, do this, on that frame, do that, and

412
00:22:10.519 --> 00:22:12.440
<v Speaker 4>it would take those on a frame by frame basis

413
00:22:12.480 --> 00:22:15.680
<v Speaker 4>and execute those keystrokes. So I actually also did a

414
00:22:15.759 --> 00:22:18.079
<v Speaker 4>version of pong that is a simplified version of the

415
00:22:18.079 --> 00:22:19.880
<v Speaker 4>whole system, just to demonstrate how that works.

416
00:22:20.279 --> 00:22:27.920
<v Speaker 3>Basically, you've got let's say, the output is is the

417
00:22:28.400 --> 00:22:30.960
<v Speaker 3>display and the current state, and the input for the

418
00:22:31.039 --> 00:22:34.640
<v Speaker 3>next frame would be the current state and whatever keys

419
00:22:34.720 --> 00:22:38.599
<v Speaker 3>were pressed. Yes, and I air quoted keys exactly.

420
00:22:40.200 --> 00:22:41.839
<v Speaker 4>Yeah, you got it. It's a it's a it's a

421
00:22:41.839 --> 00:22:49.440
<v Speaker 4>functional Uh, it's just like pure functional recursion state machine. Yeah.

422
00:22:49.680 --> 00:22:56.400
<v Speaker 3>So that church. You know what I'm referring to with church? No,

423
00:22:58.200 --> 00:22:59.920
<v Speaker 3>well he lambda?

424
00:23:00.839 --> 00:23:02.759
<v Speaker 4>Oh oh the person, okay, yeah, the church?

425
00:23:02.799 --> 00:23:03.200
<v Speaker 3>The person?

426
00:23:04.279 --> 00:23:06.680
<v Speaker 4>Well, what is it? It's what's the theorem? Is it

427
00:23:06.759 --> 00:23:09.559
<v Speaker 4>the church? Something hypothesis? I don't know.

428
00:23:09.640 --> 00:23:13.480
<v Speaker 3>Oh, I forget, I need to check on Wikipedia or something.

429
00:23:14.079 --> 00:23:15.680
<v Speaker 4>I'm not so I have to say with like one

430
00:23:15.720 --> 00:23:17.359
<v Speaker 4>fun part of this project for me is I don't

431
00:23:17.400 --> 00:23:22.240
<v Speaker 4>have any I think ignorance played a very key role

432
00:23:22.359 --> 00:23:24.960
<v Speaker 4>in the completion of this project because I didn't know.

433
00:23:25.000 --> 00:23:26.799
<v Speaker 4>I mean, I didn't know anything about any of this stuff.

434
00:23:26.799 --> 00:23:28.640
<v Speaker 4>I had never written C code before, you know, doom

435
00:23:28.680 --> 00:23:32.599
<v Speaker 4>is written in C. I had never touched huge portions

436
00:23:32.640 --> 00:23:35.000
<v Speaker 4>of the things that I learned in this project. I've

437
00:23:35.039 --> 00:23:38.039
<v Speaker 4>had some really fantastic jobs over my career, and I've

438
00:23:38.160 --> 00:23:40.839
<v Speaker 4>really enjoyed the things that I've learned. But I learned

439
00:23:40.880 --> 00:23:43.680
<v Speaker 4>more and on this one project than I did in

440
00:23:43.720 --> 00:23:46.920
<v Speaker 4>the prior ten years of working professionally. Quite hard, I

441
00:23:47.000 --> 00:23:49.039
<v Speaker 4>might add, you know, like you can get out a

442
00:23:49.079 --> 00:23:52.039
<v Speaker 4>lot out of a personal project like this that you know,

443
00:23:52.880 --> 00:23:54.759
<v Speaker 4>my job was to figure out how it all works,

444
00:23:54.920 --> 00:23:57.400
<v Speaker 4>and I had to There's no stone that I could

445
00:23:57.519 --> 00:23:58.200
<v Speaker 4>leave unturned.

446
00:23:58.880 --> 00:24:04.559
<v Speaker 3>So basically, you're saying you had this crazy idea, you

447
00:24:04.720 --> 00:24:09.240
<v Speaker 3>thought that it must be impossible, and you essentially set

448
00:24:09.279 --> 00:24:13.799
<v Speaker 3>out to prove that it's impossible. Yes, and that every

449
00:24:13.839 --> 00:24:16.960
<v Speaker 3>time you ran into what appeared to be a brick

450
00:24:17.039 --> 00:24:20.240
<v Speaker 3>wall and kind of thought about saying, hey, I proved

451
00:24:20.240 --> 00:24:24.000
<v Speaker 3>it almost impossible. You said, you had the thought of, actually,

452
00:24:24.279 --> 00:24:26.640
<v Speaker 3>I can overcome this challenge, right.

453
00:24:26.839 --> 00:24:31.240
<v Speaker 4>Yeah, exactly. Yeah, I mean, it's funny. There was someone

454
00:24:31.279 --> 00:24:34.680
<v Speaker 4>on Reddit when that when the video was posted announcing

455
00:24:34.720 --> 00:24:38.119
<v Speaker 4>the project, and we're kind of talking about burnout, and

456
00:24:38.160 --> 00:24:41.240
<v Speaker 4>they said, yeah, I mean, it's kind of weird that you,

457
00:24:41.240 --> 00:24:43.079
<v Speaker 4>you know, I was a little burned out before starting

458
00:24:43.079 --> 00:24:45.200
<v Speaker 4>this project, and this was a kind of way to

459
00:24:45.240 --> 00:24:49.359
<v Speaker 4>rekindle the love of, you know, the software craft and programming.

460
00:24:50.000 --> 00:24:51.799
<v Speaker 4>And they said, it's kind of weird that you solved

461
00:24:51.839 --> 00:24:55.119
<v Speaker 4>your burnout by working eighteen hours a day, because I

462
00:24:55.160 --> 00:24:57.960
<v Speaker 4>worked very hard. But my answer to that is, I

463
00:24:58.000 --> 00:25:02.000
<v Speaker 4>think I think burnout happens when you work on something

464
00:25:02.200 --> 00:25:04.119
<v Speaker 4>and you don't get out what you perceive to be

465
00:25:04.200 --> 00:25:06.359
<v Speaker 4>a result. Actually, I've known people who get burned out

466
00:25:06.400 --> 00:25:09.160
<v Speaker 4>that are not working hard, and that itself can be

467
00:25:09.519 --> 00:25:11.440
<v Speaker 4>like something that burns you out. It's when you don't

468
00:25:11.480 --> 00:25:14.079
<v Speaker 4>perceive there to be something coming out of your efforts.

469
00:25:14.640 --> 00:25:17.680
<v Speaker 4>And this project was the absolute opposite of anything like that.

470
00:25:18.519 --> 00:25:22.079
<v Speaker 4>It constantly happened to me that I would think, no way,

471
00:25:22.279 --> 00:25:24.759
<v Speaker 4>is there any chance that I'm possibly going to be

472
00:25:24.759 --> 00:25:27.720
<v Speaker 4>able to solve that problem? And then some hours would

473
00:25:27.720 --> 00:25:31.960
<v Speaker 4>pass and I'd go, well, you know what, if I

474
00:25:32.000 --> 00:25:34.119
<v Speaker 4>could solve these other three things that are kind of

475
00:25:34.160 --> 00:25:38.440
<v Speaker 4>sub problems of that larger problem, then I probably could

476
00:25:38.480 --> 00:25:39.839
<v Speaker 4>hack my way through it. But I'm not going to

477
00:25:39.880 --> 00:25:41.440
<v Speaker 4>be able to solve those three things, and so I

478
00:25:41.440 --> 00:25:43.319
<v Speaker 4>would go down the path of trying each one of

479
00:25:43.319 --> 00:25:45.319
<v Speaker 4>those things, and for each one of those things, in

480
00:25:45.359 --> 00:25:48.079
<v Speaker 4>many cases, I'd go there's no way. Right over it

481
00:25:48.359 --> 00:25:50.920
<v Speaker 4>always happen all over again, I'd say there's no way.

482
00:25:51.400 --> 00:25:54.160
<v Speaker 4>And then so but that experience of thinking there's no

483
00:25:54.200 --> 00:25:55.799
<v Speaker 4>way I could do it, there's no way I could

484
00:25:55.839 --> 00:25:58.119
<v Speaker 4>make this happen, and then making it happen a day

485
00:25:58.200 --> 00:26:00.799
<v Speaker 4>or a week later, over an over again, on thousands

486
00:26:00.799 --> 00:26:04.319
<v Speaker 4>of little problems, that was very invigorating for me, and

487
00:26:04.359 --> 00:26:05.559
<v Speaker 4>it was very motivating for me.

488
00:26:06.319 --> 00:26:10.039
<v Speaker 3>And you kind of hinted at that, But how long

489
00:26:10.119 --> 00:26:11.319
<v Speaker 3>did this take you?

490
00:26:12.759 --> 00:26:15.359
<v Speaker 4>I have such a hard time answering this question. So, like,

491
00:26:16.279 --> 00:26:18.640
<v Speaker 4>in total, from the moment I started trying to the

492
00:26:18.680 --> 00:26:20.839
<v Speaker 4>moment I announced the video was a year and a half.

493
00:26:23.440 --> 00:26:26.880
<v Speaker 4>Over a decent portion of that time I was unemployed,

494
00:26:27.480 --> 00:26:29.279
<v Speaker 4>like let's say three months or four months, and I

495
00:26:29.279 --> 00:26:31.559
<v Speaker 4>worked very very hard on it, Like I was absolutely

496
00:26:31.599 --> 00:26:35.240
<v Speaker 4>at my desk typing for at least eighteen hours a day,

497
00:26:35.359 --> 00:26:38.519
<v Speaker 4>Like I mean there were some twenty four hour stretches

498
00:26:38.559 --> 00:26:40.839
<v Speaker 4>where I literally did not stand up from my desk

499
00:26:41.079 --> 00:26:43.759
<v Speaker 4>for one whole day night cycle.

500
00:26:44.839 --> 00:26:48.880
<v Speaker 3>If I may ask something personal and feel free to answer,

501
00:26:49.200 --> 00:26:50.079
<v Speaker 3>are you single?

502
00:26:50.839 --> 00:26:55.319
<v Speaker 4>Yes, I'm not single. I have a wife and two kids,

503
00:26:55.599 --> 00:26:56.359
<v Speaker 4>two young kids.

504
00:26:58.880 --> 00:27:00.400
<v Speaker 2>I think very understanding.

505
00:27:01.079 --> 00:27:04.519
<v Speaker 4>Yeah, I think like Actually some people ask on a

506
00:27:04.759 --> 00:27:06.839
<v Speaker 4>to follow your lead on the personal note there some

507
00:27:06.839 --> 00:27:09.359
<v Speaker 4>people ask like, well, like, why do a thing like

508
00:27:09.359 --> 00:27:11.079
<v Speaker 4>this personally?

509
00:27:11.119 --> 00:27:11.359
<v Speaker 3>For me?

510
00:27:11.599 --> 00:27:14.079
<v Speaker 4>One of the reasons is I worked so hard on

511
00:27:14.079 --> 00:27:18.160
<v Speaker 4>this project. I really really pushed myself as hard as

512
00:27:18.200 --> 00:27:20.559
<v Speaker 4>I have ever pushed myself on anything for so long,

513
00:27:21.400 --> 00:27:23.359
<v Speaker 4>you know, And I did actually after that three months,

514
00:27:23.359 --> 00:27:25.880
<v Speaker 4>I did do some contracting and I eventually got a

515
00:27:25.960 --> 00:27:28.359
<v Speaker 4>job working full time, and I, you know, fit this

516
00:27:28.400 --> 00:27:30.240
<v Speaker 4>in and I have squiggle comp as well. I started

517
00:27:30.279 --> 00:27:32.759
<v Speaker 4>a conference during the same time. So there's a lot

518
00:27:32.799 --> 00:27:36.079
<v Speaker 4>going on with Josh. Yeah, Josh Gobert, Yes, exactly.

519
00:27:36.160 --> 00:27:38.519
<v Speaker 3>Well, I guess on this on this podcast as well.

520
00:27:39.319 --> 00:27:41.920
<v Speaker 3>And by the way, I recently just met him at

521
00:27:41.920 --> 00:27:43.039
<v Speaker 3>the conference in Romania.

522
00:27:43.160 --> 00:27:46.440
<v Speaker 4>So yeah, awesome, Oh yeah, yeah right yeah, And I.

523
00:27:46.480 --> 00:27:48.599
<v Speaker 3>Have a siren and I will have to drop off.

524
00:27:48.839 --> 00:27:51.680
<v Speaker 3>I will rejoin you hopefully in about fifteen minutes. I

525
00:27:51.720 --> 00:27:53.960
<v Speaker 3>have put problems with that then to all listeners.

526
00:27:54.519 --> 00:27:58.759
<v Speaker 4>So what happened is I, you know, I put this

527
00:27:58.799 --> 00:28:01.880
<v Speaker 4>project together and it took a year of so much

528
00:28:01.880 --> 00:28:04.400
<v Speaker 4>hard work. And I always say, like, imagine being so.

529
00:28:04.440 --> 00:28:07.240
<v Speaker 4>My wife is not technical, she's not an engineer, and

530
00:28:07.519 --> 00:28:09.799
<v Speaker 4>I just kept telling her this is such a big deal,

531
00:28:09.880 --> 00:28:11.559
<v Speaker 4>this would be really cool if someone could do it.

532
00:28:12.000 --> 00:28:15.119
<v Speaker 4>And she supported me throughout that entire process, and there

533
00:28:15.200 --> 00:28:18.200
<v Speaker 4>was never a moment when she doubted me or said

534
00:28:18.279 --> 00:28:21.119
<v Speaker 4>are you sure this is really worth all this effort?

535
00:28:21.279 --> 00:28:23.440
<v Speaker 4>You know, she would ask how it's going a lot

536
00:28:23.519 --> 00:28:25.440
<v Speaker 4>and I could never really give a good answer because

537
00:28:25.440 --> 00:28:27.599
<v Speaker 4>I thought it was always a day away from being over.

538
00:28:28.720 --> 00:28:30.839
<v Speaker 4>But for me, it did wonders for my marriage in

539
00:28:30.880 --> 00:28:33.160
<v Speaker 4>a lot of ways. Like imagine the trust that's built

540
00:28:33.240 --> 00:28:35.279
<v Speaker 4>over a project like that, and you know, you come

541
00:28:35.319 --> 00:28:38.160
<v Speaker 4>out the other side successful and find out that you know,

542
00:28:38.319 --> 00:28:40.559
<v Speaker 4>you look back and see that your partner was supporting

543
00:28:40.559 --> 00:28:43.480
<v Speaker 4>you and picking up slack the whole way while you were,

544
00:28:43.519 --> 00:28:45.960
<v Speaker 4>you know, in your dungeon, you know, coding for twenty

545
00:28:46.000 --> 00:28:47.920
<v Speaker 4>four hours straight without being you know, there are many

546
00:28:48.000 --> 00:28:50.279
<v Speaker 4>nights where she would set a cold plate on the

547
00:28:50.319 --> 00:28:53.200
<v Speaker 4>table next to me because I missed dinner, and then

548
00:28:53.200 --> 00:28:55.400
<v Speaker 4>she would come back, and you know, these these moments

549
00:28:55.400 --> 00:28:57.680
<v Speaker 4>are temporary. I spent quite a lot of time with

550
00:28:57.720 --> 00:28:59.960
<v Speaker 4>the kids and the family, you know, But from me,

551
00:29:00.160 --> 00:29:01.960
<v Speaker 4>it's very hot and cold, and when it's hot, it's

552
00:29:02.000 --> 00:29:03.880
<v Speaker 4>burning hot, and when it's cold it's ice cold. There

553
00:29:03.880 --> 00:29:06.400
<v Speaker 4>were also days where I didn't touch it. But it's

554
00:29:06.400 --> 00:29:08.480
<v Speaker 4>hard to answer how long I spent because you know,

555
00:29:08.680 --> 00:29:10.559
<v Speaker 4>I remember times where I had to drive an hour

556
00:29:10.599 --> 00:29:12.720
<v Speaker 4>from place to place to get something or do something,

557
00:29:13.000 --> 00:29:15.119
<v Speaker 4>and I don't even remember the drive because the whole

558
00:29:15.160 --> 00:29:18.480
<v Speaker 4>time I was just thinking about like some algorithmic challenge

559
00:29:18.559 --> 00:29:20.400
<v Speaker 4>or some process that I had to work through with

560
00:29:20.480 --> 00:29:25.519
<v Speaker 4>this problem. And it's a you know, it's tough to

561
00:29:26.079 --> 00:29:28.519
<v Speaker 4>it's tough to put it into numbers. Yeah, that's it.

562
00:29:28.599 --> 00:29:30.799
<v Speaker 1>Sounds like you're pretty bipolar about it, huh. I mean

563
00:29:31.039 --> 00:29:31.799
<v Speaker 1>very hot, I don't.

564
00:29:31.599 --> 00:29:34.640
<v Speaker 4>Know, very cold. Yeah I suppose. Yeah, Well, I mean like,

565
00:29:34.680 --> 00:29:36.880
<v Speaker 4>I don't know. I don't think I have a diagnosis

566
00:29:36.920 --> 00:29:38.960
<v Speaker 4>or something like that. But it's just I don't find

567
00:29:38.960 --> 00:29:42.079
<v Speaker 4>it difficult to focus for long periods. I've always been

568
00:29:42.119 --> 00:29:44.839
<v Speaker 4>that way. It's it's but I also don't find it

569
00:29:44.880 --> 00:29:47.359
<v Speaker 4>hard to you know, it just depends on what mode

570
00:29:47.359 --> 00:29:48.960
<v Speaker 4>I'm in, but I find it very easy to switch

571
00:29:48.960 --> 00:29:51.119
<v Speaker 4>into a mode where it's like hyper focused, And I

572
00:29:51.160 --> 00:29:53.079
<v Speaker 4>find it also easy to switch into a mode where

573
00:29:53.279 --> 00:29:55.440
<v Speaker 4>I'm doing ten different things at once and like none

574
00:29:55.480 --> 00:30:02.720
<v Speaker 4>of them really get the attention primary attention. Yeah, that'd

575
00:30:02.720 --> 00:30:03.519
<v Speaker 4>be the way I would put it.

576
00:30:03.599 --> 00:30:04.759
<v Speaker 3>Yeah, So.

577
00:30:06.599 --> 00:30:11.559
<v Speaker 1>I'm so other than you know, wanting to achieve fames

578
00:30:11.599 --> 00:30:17.079
<v Speaker 1>so that you could be on this podcast. You know,

579
00:30:17.160 --> 00:30:20.680
<v Speaker 1>I think of the the quote you know Edmund Hillary,

580
00:30:20.680 --> 00:30:21.759
<v Speaker 1>why did you climb out evers?

581
00:30:21.799 --> 00:30:23.359
<v Speaker 2>Because it was there? You know?

582
00:30:25.799 --> 00:30:29.000
<v Speaker 1>So does this Uh I'm trying to think how to

583
00:30:29.000 --> 00:30:31.440
<v Speaker 1>ask the question. So now that you've done this, is

584
00:30:31.480 --> 00:30:34.839
<v Speaker 1>this yeah give you skills?

585
00:30:34.920 --> 00:30:36.079
<v Speaker 2>You think that uh?

586
00:30:36.640 --> 00:30:39.440
<v Speaker 1>Serve you? You know in job hunt or job? Is it

587
00:30:39.559 --> 00:30:42.519
<v Speaker 1>just more for personal satisfaction? Like, Hey, I did something

588
00:30:42.519 --> 00:30:45.960
<v Speaker 1>that I thought was impossible. Right, you know, what's the

589
00:30:46.119 --> 00:30:47.599
<v Speaker 1>what's the worldwide fame that is?

590
00:30:47.720 --> 00:30:50.880
<v Speaker 4>I'll tell you. I'll tell you the truth, the truth.

591
00:30:51.240 --> 00:30:53.680
<v Speaker 4>It's hard to explain this without making myself sound like

592
00:30:53.680 --> 00:30:56.920
<v Speaker 4>a like total psycho. But the reality is the way

593
00:30:56.920 --> 00:31:00.000
<v Speaker 4>that I built is if I had completed this project

594
00:31:00.440 --> 00:31:03.559
<v Speaker 4>and closed my laptop and never spoke of it again

595
00:31:03.720 --> 00:31:06.880
<v Speaker 4>to anybody and like maybe my four or five closest

596
00:31:06.880 --> 00:31:08.599
<v Speaker 4>friends know that I'm working on it, but then like

597
00:31:08.640 --> 00:31:10.680
<v Speaker 4>the world never heard, I would probably have been like

598
00:31:10.799 --> 00:31:13.799
<v Speaker 4>ninety five percent as satisfied as if like what I

599
00:31:13.839 --> 00:31:15.559
<v Speaker 4>did end up doing, which is like announcing it and

600
00:31:15.599 --> 00:31:17.759
<v Speaker 4>open sourcing it and getting a lot. It's brought me

601
00:31:17.799 --> 00:31:19.880
<v Speaker 4>a lot of recognition, which I'm very happy to have.

602
00:31:21.119 --> 00:31:24.200
<v Speaker 4>But I didn't do it for those reasons. I did

603
00:31:24.200 --> 00:31:28.880
<v Speaker 4>it because I think I was born with the how

604
00:31:28.920 --> 00:31:32.039
<v Speaker 4>hard could it be? Jane, You know, it's kind of

605
00:31:32.039 --> 00:31:33.759
<v Speaker 4>like what you said with the mount everst quote, just

606
00:31:34.160 --> 00:31:37.920
<v Speaker 4>I thought it was. I also the ignorance played a

607
00:31:38.000 --> 00:31:42.200
<v Speaker 4>huge role because I frequently thought I was just on

608
00:31:42.240 --> 00:31:44.799
<v Speaker 4>the very cusp of hitting the problem that I thought

609
00:31:44.920 --> 00:31:47.079
<v Speaker 4>would end the project. Because all I wanted was to

610
00:31:47.200 --> 00:31:49.640
<v Speaker 4>end the project. It wasn't. I didn't want this to work.

611
00:31:49.680 --> 00:31:53.319
<v Speaker 4>I never believed It's funny. I have lots of recordings

612
00:31:53.359 --> 00:31:54.880
<v Speaker 4>of me working on this because I knew I might

613
00:31:54.920 --> 00:31:57.559
<v Speaker 4>make a video, and there's a recording of me the

614
00:31:57.640 --> 00:32:01.839
<v Speaker 4>moment that it The project succeeded the frame of Doom rendered,

615
00:32:01.960 --> 00:32:04.400
<v Speaker 4>which took twelve days of running the type checker in

616
00:32:04.960 --> 00:32:07.279
<v Speaker 4>like one hundred and seventy seven terabytes of typescript types

617
00:32:07.319 --> 00:32:10.480
<v Speaker 4>and it's like a whole thing. But it's interesting that

618
00:32:10.599 --> 00:32:14.279
<v Speaker 4>like it's kind of hard to pick out what Like

619
00:32:14.319 --> 00:32:17.359
<v Speaker 4>if I showed somebody the video, it's just like four

620
00:32:17.400 --> 00:32:19.799
<v Speaker 4>minutes of me staring at the screen in silence, just

621
00:32:19.839 --> 00:32:23.079
<v Speaker 4>like like in disbelief. I mean, it's I could not

622
00:32:23.200 --> 00:32:25.640
<v Speaker 4>believe that it worked, because I never believed that it

623
00:32:25.640 --> 00:32:28.200
<v Speaker 4>would work ever until I couldn't deny it anymore because

624
00:32:28.240 --> 00:32:30.599
<v Speaker 4>it was already done. And so it's one of those

625
00:32:30.599 --> 00:32:33.599
<v Speaker 4>things where if I had known better what I was

626
00:32:33.640 --> 00:32:38.839
<v Speaker 4>getting into, I would never have started. And yeah, I mean,

627
00:32:38.880 --> 00:32:41.319
<v Speaker 4>I just I think anybody. And I have friends who are,

628
00:32:41.400 --> 00:32:43.279
<v Speaker 4>like I think, are much better engineers than I am,

629
00:32:43.359 --> 00:32:45.000
<v Speaker 4>that are much more experienced in some sense than I

630
00:32:45.079 --> 00:32:48.400
<v Speaker 4>am with these kinds of systems level programming tasks, and

631
00:32:48.440 --> 00:32:50.200
<v Speaker 4>many of them told me like, why are you doing this?

632
00:32:50.200 --> 00:32:52.440
<v Speaker 4>This is this is not gonna work. How could this work?

633
00:32:52.480 --> 00:32:54.640
<v Speaker 4>And I'd be like, yeah, I believe that it won't

634
00:32:54.680 --> 00:32:57.000
<v Speaker 4>work as well, I'm right there with you. I also

635
00:32:57.119 --> 00:33:00.400
<v Speaker 4>don't think that it's gonna work. However, you know, h

636
00:33:01.720 --> 00:33:02.480
<v Speaker 4>turns out it did.

637
00:33:03.160 --> 00:33:06.079
<v Speaker 1>Yeah, Yeah, it's funny. I'm looking at I'm thinking of

638
00:33:06.160 --> 00:33:10.799
<v Speaker 1>Dan's questions. So I'm looking at the are programming thread

639
00:33:10.880 --> 00:33:18.000
<v Speaker 1>on Reddit with the video, Like, first question is what

640
00:33:18.119 --> 00:33:20.759
<v Speaker 1>kind of daily occupation of regular financial backs fort do

641
00:33:20.799 --> 00:33:22.839
<v Speaker 1>you need to have the guts to invest six months

642
00:33:22.839 --> 00:33:23.480
<v Speaker 1>into a joke?

643
00:33:24.559 --> 00:33:26.119
<v Speaker 4>It is a joke, yeah, I mean, I think, like,

644
00:33:26.519 --> 00:33:28.799
<v Speaker 4>what's funny about the way that this works out is

645
00:33:29.000 --> 00:33:31.920
<v Speaker 4>I said the little, you know, personal tidbit about my marriage.

646
00:33:32.279 --> 00:33:36.680
<v Speaker 4>But actually, from like a career standpoint, what I learned

647
00:33:36.680 --> 00:33:40.160
<v Speaker 4>and this project will I mean, it's I am so

648
00:33:40.319 --> 00:33:42.680
<v Speaker 4>much more capable now than I was before because there

649
00:33:42.880 --> 00:33:44.680
<v Speaker 4>I mean, I had never written C. Now I've written

650
00:33:45.000 --> 00:33:47.720
<v Speaker 4>tons of C. I mean, for me anyway, I've written many, many, many,

651
00:33:47.720 --> 00:33:49.599
<v Speaker 4>tens of thousands of lines of C and worked with

652
00:33:49.680 --> 00:33:53.400
<v Speaker 4>C and refacted C code bases in LVM. I had

653
00:33:53.480 --> 00:33:55.400
<v Speaker 4>never I didn't really know what LVM was, but now

654
00:33:55.400 --> 00:33:58.000
<v Speaker 4>I know quite a lot about the internals of LVM

655
00:33:58.000 --> 00:34:00.839
<v Speaker 4>and how it all works. Also, web assembly, we didn't

656
00:34:00.839 --> 00:34:03.319
<v Speaker 4>touch on it yet, but the way I actually physically

657
00:34:03.359 --> 00:34:08.159
<v Speaker 4>achieved this goal was by building a web assembly runtime

658
00:34:08.280 --> 00:34:11.199
<v Speaker 4>purely in tech script types, compiling doom to web assembly

659
00:34:11.239 --> 00:34:13.800
<v Speaker 4>and then running that in my run time. And so

660
00:34:14.599 --> 00:34:17.440
<v Speaker 4>I built because I built a full web assembly runtime

661
00:34:17.440 --> 00:34:19.719
<v Speaker 4>from scratch, Like there's like one hundred and sixty instructions

662
00:34:19.719 --> 00:34:22.679
<v Speaker 4>that I implemented. And when I say from scratch, you know,

663
00:34:22.679 --> 00:34:25.000
<v Speaker 4>I have to remind you, like there's no addition in

664
00:34:25.039 --> 00:34:28.519
<v Speaker 4>the type system, so even addition was not available to me.

665
00:34:28.679 --> 00:34:32.519
<v Speaker 4>I had to build addition off of abstractions of like

666
00:34:32.800 --> 00:34:36.480
<v Speaker 4>adding and removing characters to binary strings that have like,

667
00:34:36.679 --> 00:34:39.400
<v Speaker 4>you know, thirty two ones or zeros stacked next to

668
00:34:39.400 --> 00:34:41.360
<v Speaker 4>each other in a string. So I had to create

669
00:34:41.840 --> 00:34:44.800
<v Speaker 4>all kinds of abstractions and constructs I didn't know. I mean,

670
00:34:44.800 --> 00:34:47.000
<v Speaker 4>it's like down the list, I didn't know anything about

671
00:34:47.719 --> 00:34:50.400
<v Speaker 4>you know, two's complement binary numbers. And I built a

672
00:34:50.400 --> 00:34:53.440
<v Speaker 4>garbage collector is in the runtime. I didn't know anything

673
00:34:53.480 --> 00:34:55.599
<v Speaker 4>like how garbage collectors work and how that stuff works.

674
00:34:55.639 --> 00:34:59.199
<v Speaker 4>So all these things are so directly applicable, and it's

675
00:34:59.280 --> 00:35:00.920
<v Speaker 4>kind of funny. Before or I announced the project, that

676
00:35:01.000 --> 00:35:03.960
<v Speaker 4>kept happening that like basically every other day at work,

677
00:35:04.400 --> 00:35:06.480
<v Speaker 4>something would happen that I would be able to contribute

678
00:35:07.000 --> 00:35:09.159
<v Speaker 4>to my like what my team is building or what

679
00:35:09.199 --> 00:35:11.480
<v Speaker 4>somebody else on the company is building. That was a

680
00:35:11.519 --> 00:35:15.039
<v Speaker 4>skill that I picked up working on this project. I mean,

681
00:35:15.079 --> 00:35:17.519
<v Speaker 4>it's just it's so directly works out that way, and

682
00:35:17.559 --> 00:35:20.679
<v Speaker 4>so in the end, I think I got a lot

683
00:35:20.719 --> 00:35:23.679
<v Speaker 4>out of it from that perspective. If that makes any sense.

684
00:35:24.159 --> 00:35:25.719
<v Speaker 2>Oh no, it makes perfect sense.

685
00:35:25.800 --> 00:35:25.960
<v Speaker 4>You know.

686
00:35:26.199 --> 00:35:27.760
<v Speaker 1>One of the things that I don't know if you

687
00:35:27.920 --> 00:35:31.079
<v Speaker 1>how often you listen to us, But one of the

688
00:35:31.079 --> 00:35:35.719
<v Speaker 1>things I talk about is the kind of person that

689
00:35:35.760 --> 00:35:37.280
<v Speaker 1>I am is very similar to you, and that I

690
00:35:37.440 --> 00:35:42.519
<v Speaker 1>like to know the internal details of how something works.

691
00:35:43.679 --> 00:35:45.920
<v Speaker 1>You know, what's the little pieces that make it work.

692
00:35:46.000 --> 00:35:51.079
<v Speaker 1>Because once you understand the smaller pieces, then that helps

693
00:35:51.119 --> 00:35:53.960
<v Speaker 1>you understand the bigger picture and maybe even troubleshoot better.

694
00:35:54.360 --> 00:35:54.559
<v Speaker 4>You know.

695
00:35:54.639 --> 00:36:00.239
<v Speaker 1>I started out my tech career back in the You're

696
00:36:00.280 --> 00:36:05.079
<v Speaker 1>doing you know a long time ago, right two years

697
00:36:05.280 --> 00:36:08.400
<v Speaker 1>after Doom came out. Let's put it that way. And

698
00:36:09.840 --> 00:36:12.920
<v Speaker 1>I remember Doom being is Duke Nukem. Is that you

699
00:36:13.000 --> 00:36:15.599
<v Speaker 1>see the character and Doom or is that.

700
00:36:15.679 --> 00:36:17.519
<v Speaker 4>It's a different game. But actually the guy in Doom,

701
00:36:17.639 --> 00:36:19.400
<v Speaker 4>his name is Doom guy.

702
00:36:19.480 --> 00:36:22.360
<v Speaker 1>Okay, they all start with d you know, they run together.

703
00:36:22.400 --> 00:36:27.159
<v Speaker 1>I've never been at a gamer myself anyway, I've always been

704
00:36:27.159 --> 00:36:29.880
<v Speaker 1>the kind of person who likes to know the the

705
00:36:29.880 --> 00:36:32.719
<v Speaker 1>intricate details of how something works, and from my job

706
00:36:32.760 --> 00:36:36.360
<v Speaker 1>it was sort of necessary. The classic example I always

707
00:36:36.360 --> 00:36:39.679
<v Speaker 1>give is as a Spanish speaker, I was somebody who

708
00:36:39.800 --> 00:36:42.440
<v Speaker 1>learned language really easily. But there's two different ways you

709
00:36:42.480 --> 00:36:45.000
<v Speaker 1>can learn. I think that you can learn a spoken

710
00:36:45.079 --> 00:36:49.840
<v Speaker 1>language more so than like a programming language, where there's

711
00:36:50.199 --> 00:36:53.320
<v Speaker 1>you know, the conversational people that you know. You take

712
00:36:53.360 --> 00:36:56.559
<v Speaker 1>a conversational Spanish class and learn how to speak phrases

713
00:36:56.679 --> 00:36:58.920
<v Speaker 1>and and stuff, and you know how to say what

714
00:36:58.960 --> 00:37:00.840
<v Speaker 1>you're saying, but you don't really have to understand the

715
00:37:00.840 --> 00:37:03.639
<v Speaker 1>building blocks. Whereas the way I learned it was learning

716
00:37:03.639 --> 00:37:06.800
<v Speaker 1>the building blocks, you know, verbs, verb, conjugation, which is

717
00:37:06.840 --> 00:37:10.280
<v Speaker 1>sort of the crux of any language, right, nouns and

718
00:37:10.360 --> 00:37:12.880
<v Speaker 1>all the different well all the different verb tenses and

719
00:37:13.559 --> 00:37:15.159
<v Speaker 1>and that kind of stuff, so I understand it. So

720
00:37:15.199 --> 00:37:17.000
<v Speaker 1>then once I have the building blocks, then I can

721
00:37:17.000 --> 00:37:21.559
<v Speaker 1>piece things together and make a more complete whole. I'm

722
00:37:21.559 --> 00:37:24.960
<v Speaker 1>waxing eloquent here, but I just started. So I just

723
00:37:24.960 --> 00:37:27.480
<v Speaker 1>started a new job this week in a new company,

724
00:37:27.719 --> 00:37:33.280
<v Speaker 1>and going through the interview process, which is long in itself,

725
00:37:33.320 --> 00:37:37.599
<v Speaker 1>one of the questions I got was basically, how I'm

726
00:37:37.599 --> 00:37:40.679
<v Speaker 1>trying to remember how it was phrased, but how do

727
00:37:40.719 --> 00:37:42.760
<v Speaker 1>you troubleish you? What's your how do you troublesh you?

728
00:37:42.800 --> 00:37:44.719
<v Speaker 1>How do you figure something out? What your tools? And

729
00:37:44.760 --> 00:37:47.679
<v Speaker 1>my answer was the best way to be able to

730
00:37:47.800 --> 00:37:51.360
<v Speaker 1>do that is to know the system right. If you

731
00:37:51.519 --> 00:37:54.719
<v Speaker 1>know your system, you can spot when something's wrong, as

732
00:37:54.800 --> 00:37:56.639
<v Speaker 1>compared to trying to figure out, well.

733
00:37:56.400 --> 00:37:58.320
<v Speaker 2>This must be this year, this must be there.

734
00:37:58.360 --> 00:38:01.000
<v Speaker 1>If you know how it's supposed to work, then you

735
00:38:01.039 --> 00:38:06.079
<v Speaker 1>can identify when something doesn't work. I can remember my

736
00:38:06.119 --> 00:38:09.960
<v Speaker 1>first career out of college was in a bank. I

737
00:38:10.000 --> 00:38:12.440
<v Speaker 1>worked as a in the operation side of a branch

738
00:38:12.679 --> 00:38:15.840
<v Speaker 1>and I did a lot of training and teller training

739
00:38:15.880 --> 00:38:17.719
<v Speaker 1>and stuff in the day, and I can remember hearing

740
00:38:17.719 --> 00:38:20.000
<v Speaker 1>a story of this. This was probably more before my time,

741
00:38:20.000 --> 00:38:21.559
<v Speaker 1>but to me it makes perfect sense that the way

742
00:38:21.559 --> 00:38:24.199
<v Speaker 1>they used to train tellers was you just give them

743
00:38:24.199 --> 00:38:27.119
<v Speaker 1>cash and have them count cash, sit there and count

744
00:38:27.840 --> 00:38:31.039
<v Speaker 1>for a long time, and then you start throwing in counterfeits.

745
00:38:31.760 --> 00:38:35.440
<v Speaker 1>And because you know the original so well, then you

746
00:38:35.440 --> 00:38:37.320
<v Speaker 1>can easily spot a counterfeit something's wrong.

747
00:38:37.719 --> 00:38:39.639
<v Speaker 2>All let's get you back to your point. You know,

748
00:38:39.679 --> 00:38:40.800
<v Speaker 2>you're talking about knowing.

749
00:38:40.760 --> 00:38:43.800
<v Speaker 1>Web assembly and low level c stuff in garbage collection

750
00:38:44.000 --> 00:38:49.079
<v Speaker 1>and binary and strings and stuff like that, that if

751
00:38:49.159 --> 00:38:52.719
<v Speaker 1>you know all those little pieces, all the details, then

752
00:38:52.760 --> 00:38:55.119
<v Speaker 1>you can easily one, you can easily build something. In

753
00:38:55.199 --> 00:39:00.519
<v Speaker 1>two you can spot when something's going wrong. That's got

754
00:39:00.559 --> 00:39:04.280
<v Speaker 1>to be an amazing WELLLGE sad to have to be

755
00:39:04.360 --> 00:39:06.119
<v Speaker 1>able to know all that low level stuff and then

756
00:39:06.119 --> 00:39:07.000
<v Speaker 1>piece it all together.

757
00:39:07.320 --> 00:39:10.519
<v Speaker 3>Welcome and I'm back. Yeah did you miss me?

758
00:39:10.960 --> 00:39:11.519
<v Speaker 4>Yes we did.

759
00:39:11.880 --> 00:39:14.400
<v Speaker 2>Oh you were gone? Oh okay, anyway.

760
00:39:14.440 --> 00:39:20.320
<v Speaker 3>Happy happy to report that apparently nobody was hurting this

761
00:39:20.440 --> 00:39:26.559
<v Speaker 3>barrage all right. Yeah, so well, anyway, I.

762
00:39:26.960 --> 00:39:29.400
<v Speaker 1>Was saying eloquent about knowing the details of a system

763
00:39:29.440 --> 00:39:31.280
<v Speaker 1>based on what he learned from this project.

764
00:39:31.360 --> 00:39:34.400
<v Speaker 4>So I think it's actually a perfect segue. Is something

765
00:39:34.400 --> 00:39:36.920
<v Speaker 4>that I hope people take away from this project is

766
00:39:37.760 --> 00:39:41.960
<v Speaker 4>it's such a complex system that there's no way I

767
00:39:42.000 --> 00:39:44.199
<v Speaker 4>could have kept it all in my head. And I

768
00:39:44.280 --> 00:39:47.599
<v Speaker 4>knew that from the very first commit. From the very beginning,

769
00:39:47.599 --> 00:39:50.559
<v Speaker 4>I knew if there's if I ever really get far down,

770
00:39:50.599 --> 00:39:52.840
<v Speaker 4>if like if I hope I find an early stopping point,

771
00:39:52.880 --> 00:39:54.519
<v Speaker 4>but if I find a mid stopping like I never

772
00:39:54.519 --> 00:39:55.840
<v Speaker 4>thought I would get to the end, so that was

773
00:39:55.880 --> 00:39:57.679
<v Speaker 4>like never on the table. But I thought, even if

774
00:39:57.679 --> 00:40:00.239
<v Speaker 4>I get to a midway stopping point, I we need

775
00:40:00.280 --> 00:40:04.639
<v Speaker 4>to have an extremely extensive test suite. And so the

776
00:40:04.679 --> 00:40:08.480
<v Speaker 4>way that I set it up is basically I run

777
00:40:08.519 --> 00:40:11.159
<v Speaker 4>the same set of inputs against all these programs that test.

778
00:40:11.199 --> 00:40:12.920
<v Speaker 4>Because I told you there's like one hundred and sixteen

779
00:40:13.039 --> 00:40:15.039
<v Speaker 4>instructions that I had to create in the web assembly

780
00:40:15.199 --> 00:40:20.079
<v Speaker 4>run time. So the system is set up to test

781
00:40:20.159 --> 00:40:23.199
<v Speaker 4>the same inputs in that runtime six different ways. And

782
00:40:23.239 --> 00:40:25.760
<v Speaker 4>so the I'll say them very fast. The first way

783
00:40:26.239 --> 00:40:28.840
<v Speaker 4>is just you know, let's say the numbers are one

784
00:40:28.840 --> 00:40:32.119
<v Speaker 4>and two and the operation we're doing is addition. So

785
00:40:32.239 --> 00:40:36.039
<v Speaker 4>we run one plus two in JavaScript, so okay, that's fine.

786
00:40:36.559 --> 00:40:39.559
<v Speaker 4>We run one plus two as strings as binary strings

787
00:40:39.599 --> 00:40:43.639
<v Speaker 4>in JavaScript, that's fine. We do it again in typescript

788
00:40:43.679 --> 00:40:47.079
<v Speaker 4>types purely, so we have a typescript you know, a

789
00:40:47.199 --> 00:40:49.280
<v Speaker 4>routine that can do binary arithmetic, but it doesn't know

790
00:40:49.280 --> 00:40:51.440
<v Speaker 4>anything about web assembly. It's just very low level. We

791
00:40:51.519 --> 00:40:54.679
<v Speaker 4>do it again with decimal numbers in JavaScript, which actually

792
00:40:54.760 --> 00:40:58.840
<v Speaker 4>under the hood converts to binary. That's four. Number five

793
00:40:58.880 --> 00:41:00.880
<v Speaker 4>is where it starts to get really interest. I take

794
00:41:00.880 --> 00:41:03.000
<v Speaker 4>those numbers one and two and I wrote, I hand

795
00:41:03.039 --> 00:41:06.039
<v Speaker 4>wrote a web assembly program that like is like four

796
00:41:06.079 --> 00:41:08.800
<v Speaker 4>lines long and basically just does that one instruction, takes

797
00:41:08.840 --> 00:41:10.639
<v Speaker 4>those two parameters and does that one instruction in the

798
00:41:10.639 --> 00:41:15.639
<v Speaker 4>simplest way possible. And then number six is the where

799
00:41:15.639 --> 00:41:18.599
<v Speaker 4>the rubber meets the road. I run that same set

800
00:41:18.599 --> 00:41:21.159
<v Speaker 4>of inputs in my web assembly run time, which itself

801
00:41:21.199 --> 00:41:23.480
<v Speaker 4>is pretty simple, right, but it's taking that web assembly

802
00:41:23.559 --> 00:41:26.639
<v Speaker 4>artifact that I also ran through the JavaScript web assembly

803
00:41:26.679 --> 00:41:28.719
<v Speaker 4>run time that's built that chips with Node, and you

804
00:41:28.719 --> 00:41:32.239
<v Speaker 4>know JavaScript is built into the JavaScript system. And this

805
00:41:32.400 --> 00:41:35.320
<v Speaker 4>was the method by which I discovered all kinds of

806
00:41:35.360 --> 00:41:38.400
<v Speaker 4>things that I had bad assumptions about that I I mean,

807
00:41:38.880 --> 00:41:41.199
<v Speaker 4>you say assumption, but it's like unknown unknowns. You know,

808
00:41:41.280 --> 00:41:45.000
<v Speaker 4>things I didn't know that I didn't understand, and you know,

809
00:41:45.199 --> 00:41:47.239
<v Speaker 4>some of them got pretty far. Like you know, you

810
00:41:47.280 --> 00:41:49.440
<v Speaker 4>may have heard of like little endian and big Endian.

811
00:41:50.159 --> 00:41:52.079
<v Speaker 4>I had heard those words before, but I didn't really

812
00:41:52.159 --> 00:41:55.480
<v Speaker 4>understand what they mean. And I accidentally. You know, you

813
00:41:55.519 --> 00:41:57.639
<v Speaker 4>have a fifty to fifty chance of implementing a system

814
00:41:57.679 --> 00:41:59.480
<v Speaker 4>one way or the other if you're packing bytes into

815
00:41:59.760 --> 00:42:03.840
<v Speaker 4>memor object, and I accidentally implemented the whole system Big

816
00:42:03.840 --> 00:42:06.760
<v Speaker 4>Indian without knowing it, And it was actually my test

817
00:42:06.800 --> 00:42:10.000
<v Speaker 4>suite that uncovered this for me. Once it works out

818
00:42:10.039 --> 00:42:11.719
<v Speaker 4>that if you, you know, you pack all the bites

819
00:42:11.760 --> 00:42:13.400
<v Speaker 4>in reverse and you read them all out in reverse,

820
00:42:13.480 --> 00:42:17.039
<v Speaker 4>you can get away. You know, webasitmbly is Little Indian

821
00:42:17.199 --> 00:42:19.320
<v Speaker 4>by spec it has to be Little Indian. But it

822
00:42:19.360 --> 00:42:21.320
<v Speaker 4>was only once it was very far along. Actually it

823
00:42:21.360 --> 00:42:24.159
<v Speaker 4>was only once I started working with memory instructions that

824
00:42:24.239 --> 00:42:26.519
<v Speaker 4>operate on a portion of a of a byte, so

825
00:42:27.199 --> 00:42:29.280
<v Speaker 4>I'm sorry, a portion of a word, so like just

826
00:42:29.599 --> 00:42:31.880
<v Speaker 4>the first four bites or the last four bites. Then

827
00:42:31.920 --> 00:42:33.599
<v Speaker 4>I started to get really weird results and I couldn't

828
00:42:33.599 --> 00:42:35.039
<v Speaker 4>figure it out, and so I fixed it. And then

829
00:42:35.119 --> 00:42:36.599
<v Speaker 4>later I was like, wait a second, is this what

830
00:42:36.679 --> 00:42:39.440
<v Speaker 4>Indian this is? And I google it and it's like, oh,

831
00:42:39.559 --> 00:42:41.400
<v Speaker 4>that's ending. So now I'll always know for the rest

832
00:42:41.400 --> 00:42:41.880
<v Speaker 4>of my life.

833
00:42:42.159 --> 00:42:43.880
<v Speaker 3>So now if you google it, do you know where

834
00:42:43.880 --> 00:42:45.719
<v Speaker 3>the terms come from?

835
00:42:46.000 --> 00:42:48.280
<v Speaker 4>Yeah, it's like, what's on? What part is it? Does

836
00:42:48.320 --> 00:42:48.480
<v Speaker 4>it go?

837
00:42:49.199 --> 00:42:53.599
<v Speaker 3>Where the name Big Indian and Little Indian? Do you

838
00:42:53.719 --> 00:42:55.639
<v Speaker 3>know where the origin of the name?

839
00:42:56.079 --> 00:42:58.400
<v Speaker 4>No, it is. I thought it was just like end, like,

840
00:42:58.519 --> 00:42:59.719
<v Speaker 4>what's what's the significant bit?

841
00:42:59.800 --> 00:43:03.800
<v Speaker 3>So it's from it's from Gulliver's travels when when he

842
00:43:03.920 --> 00:43:07.480
<v Speaker 3>visits the land of Lilliput. They have there there there

843
00:43:07.480 --> 00:43:09.760
<v Speaker 3>are actually two countries there and they have a war

844
00:43:10.440 --> 00:43:14.159
<v Speaker 3>and the catalysts for the war, you know, speaking of wars,

845
00:43:14.519 --> 00:43:17.440
<v Speaker 3>the catalyst for their war is when you have a

846
00:43:17.480 --> 00:43:21.480
<v Speaker 3>soft boiled egg, which side do you break the egg on,

847
00:43:22.199 --> 00:43:25.400
<v Speaker 3>the Big Indian part of the egg or the little

848
00:43:25.440 --> 00:43:29.880
<v Speaker 3>Indian part of the egg. And that's that's that's the

849
00:43:30.559 --> 00:43:33.519
<v Speaker 3>that's the source of the war. And Gulliver obviously brings

850
00:43:33.559 --> 00:43:36.440
<v Speaker 3>about peace and whatnot, but that's where the terms big

851
00:43:36.480 --> 00:43:37.880
<v Speaker 3>Indian and little Indian.

852
00:43:39.480 --> 00:43:41.199
<v Speaker 4>You guys really got my number. I love this kind

853
00:43:41.239 --> 00:43:43.599
<v Speaker 4>of trivia stuff, so that's really awesome. Thank you for sharing.

854
00:43:43.760 --> 00:43:49.360
<v Speaker 3>I'm mister, you know, especially as related to history and

855
00:43:49.400 --> 00:43:53.920
<v Speaker 3>programming stuff, so I probably have missed it. You were

856
00:43:53.960 --> 00:43:57.639
<v Speaker 3>talking about the fact that you implemented web assembly in

857
00:43:57.679 --> 00:44:01.719
<v Speaker 3>the type system, so you effectively did not run doom

858
00:44:01.840 --> 00:44:05.239
<v Speaker 3>is doom. You compiled doom into web assembly and then

859
00:44:05.360 --> 00:44:08.960
<v Speaker 3>ran the web assembly in your type system run time.

860
00:44:09.360 --> 00:44:11.800
<v Speaker 4>Yes, it was the first thing I tried. You know,

861
00:44:11.880 --> 00:44:14.960
<v Speaker 4>actually a friend of mine said, hey, who's very smart

862
00:44:14.960 --> 00:44:16.719
<v Speaker 4>in these things? He said, you could probably do a

863
00:44:16.800 --> 00:44:20.000
<v Speaker 4>Klang compiler target target And I was like, Okay, I

864
00:44:20.000 --> 00:44:23.159
<v Speaker 4>don't know what clang is, I don't know what it compiles,

865
00:44:23.239 --> 00:44:25.920
<v Speaker 4>and I don't know what a target is. But I

866
00:44:25.960 --> 00:44:28.960
<v Speaker 4>started looking into that, and I, you know, eventually, actually

867
00:44:28.960 --> 00:44:30.639
<v Speaker 4>it's what the funny thing is is, later I learned

868
00:44:30.719 --> 00:44:32.679
<v Speaker 4>quite deeply what Clang is, and I worked a lot

869
00:44:32.679 --> 00:44:37.360
<v Speaker 4>with Clang and different C compilation tools. But yeah, in

870
00:44:37.400 --> 00:44:40.800
<v Speaker 4>the end, I tried web assembly and it never stopped working.

871
00:44:40.880 --> 00:44:42.800
<v Speaker 4>So some people ask me like how why did how

872
00:44:42.840 --> 00:44:44.840
<v Speaker 4>What was your process for selecting web assembly, And it's

873
00:44:44.880 --> 00:44:46.519
<v Speaker 4>like it was the first thing I tried. I had

874
00:44:46.559 --> 00:44:49.440
<v Speaker 4>never worked with web assembly before. I had no contacts

875
00:44:49.480 --> 00:44:52.960
<v Speaker 4>or exposure to it whatsoever. This was this was the beginning. Yeah,

876
00:44:53.000 --> 00:44:54.960
<v Speaker 4>to me, playing always just a loud sound.

877
00:44:56.679 --> 00:45:02.079
<v Speaker 3>Well, yeah, it's a c Lang compilation. Basically, it's the

878
00:45:02.119 --> 00:45:04.239
<v Speaker 3>output of LVM or something, right.

879
00:45:04.119 --> 00:45:06.119
<v Speaker 4>Yeah, it's a C compiler based on LVM. It's part

880
00:45:06.159 --> 00:45:10.000
<v Speaker 4>of the LVM project and yeah, it's it's very closely

881
00:45:10.320 --> 00:45:11.360
<v Speaker 4>tied to that.

882
00:45:12.760 --> 00:45:16.480
<v Speaker 3>So essentially, anything that can be compiled down to web

883
00:45:16.519 --> 00:45:20.760
<v Speaker 3>assembly can actually be run theoretically at least on your system. Yep,

884
00:45:22.280 --> 00:45:22.920
<v Speaker 3>super cool.

885
00:45:23.159 --> 00:45:24.840
<v Speaker 4>Yeah, I mean it's funny. Like I showed this to

886
00:45:24.840 --> 00:45:27.559
<v Speaker 4>a few people before it was public, and you know,

887
00:45:27.760 --> 00:45:29.559
<v Speaker 4>there were about two people who had the reaction that,

888
00:45:29.679 --> 00:45:33.599
<v Speaker 4>like Dimitri, you're like vastly under selling what this is.

889
00:45:33.639 --> 00:45:37.079
<v Speaker 4>By talking about like focusing on Doom, you're ignoring the

890
00:45:37.079 --> 00:45:39.239
<v Speaker 4>fact that you built a full web like any I

891
00:45:39.239 --> 00:45:42.039
<v Speaker 4>can run Pong, I can run Tetris, I can run Pokemon,

892
00:45:42.119 --> 00:45:44.320
<v Speaker 4>I can run anything, you know, not just games, but

893
00:45:44.360 --> 00:45:49.039
<v Speaker 4>you can do any kind of arbitrary web assembly computations

894
00:45:49.840 --> 00:45:52.679
<v Speaker 4>with your system. And yeah, that might be true, but

895
00:45:52.719 --> 00:45:56.159
<v Speaker 4>you know, Doom makes a better headline.

896
00:45:57.159 --> 00:46:00.719
<v Speaker 3>Now. Again, I apologize if this is something that you

897
00:46:00.760 --> 00:46:08.719
<v Speaker 3>spoke about while I was otherwise engaged. I understand that

898
00:46:08.760 --> 00:46:12.920
<v Speaker 3>you actually had to modify the typescript compiler a little bit.

899
00:46:13.440 --> 00:46:17.039
<v Speaker 4>Yeah, so it was always very important to me. Like,

900
00:46:17.119 --> 00:46:20.599
<v Speaker 4>so I'm a typescript nerd. I mean, I'd love not

901
00:46:20.679 --> 00:46:23.039
<v Speaker 4>to be. Some days, I actually prefer rust quite a lot,

902
00:46:23.039 --> 00:46:27.119
<v Speaker 4>which some people find surprising. Typescript is definitely not my

903
00:46:28.159 --> 00:46:30.239
<v Speaker 4>favorite language to write in. It's just the thing that

904
00:46:30.280 --> 00:46:33.199
<v Speaker 4>I've written the most in and have the most familiarity with.

905
00:46:33.280 --> 00:46:38.920
<v Speaker 4>But you know, in the end, I tried pretty hard

906
00:46:38.920 --> 00:46:44.400
<v Speaker 4>to create something that you know, doesn't know anything about

907
00:46:44.400 --> 00:46:49.119
<v Speaker 4>Doom and doesn't know anything really about Typescript internals. And

908
00:46:49.519 --> 00:46:54.000
<v Speaker 4>there are limits in the Typescript type system that try

909
00:46:54.079 --> 00:46:56.320
<v Speaker 4>to keep you from doing things like this. So they

910
00:46:56.360 --> 00:46:58.840
<v Speaker 4>are like we talked about recursion, Okay, so Typescript has

911
00:46:58.880 --> 00:47:04.000
<v Speaker 4>a recursion limit. It's arbitrary. It's completely arbitrary. It's one

912
00:47:04.119 --> 00:47:07.639
<v Speaker 4>hundred recursions. If you make a type that recurses one

913
00:47:07.679 --> 00:47:12.400
<v Speaker 4>hundred times, it will Typescript will stop and report an error.

914
00:47:13.599 --> 00:47:16.000
<v Speaker 4>And that's just a thing that they built into Typescript

915
00:47:16.119 --> 00:47:21.239
<v Speaker 4>to prevent runaway you know, complexity that you like, accidentally

916
00:47:21.239 --> 00:47:24.840
<v Speaker 4>do some kind of matrix multiplication of you know, wide types,

917
00:47:24.840 --> 00:47:26.760
<v Speaker 4>and you get this like really crazy thing that takes

918
00:47:26.800 --> 00:47:28.840
<v Speaker 4>so many you know, could take years to compute or

919
00:47:28.840 --> 00:47:31.519
<v Speaker 4>whatever you like. That's it's just a it's just a

920
00:47:31.559 --> 00:47:34.599
<v Speaker 4>safety check. It's a safety guard. Well, when I was

921
00:47:34.639 --> 00:47:38.480
<v Speaker 4>developing this, I really needed to remove those safety rails

922
00:47:38.679 --> 00:47:42.159
<v Speaker 4>because I needed to experiment with things that you know,

923
00:47:42.599 --> 00:47:44.840
<v Speaker 4>I would later be able to break up into smaller

924
00:47:44.920 --> 00:47:47.800
<v Speaker 4>pieces I knew, but like when you're in the weeds

925
00:47:47.880 --> 00:47:50.679
<v Speaker 4>kind of trying to shoot around ideas about how to

926
00:47:50.719 --> 00:47:52.719
<v Speaker 4>work on something, it's kind of nice sometimes to like

927
00:47:52.880 --> 00:47:56.360
<v Speaker 4>let it be dangerous. And so I modified I patched.

928
00:47:56.480 --> 00:47:59.519
<v Speaker 4>It's just like ten lines of patches. It's not anything major,

929
00:47:59.559 --> 00:48:02.159
<v Speaker 4>but there are these like you'd think, like, Okay, if

930
00:48:02.159 --> 00:48:03.800
<v Speaker 4>the recursion limit is one hundred, does that mean there's

931
00:48:03.800 --> 00:48:06.320
<v Speaker 4>a place in the code base that says, like, you know, recursions,

932
00:48:06.400 --> 00:48:09.280
<v Speaker 4>number of recursions equals equals one zero zero, And yeah,

933
00:48:09.280 --> 00:48:11.840
<v Speaker 4>there is. So I just went to those places. I

934
00:48:11.880 --> 00:48:14.159
<v Speaker 4>found those limits whenever I hit them, and I just

935
00:48:14.280 --> 00:48:17.719
<v Speaker 4>changed them to like infinity, so that.

936
00:48:17.920 --> 00:48:20.519
<v Speaker 3>I would probably also the number of types that can

937
00:48:20.559 --> 00:48:21.480
<v Speaker 3>exist in the system.

938
00:48:22.000 --> 00:48:26.039
<v Speaker 4>Right, Yeah, there's a there's a type instantiation limit. There's

939
00:48:26.159 --> 00:48:29.920
<v Speaker 4>there's a couple limits. And so these limits are kind

940
00:48:29.960 --> 00:48:34.639
<v Speaker 4>of core to the Typescript system, but they're totally arbitrary,

941
00:48:35.119 --> 00:48:37.800
<v Speaker 4>and it actually does work without Like the final thing

942
00:48:37.840 --> 00:48:40.280
<v Speaker 4>that I created will render the frame of Doom with

943
00:48:40.599 --> 00:48:44.599
<v Speaker 4>vanilla Typescript with no limits removed. But it was just

944
00:48:44.679 --> 00:48:46.760
<v Speaker 4>very useful while I was working to be able to

945
00:48:47.800 --> 00:48:50.199
<v Speaker 4>kind of like soft remove those limits.

946
00:48:50.519 --> 00:48:54.079
<v Speaker 3>So you know, so how long does it actually take

947
00:48:54.199 --> 00:48:56.440
<v Speaker 3>to render one frame of Doom on your computer?

948
00:48:56.800 --> 00:48:59.159
<v Speaker 4>Yeah, so it took took twelve and a half days

949
00:48:59.199 --> 00:49:03.199
<v Speaker 4>to get to render the first frame, and it was

950
00:49:03.280 --> 00:49:06.000
<v Speaker 4>very important to me. Actually, I did a little squarely

951
00:49:06.039 --> 00:49:08.400
<v Speaker 4>business inside of the Doom code to make sure that

952
00:49:08.480 --> 00:49:11.840
<v Speaker 4>the first frame is inside of a game level, because

953
00:49:12.079 --> 00:49:14.920
<v Speaker 4>the real first frame of Doom is actually just a

954
00:49:15.000 --> 00:49:17.719
<v Speaker 4>static asset. It's a there's like an image that ships

955
00:49:17.760 --> 00:49:20.679
<v Speaker 4>with the file, that ships with the I don't want to.

956
00:49:20.719 --> 00:49:22.679
<v Speaker 4>We can get into Doom like how Doom works internally

957
00:49:22.719 --> 00:49:25.480
<v Speaker 4>if you'd like, But anyway, it's not actually that hard,

958
00:49:25.519 --> 00:49:28.119
<v Speaker 4>Like it's just it's just a picture that was put

959
00:49:28.159 --> 00:49:30.760
<v Speaker 4>into the codebase. But I don't want to do that.

960
00:49:30.800 --> 00:49:32.280
<v Speaker 4>I want to I want to boot the whole game.

961
00:49:32.320 --> 00:49:34.920
<v Speaker 4>I want to boot the enemy system. I want to

962
00:49:34.920 --> 00:49:37.360
<v Speaker 4>boot the game. Map rendering it does like some kind

963
00:49:37.400 --> 00:49:40.719
<v Speaker 4>of it's not ray tracing. What is it called ray casting?

964
00:49:41.079 --> 00:49:43.639
<v Speaker 4>It does ray casting to to kind of like figure

965
00:49:43.639 --> 00:49:45.760
<v Speaker 4>out all the pixels of all the obstructions and all

966
00:49:45.800 --> 00:49:48.280
<v Speaker 4>the geometry of the level. And you know, there's like

967
00:49:48.320 --> 00:49:50.480
<v Speaker 4>a system for your weapon and your health.

968
00:49:50.239 --> 00:49:52.960
<v Speaker 3>And your side is in the side. I need to

969
00:49:53.000 --> 00:49:57.360
<v Speaker 3>mention that way back when in the day, I in

970
00:49:57.440 --> 00:50:00.199
<v Speaker 3>the nineties, I actually worked at the company, at the

971
00:50:00.239 --> 00:50:06.679
<v Speaker 3>gaming company, and I literally implemented, uh this the doom

972
00:50:07.039 --> 00:50:12.239
<v Speaker 3>ray casting algorithm. The game that we developed. It was

973
00:50:12.320 --> 00:50:16.559
<v Speaker 3>kind of like a multi user doom game. So I

974
00:50:16.639 --> 00:50:24.199
<v Speaker 3>basically found uh uh pseudo code description of the algorithm.

975
00:50:24.239 --> 00:50:28.079
<v Speaker 3>I figured it out, I implemented it in c It

976
00:50:28.320 --> 00:50:35.079
<v Speaker 3>was too slow, so I actually then compiled some of

977
00:50:35.119 --> 00:50:39.840
<v Speaker 3>it into assembly language and hand optimized the assembly language

978
00:50:39.840 --> 00:50:42.519
<v Speaker 3>that came out. So this this was obviously from my

979
00:50:42.679 --> 00:50:45.599
<v Speaker 3>pre JavaScript days, so I'm kind of familiar with some

980
00:50:45.679 --> 00:50:48.079
<v Speaker 3>of the stuff you're talking about, even though it was

981
00:50:48.119 --> 00:50:53.320
<v Speaker 3>a long time ago. So you picked a random frame

982
00:50:53.559 --> 00:50:58.159
<v Speaker 3>inside uh, play the inside of the level, and then

983
00:50:58.360 --> 00:51:00.400
<v Speaker 3>just rendered the first frame, right.

984
00:51:00.480 --> 00:51:03.079
<v Speaker 4>Yeah, you can actually change the game asset to force

985
00:51:03.119 --> 00:51:04.800
<v Speaker 4>you into a level and immediately.

986
00:51:04.880 --> 00:51:07.320
<v Speaker 3>So that's why I've it ran for twelve days? How

987
00:51:07.400 --> 00:51:09.599
<v Speaker 3>did you know that it wasn't just stuck?

988
00:51:11.480 --> 00:51:15.440
<v Speaker 4>So funny story. The run that succeeded was about the

989
00:51:15.559 --> 00:51:20.039
<v Speaker 4>eighteenth or twentieth run. I stopped counting after eleven, so

990
00:51:20.119 --> 00:51:21.920
<v Speaker 4>I mean it took it took almost a whole year

991
00:51:22.000 --> 00:51:24.280
<v Speaker 4>to get to the point of like being able to

992
00:51:24.320 --> 00:51:28.360
<v Speaker 4>even try to run the because the game is very large, right,

993
00:51:28.400 --> 00:51:33.119
<v Speaker 4>It's like kilobytes of are actually megabytes rather of JavaScript.

994
00:51:33.519 --> 00:51:35.559
<v Speaker 4>I'm sorry, I have typescript types in one file. It's

995
00:51:35.599 --> 00:51:38.360
<v Speaker 4>not like these systems are not made to handle megabytes

996
00:51:38.400 --> 00:51:42.800
<v Speaker 4>of a single type being megabytes long. And so it

997
00:51:42.840 --> 00:51:44.519
<v Speaker 4>took a long time to get to that point. I mean,

998
00:51:44.719 --> 00:51:47.760
<v Speaker 4>when you build a system this way, you kind of

999
00:51:47.800 --> 00:51:50.639
<v Speaker 4>can't run it until you've implemented all of the instructions, right,

1000
00:51:50.679 --> 00:51:52.639
<v Speaker 4>you like, even if there's one and if you have

1001
00:51:52.679 --> 00:51:54.320
<v Speaker 4>one hundred and fifteen out of one hundred and sixteen

1002
00:51:54.320 --> 00:51:57.400
<v Speaker 4>instructions like it, you will What happens when you get

1003
00:51:57.400 --> 00:51:59.480
<v Speaker 4>to that instruction you haven't implemented yet is the system

1004
00:51:59.480 --> 00:52:02.639
<v Speaker 4>will crash. And so it took a long time to

1005
00:52:02.639 --> 00:52:04.360
<v Speaker 4>get to that point. But once I got to that point,

1006
00:52:04.400 --> 00:52:06.159
<v Speaker 4>it did infinite loop multiple times.

1007
00:52:06.480 --> 00:52:06.639
<v Speaker 3>There.

1008
00:52:06.719 --> 00:52:09.239
<v Speaker 4>I kept track of the runs, and I was monitoring

1009
00:52:09.280 --> 00:52:13.920
<v Speaker 4>their you know, their their their progress, like how many

1010
00:52:13.960 --> 00:52:16.480
<v Speaker 4>instructions they had gotten along through, and I could I

1011
00:52:16.480 --> 00:52:19.480
<v Speaker 4>implemented a system that would kind of dump the what

1012
00:52:19.519 --> 00:52:22.559
<v Speaker 4>it was working on to disk temporarily, so that I

1013
00:52:22.559 --> 00:52:24.400
<v Speaker 4>could take a peek at what it was working on

1014
00:52:24.440 --> 00:52:27.679
<v Speaker 4>and see like how it was going. So it was

1015
00:52:27.679 --> 00:52:29.519
<v Speaker 4>a long process of getting to that, and I didn't

1016
00:52:29.559 --> 00:52:32.360
<v Speaker 4>really think, you know, you know, speaking of family stuff,

1017
00:52:32.360 --> 00:52:34.840
<v Speaker 4>it's funny how how life happens. But actually the final

1018
00:52:34.840 --> 00:52:38.360
<v Speaker 4>successful run was was spun off on the night of

1019
00:52:38.400 --> 00:52:43.679
<v Speaker 4>Halloween twenty twenty four, and I was running out the

1020
00:52:43.719 --> 00:52:45.719
<v Speaker 4>door and I thought, you know, I'll just I'll start

1021
00:52:45.760 --> 00:52:48.039
<v Speaker 4>another run because the previous one had failed earlier that

1022
00:52:48.119 --> 00:52:49.800
<v Speaker 4>day and we were going to go trick or treating

1023
00:52:49.840 --> 00:52:51.840
<v Speaker 4>with my kids around my neighborhood. I thought, you know,

1024
00:52:51.880 --> 00:52:53.880
<v Speaker 4>I'll just I'll just go push play. I'll come back

1025
00:52:53.880 --> 00:52:55.199
<v Speaker 4>to it as probably gonna feel like I had long

1026
00:52:55.199 --> 00:52:56.920
<v Speaker 4>given up on it, the idea that it would just

1027
00:52:57.000 --> 00:52:58.920
<v Speaker 4>work by that point, and of course that was the

1028
00:52:59.000 --> 00:53:01.840
<v Speaker 4>run that you know, eventually succeeded twelve days later.

1029
00:53:03.679 --> 00:53:06.400
<v Speaker 3>What can you describe your reaction?

1030
00:53:08.320 --> 00:53:10.400
<v Speaker 4>Yeah, yeah, so I was I was saying, oh, you're gone,

1031
00:53:10.679 --> 00:53:15.719
<v Speaker 4>but it's fun to talk about. I genuinely, in my

1032
00:53:15.880 --> 00:53:19.519
<v Speaker 4>heart of hearts, never believed this would be possible. I never,

1033
00:53:19.960 --> 00:53:24.000
<v Speaker 4>at any moment believed it until the very last millisecond

1034
00:53:24.079 --> 00:53:27.000
<v Speaker 4>when I couldn't deny it anymore. I mean, so I

1035
00:53:27.039 --> 00:53:29.599
<v Speaker 4>was recording the screen, and I recorded myself working on

1036
00:53:29.639 --> 00:53:31.280
<v Speaker 4>this throughout the project, and that was part of what

1037
00:53:31.320 --> 00:53:33.079
<v Speaker 4>was in the video. And there's more that I'm planning

1038
00:53:33.079 --> 00:53:35.920
<v Speaker 4>to release on this. But it's funny to watch back

1039
00:53:35.960 --> 00:53:38.400
<v Speaker 4>the video because it would have been nice if I

1040
00:53:38.400 --> 00:53:40.599
<v Speaker 4>had some kind of like big reaction, but it's just

1041
00:53:41.119 --> 00:53:44.360
<v Speaker 4>I was just stunned. I was just like immobilized, and

1042
00:53:44.400 --> 00:53:46.440
<v Speaker 4>it's like four minutes of silence. Yeah, it's just like

1043
00:53:46.559 --> 00:53:51.079
<v Speaker 4>total like total disbelief and shock. And actually you can

1044
00:53:51.079 --> 00:53:54.360
<v Speaker 4>see my eyes kind of darting around the screen trying

1045
00:53:54.400 --> 00:53:56.119
<v Speaker 4>to find a place where like it didn't render a

1046
00:53:56.119 --> 00:53:58.360
<v Speaker 4>column in the level or something, you know, some geometry.

1047
00:53:59.400 --> 00:54:03.079
<v Speaker 4>I just never I never believed it would be possible.

1048
00:54:03.440 --> 00:54:06.559
<v Speaker 4>I just never believed it until well, I couldn't deny

1049
00:54:06.599 --> 00:54:11.480
<v Speaker 4>it anymore and it was done. So yeah, it's funny,

1050
00:54:11.559 --> 00:54:13.719
<v Speaker 4>Like I don't know, I'm gonna, like I said, make

1051
00:54:13.719 --> 00:54:15.679
<v Speaker 4>a video about the why of this project, like why

1052
00:54:15.679 --> 00:54:18.360
<v Speaker 4>did I get trying to do this? And I have

1053
00:54:18.400 --> 00:54:20.519
<v Speaker 4>to find a way to like make it more palatable

1054
00:54:20.559 --> 00:54:23.599
<v Speaker 4>to show that reaction because my reaction is basically just

1055
00:54:23.679 --> 00:54:29.559
<v Speaker 4>me just being like, you know, just breathing.

1056
00:54:29.239 --> 00:54:31.119
<v Speaker 3>Happy, and then what did you do the next day?

1057
00:54:33.639 --> 00:54:36.639
<v Speaker 4>I mean, I think I did what I would have

1058
00:54:36.719 --> 00:54:38.840
<v Speaker 4>done if I had been on the other side of this. So, like,

1059
00:54:38.880 --> 00:54:40.320
<v Speaker 4>one of the things I told to my wife is

1060
00:54:40.360 --> 00:54:42.519
<v Speaker 4>like listen, because she would ask me, like what, like,

1061
00:54:42.800 --> 00:54:44.400
<v Speaker 4>explain to me why this. She had never heard of

1062
00:54:44.400 --> 00:54:46.239
<v Speaker 4>doom and stuff, so she doesn't know the history of

1063
00:54:46.280 --> 00:54:49.559
<v Speaker 4>people trying to run things into the way. No, she's

1064
00:54:49.559 --> 00:54:52.400
<v Speaker 4>not an engineer at all. So I would try to

1065
00:54:52.440 --> 00:54:53.920
<v Speaker 4>explain this, and I would say, Okay, look, here's what

1066
00:54:53.920 --> 00:54:55.960
<v Speaker 4>it boils down to. If I was on the other

1067
00:54:56.000 --> 00:54:59.679
<v Speaker 4>side of this and somebody released this project, I would

1068
00:55:00.079 --> 00:55:01.840
<v Speaker 4>my eyes would glaze over. I would have to take

1069
00:55:01.880 --> 00:55:03.519
<v Speaker 4>the rest of the day off work. My eyes would

1070
00:55:03.519 --> 00:55:06.400
<v Speaker 4>glaze over. I would I would walk outside and stare

1071
00:55:06.440 --> 00:55:09.159
<v Speaker 4>at the sun and probably go blind, Like I would

1072
00:55:09.519 --> 00:55:13.320
<v Speaker 4>question everything about the universe if this, like it would

1073
00:55:13.360 --> 00:55:16.000
<v Speaker 4>really rock my world. If this is possible, it just

1074
00:55:16.000 --> 00:55:17.679
<v Speaker 4>can't be possible. So like all trying to do a

1075
00:55:17.679 --> 00:55:19.719
<v Speaker 4>show why it can't be possible, which means I could

1076
00:55:19.719 --> 00:55:21.039
<v Speaker 4>be done at any moment. I could be done today,

1077
00:55:21.039 --> 00:55:24.599
<v Speaker 4>I could be done tomorrow, not sure, but I knew

1078
00:55:24.679 --> 00:55:26.480
<v Speaker 4>that if I was on the other side of this,

1079
00:55:26.559 --> 00:55:30.599
<v Speaker 4>I would just be like totally, totally shaken. And despite that,

1080
00:55:30.639 --> 00:55:32.840
<v Speaker 4>I was in the driver's seat all along because I

1081
00:55:32.880 --> 00:55:35.519
<v Speaker 4>had this attitude of this couldn't possibly work. Yeah, that

1082
00:55:35.599 --> 00:55:37.679
<v Speaker 4>ended up. That ended up happening. I didn't stare into

1083
00:55:37.679 --> 00:55:39.480
<v Speaker 4>the sun and go blind, but all the rest of

1084
00:55:39.519 --> 00:55:42.239
<v Speaker 4>it did that. I just kind of walked around, you know,

1085
00:55:42.400 --> 00:55:45.960
<v Speaker 4>like fuzzy, Like my body felt fuzzy for hours afterwards.

1086
00:55:45.960 --> 00:55:48.559
<v Speaker 4>I just could not believe that it was like finally

1087
00:55:48.559 --> 00:55:51.880
<v Speaker 4>in front of me. I spent a long time believing

1088
00:55:51.880 --> 00:55:54.920
<v Speaker 4>it wouldn't be possible. Funny, it's such a stupid thing,

1089
00:55:54.960 --> 00:55:55.719
<v Speaker 4>but you know, here we are.

1090
00:55:55.760 --> 00:55:59.519
<v Speaker 3>That's well, you know the things in't like. By the way,

1091
00:55:59.599 --> 00:56:01.599
<v Speaker 3>have you actually tried to run it on the new

1092
00:56:01.639 --> 00:56:03.280
<v Speaker 3>GO compiled type compiler?

1093
00:56:03.679 --> 00:56:06.320
<v Speaker 4>No, and I will never So one of the things

1094
00:56:06.320 --> 00:56:09.800
<v Speaker 4>that is interesting, I also promised my wife I would

1095
00:56:09.800 --> 00:56:12.760
<v Speaker 4>never open the project up again. But actually I don't

1096
00:56:12.800 --> 00:56:15.199
<v Speaker 4>need to do that because I it sounds funny to say,

1097
00:56:15.199 --> 00:56:19.079
<v Speaker 4>but I have like absolutely no interest in continuing this,

1098
00:56:19.280 --> 00:56:21.079
<v Speaker 4>Like I didn't have interest in doing it in the

1099
00:56:21.079 --> 00:56:23.800
<v Speaker 4>first place. I just got kind of nerd stiped into it,

1100
00:56:23.920 --> 00:56:24.400
<v Speaker 4>so to speak.

1101
00:56:24.480 --> 00:56:26.920
<v Speaker 3>It's just that instead of twelve days, it should take

1102
00:56:26.960 --> 00:56:27.719
<v Speaker 3>a day and a half.

1103
00:56:27.840 --> 00:56:30.599
<v Speaker 4>Yeah, and some people some people said like, oh, but

1104
00:56:31.079 --> 00:56:33.280
<v Speaker 4>you know, like what about the second frame? You know,

1105
00:56:33.320 --> 00:56:35.360
<v Speaker 4>that was one of the common complaints on the announcement videos,

1106
00:56:35.400 --> 00:56:38.000
<v Speaker 4>like but you didn't show any gameplay, And it's like, look,

1107
00:56:38.360 --> 00:56:40.280
<v Speaker 4>if I had rendered a hundred frame, someone could say

1108
00:56:40.280 --> 00:56:42.360
<v Speaker 4>what about one hundred and first frame? Like, on a

1109
00:56:42.400 --> 00:56:46.400
<v Speaker 4>mathematical level, it is literally equally as an interesting to

1110
00:56:46.440 --> 00:56:48.559
<v Speaker 4>say that I rendered one frame as a did render

1111
00:56:48.559 --> 00:56:51.199
<v Speaker 4>one hundred, like or a thousand or whatever the first level, Like,

1112
00:56:51.559 --> 00:56:54.000
<v Speaker 4>I don't care about that part. There was the whole

1113
00:56:54.000 --> 00:56:56.480
<v Speaker 4>purpose of this project was trying to kind of like

1114
00:56:57.239 --> 00:57:00.440
<v Speaker 4>trick the typescript type system into doing this like very

1115
00:57:00.480 --> 00:57:01.360
<v Speaker 4>difficult task.

1116
00:57:02.000 --> 00:57:06.239
<v Speaker 3>And II the point was never to actually play Doom

1117
00:57:06.280 --> 00:57:09.400
<v Speaker 3>at the frame rate of one every twelve days.

1118
00:57:09.440 --> 00:57:11.199
<v Speaker 4>Yeah, I say in the video like I didn't do

1119
00:57:11.239 --> 00:57:13.199
<v Speaker 4>this because I have no better way to play Doom.

1120
00:57:13.599 --> 00:57:16.519
<v Speaker 4>You know, there's lots of ways I couldn't played Doom

1121
00:57:16.519 --> 00:57:18.400
<v Speaker 4>if that was my goal. This was like a kind

1122
00:57:18.440 --> 00:57:23.119
<v Speaker 4>of mathematical pursuit, you know, academic pursuit.

1123
00:57:23.199 --> 00:57:25.679
<v Speaker 3>Yeah, it'll be interesting. I'm sure somebody will pick up

1124
00:57:25.960 --> 00:57:28.360
<v Speaker 3>the conflict or the mental or something.

1125
00:57:28.400 --> 00:57:31.800
<v Speaker 4>And it's open source, so if you know, if somebody

1126
00:57:31.840 --> 00:57:33.639
<v Speaker 4>listening is one of those people that would like to

1127
00:57:33.719 --> 00:57:35.719
<v Speaker 4>kind of I don't know what the next level of

1128
00:57:35.760 --> 00:57:38.000
<v Speaker 4>this would even be, because to me, like Doom is

1129
00:57:38.079 --> 00:57:40.199
<v Speaker 4>kind of like the finish line. Some people have asked me, like,

1130
00:57:40.239 --> 00:57:42.559
<v Speaker 4>why did you go from nothing like this ever having

1131
00:57:42.559 --> 00:57:45.639
<v Speaker 4>been done before all the way to Doom with no

1132
00:57:45.760 --> 00:57:47.960
<v Speaker 4>stops in between, And you know, it comes back to

1133
00:57:48.000 --> 00:57:50.480
<v Speaker 4>this recurring thing. It's just because I thought it wouldn't

1134
00:57:50.480 --> 00:57:53.159
<v Speaker 4>be possible. So if that's your mindset, there's no reason

1135
00:57:53.159 --> 00:57:56.159
<v Speaker 4>to play around with like Pong or Tetris or Pokemon

1136
00:57:56.760 --> 00:57:58.800
<v Speaker 4>building up to it, Like, just go straight to doom,

1137
00:57:59.119 --> 00:58:01.280
<v Speaker 4>to the hardest thing and show why that can't be done.

1138
00:58:01.320 --> 00:58:07.079
<v Speaker 3>And then and also the fact that you implemented web assembly, right,

1139
00:58:07.280 --> 00:58:10.559
<v Speaker 3>is the fact that you could run now run anything

1140
00:58:10.599 --> 00:58:12.679
<v Speaker 3>on it that, like we said that can compare the

1141
00:58:12.679 --> 00:58:15.480
<v Speaker 3>web assembly. So Doom is just one example. It could

1142
00:58:15.519 --> 00:58:16.400
<v Speaker 3>be anything else.

1143
00:58:17.000 --> 00:58:19.440
<v Speaker 4>Yeah, And in fact I did actually maybe I'm fibbing

1144
00:58:19.480 --> 00:58:22.239
<v Speaker 4>a little bit, I did actually implement one other program first,

1145
00:58:22.320 --> 00:58:25.480
<v Speaker 4>and it was Conway's Game of Life. So you know

1146
00:58:25.519 --> 00:58:27.559
<v Speaker 4>Conway's game of life is this thing called a cellular

1147
00:58:27.639 --> 00:58:31.559
<v Speaker 4>autonoma autumata for anybody listening, And it's just kind of

1148
00:58:31.559 --> 00:58:33.280
<v Speaker 4>like a it's kind of like imagine a piece of

1149
00:58:33.280 --> 00:58:34.880
<v Speaker 4>grid paper and you make a game out of like

1150
00:58:35.000 --> 00:58:37.840
<v Speaker 4>rules about which you know, grids are filled in on

1151
00:58:37.880 --> 00:58:41.800
<v Speaker 4>the paper. And I wrote that and see, so that

1152
00:58:41.880 --> 00:58:43.719
<v Speaker 4>was the first C program I had ever written. And

1153
00:58:44.000 --> 00:58:50.280
<v Speaker 4>that completed in January twenty twenty three. So from January

1154
00:58:51.039 --> 00:58:54.119
<v Speaker 4>all the way until November was how long it took.

1155
00:58:54.239 --> 00:58:56.559
<v Speaker 4>Like it was a pretty full functioning system at that

1156
00:58:56.639 --> 00:58:59.559
<v Speaker 4>point for the instructions that Conways needed. And again I

1157
00:58:59.599 --> 00:59:01.599
<v Speaker 4>wrote it in see not in straight web assembly. So

1158
00:59:01.599 --> 00:59:03.280
<v Speaker 4>there's actually quite quite a lot of instructions. There's like,

1159
00:59:03.320 --> 00:59:06.320
<v Speaker 4>let's say eighty instructions or something like that that Conways needed.

1160
00:59:07.159 --> 00:59:10.719
<v Speaker 4>But it took a lot more to get Doom running

1161
00:59:10.920 --> 00:59:11.719
<v Speaker 4>than just that.

1162
00:59:12.320 --> 00:59:16.320
<v Speaker 3>There's quite a lot the last you know, the thing

1163
00:59:16.360 --> 00:59:19.840
<v Speaker 3>about software projects, well, I guess projects in general is

1164
00:59:19.880 --> 00:59:23.320
<v Speaker 3>that that eighty twenty rule, the last twenty percent takes

1165
00:59:23.360 --> 00:59:25.159
<v Speaker 3>eighty percent of the time and effort.

1166
00:59:25.239 --> 00:59:27.239
<v Speaker 4>Yeap basic definitely was the case here.

1167
00:59:29.400 --> 00:59:33.039
<v Speaker 3>Super cool, and then you basically just put it aside

1168
00:59:33.079 --> 00:59:35.159
<v Speaker 3>and continued with your with your life.

1169
00:59:35.440 --> 00:59:37.920
<v Speaker 4>Yeah, I haven't touched it, not one bit since the

1170
00:59:38.000 --> 00:59:41.039
<v Speaker 4>day of the announcement. Anyway, I had to like rework

1171
00:59:41.079 --> 00:59:43.760
<v Speaker 4>the read me. It's funny. I committed a lot. So

1172
00:59:43.840 --> 00:59:46.119
<v Speaker 4>if you read the commit history, it looks like I'm

1173
00:59:46.159 --> 00:59:48.400
<v Speaker 4>totally like out of my mind, which maybe you could

1174
00:59:48.440 --> 00:59:50.159
<v Speaker 4>argue that I was while I was working on it.

1175
00:59:51.440 --> 00:59:53.519
<v Speaker 4>But it's a lot of like capital letters and exclamation

1176
00:59:53.599 --> 00:59:56.440
<v Speaker 4>points and a decent amount of swearing. And actually there's

1177
00:59:57.079 --> 01:00:00.920
<v Speaker 4>I have a sort of self deprecation. I find self

1178
01:00:00.920 --> 01:00:04.800
<v Speaker 4>deprecation very motivating for whatever reason, and so like in

1179
01:00:04.840 --> 01:00:06.719
<v Speaker 4>the codebase, it's like there's a little there's a lot

1180
01:00:06.719 --> 01:00:10.679
<v Speaker 4>of like you, dummy, what are you doing? Type of

1181
01:00:10.800 --> 01:00:14.159
<v Speaker 4>comments and things. But you know, whatever the case, maybe

1182
01:00:14.239 --> 01:00:16.199
<v Speaker 4>it was a solo project and you know, you don't

1183
01:00:16.239 --> 01:00:18.559
<v Speaker 4>have to follow all the rules you do at a

1184
01:00:18.599 --> 01:00:19.280
<v Speaker 4>project at work.

1185
01:00:19.320 --> 01:00:22.199
<v Speaker 3>But yeah, no, what came out when it came out.

1186
01:00:22.239 --> 01:00:27.159
<v Speaker 3>You spoke with some typescript or web personalities I recall

1187
01:00:27.239 --> 01:00:32.440
<v Speaker 3>from your videos in particulars in particular your conversation with Anders. Yeah,

1188
01:00:32.519 --> 01:00:35.719
<v Speaker 3>so can you tell us a little bit about that.

1189
01:00:36.239 --> 01:00:38.559
<v Speaker 4>Yeah, that was that was a really awesome moment. So

1190
01:00:39.199 --> 01:00:40.960
<v Speaker 4>because of the channel and work that we've done on

1191
01:00:41.000 --> 01:00:44.920
<v Speaker 4>Michigan Typescript prior, I had an opportunity to do some

1192
01:00:45.039 --> 01:00:47.800
<v Speaker 4>videos there. I think probably four or something five members

1193
01:00:47.840 --> 01:00:50.840
<v Speaker 4>of the team have been on the Michigan Typeescript channel

1194
01:00:50.840 --> 01:00:53.199
<v Speaker 4>for various you know, it's always very nerdy things about

1195
01:00:53.239 --> 01:00:56.239
<v Speaker 4>interviews about typescript or trying to solve particular type challenges

1196
01:00:56.280 --> 01:00:58.760
<v Speaker 4>and stuff like that, and so I had been asking

1197
01:00:58.800 --> 01:01:01.519
<v Speaker 4>them about you know, hey, you know, it'd be really

1198
01:01:01.519 --> 01:01:04.519
<v Speaker 4>cool because when I showed it to people privately, people said, hey,

1199
01:01:04.559 --> 01:01:07.400
<v Speaker 4>I wonder what Anders, the creator of typescript, thinks about this,

1200
01:01:07.519 --> 01:01:09.159
<v Speaker 4>And I would say, you're not going to be the

1201
01:01:09.159 --> 01:01:11.519
<v Speaker 4>only person wondering that. I'm going to try. And so

1202
01:01:11.559 --> 01:01:13.960
<v Speaker 4>I tried and tried and tried, and eventually they said,

1203
01:01:14.000 --> 01:01:15.880
<v Speaker 4>all right, all right, we'll throw you a bone. And

1204
01:01:16.360 --> 01:01:18.280
<v Speaker 4>you know, Anders, I'm very gracious that he took the

1205
01:01:18.320 --> 01:01:20.239
<v Speaker 4>time to meet with me and I had a chance

1206
01:01:20.280 --> 01:01:23.280
<v Speaker 4>to show him the project and kind of give him

1207
01:01:23.280 --> 01:01:26.199
<v Speaker 4>a demo of it. Yeah.

1208
01:01:26.280 --> 01:01:30.960
<v Speaker 3>Yeah, I'm literally an an Anders fanboy.

1209
01:01:31.800 --> 01:01:32.480
<v Speaker 4>Most of us are.

1210
01:01:32.559 --> 01:01:35.760
<v Speaker 3>Yeah, well, in my case, it goes even further back

1211
01:01:35.880 --> 01:01:40.320
<v Speaker 3>because he's not only the guy that created the typescript,

1212
01:01:40.400 --> 01:01:45.159
<v Speaker 3>he's also the guy that created c Shark and Turbo Pascal. Yeah,

1213
01:01:45.159 --> 01:01:46.199
<v Speaker 3>and that of thing.

1214
01:01:46.480 --> 01:01:48.320
<v Speaker 2>Actually that brings memory.

1215
01:01:48.920 --> 01:01:50.719
<v Speaker 4>I can't believe that I forgot to say this to

1216
01:01:50.800 --> 01:01:52.760
<v Speaker 4>him when I met with him, but I was just

1217
01:01:52.800 --> 01:01:56.320
<v Speaker 4>so nervous in starstruck. But Turbo Pascal is actually the

1218
01:01:56.400 --> 01:01:59.400
<v Speaker 4>language that the original Tetris was first implemented in.

1219
01:02:00.360 --> 01:02:03.960
<v Speaker 3>Turbo Pascal is the programming language that made me a programmer.

1220
01:02:05.239 --> 01:02:09.360
<v Speaker 3>I literally ran Tuba Pascal. For our listeners who don't know,

1221
01:02:10.159 --> 01:02:14.480
<v Speaker 3>Pascal is a programming language originally created by Nicholas Worth

1222
01:02:15.239 --> 01:02:23.519
<v Speaker 3>for teaching computers. It's a typed programming language based on

1223
01:02:23.559 --> 01:02:28.559
<v Speaker 3>the Alghol family of programming languages. But my point was

1224
01:02:28.679 --> 01:02:32.320
<v Speaker 3>that up to that point I was writing writing ugly

1225
01:02:32.480 --> 01:02:35.079
<v Speaker 3>basic stuff, and then this thing comes along with an

1226
01:02:35.119 --> 01:02:40.320
<v Speaker 3>integrated IDE and a super fast type safe and a

1227
01:02:40.360 --> 01:02:44.599
<v Speaker 3>compiler for type safe programming language. So I literally almost

1228
01:02:44.599 --> 01:02:48.360
<v Speaker 3>overnight went from being a hobbyist to an actual programmer.

1229
01:02:48.880 --> 01:02:52.280
<v Speaker 3>It's really thanks to Andrews and tuber Pascal. You know

1230
01:02:52.320 --> 01:02:54.400
<v Speaker 3>what's funny, but the amazing system.

1231
01:02:54.239 --> 01:02:57.599
<v Speaker 1>When I was in college. So I graduated college in

1232
01:02:57.679 --> 01:03:03.559
<v Speaker 1>ninety one and I took a basic class. I want

1233
01:03:03.559 --> 01:03:07.000
<v Speaker 1>to say eighty nine to ninety. I think remember programming

1234
01:03:07.000 --> 01:03:09.599
<v Speaker 1>in basic, and then I took Turbo Pascal my senior year.

1235
01:03:10.440 --> 01:03:13.400
<v Speaker 1>Barely passed by the skin of my teeth. I mean,

1236
01:03:13.440 --> 01:03:16.800
<v Speaker 1>I barely passed, and I can remember, and this makes

1237
01:03:16.840 --> 01:03:17.559
<v Speaker 1>me laugh today.

1238
01:03:17.719 --> 01:03:20.960
<v Speaker 2>I can remember having problems.

1239
01:03:20.719 --> 01:03:23.920
<v Speaker 1>Getting my head around things like a raise, you know,

1240
01:03:24.039 --> 01:03:25.559
<v Speaker 1>and we had we had to come up with this

1241
01:03:26.719 --> 01:03:30.679
<v Speaker 1>card game for a final project, and I barely did

1242
01:03:30.760 --> 01:03:31.239
<v Speaker 1>the minimum.

1243
01:03:31.239 --> 01:03:33.159
<v Speaker 2>Didn't even do that. And there's just one girl.

1244
01:03:32.960 --> 01:03:36.360
<v Speaker 1>In the class who aced it, and she had gambling

1245
01:03:36.400 --> 01:03:38.719
<v Speaker 1>and you could place bets on things. It just totally

1246
01:03:38.719 --> 01:03:40.519
<v Speaker 1>blew away. And then, you know, I got into PHP

1247
01:03:40.679 --> 01:03:42.000
<v Speaker 1>later and lived in a raise for.

1248
01:03:41.960 --> 01:03:42.519
<v Speaker 2>A long time.

1249
01:03:42.599 --> 01:03:46.559
<v Speaker 1>But but oh man, Turbo Pascal brings back, so either

1250
01:03:47.639 --> 01:03:48.760
<v Speaker 1>nightmares at the same time.

1251
01:03:49.159 --> 01:03:53.400
<v Speaker 3>Yeah. So he did pscal, did Delphi, the Delphi programming language,

1252
01:03:53.440 --> 01:03:57.880
<v Speaker 3>then he did then he created C sharp and now typescript.

1253
01:03:58.039 --> 01:04:01.599
<v Speaker 3>He's he's one of my death heroes.

1254
01:04:02.679 --> 01:04:05.119
<v Speaker 4>Interesting, it was all right, it was a big moment. Yeah.

1255
01:04:05.159 --> 01:04:07.440
<v Speaker 1>So we're sort of running out of time here, So

1256
01:04:07.519 --> 01:04:10.159
<v Speaker 1>before we wrap up and move to picks. Is anything

1257
01:04:10.199 --> 01:04:13.360
<v Speaker 1>else we didn't cover that you wanted to cover, Dmitri.

1258
01:04:14.280 --> 01:04:16.199
<v Speaker 4>I think we got it. I just hope people that

1259
01:04:16.760 --> 01:04:19.920
<v Speaker 4>hear about this project understand a few basic things that

1260
01:04:20.159 --> 01:04:24.519
<v Speaker 4>made this successful, contrary to most ways that we like

1261
01:04:24.559 --> 01:04:27.480
<v Speaker 4>to think about, you know, building complex systems. If I

1262
01:04:27.480 --> 01:04:29.360
<v Speaker 4>had sat down to make a plan, this would never

1263
01:04:29.400 --> 01:04:32.119
<v Speaker 4>have been possible. I just put one foot in front

1264
01:04:32.119 --> 01:04:34.719
<v Speaker 4>of the other every day, and I kept notes about

1265
01:04:34.760 --> 01:04:36.599
<v Speaker 4>what I needed to do next as I went. But

1266
01:04:36.639 --> 01:04:39.280
<v Speaker 4>I never at any point had a big, grand plan

1267
01:04:39.360 --> 01:04:41.760
<v Speaker 4>about how to do this, and it was probably not

1268
01:04:41.800 --> 01:04:43.480
<v Speaker 4>even possible in my case because I would never have

1269
01:04:43.559 --> 01:04:45.119
<v Speaker 4>been able to know what things I would hit.

1270
01:04:45.480 --> 01:04:47.239
<v Speaker 1>So in other words, it was more of an agile

1271
01:04:47.239 --> 01:04:49.599
<v Speaker 1>methodology than waterfall.

1272
01:04:50.440 --> 01:04:52.480
<v Speaker 4>I don't know. Those are both trigger words for me,

1273
01:04:52.519 --> 01:04:56.480
<v Speaker 4>so I can't I can't comment, but but I think

1274
01:04:56.519 --> 01:05:00.599
<v Speaker 4>that sometimes people struggle with motivation to try, and I

1275
01:05:00.599 --> 01:05:03.400
<v Speaker 4>think that trying is all you need to do. In

1276
01:05:03.440 --> 01:05:06.039
<v Speaker 4>a lot of cases, I didn't have a I never

1277
01:05:06.039 --> 01:05:09.840
<v Speaker 4>got down on myself about failing because the definition of

1278
01:05:09.880 --> 01:05:13.119
<v Speaker 4>failure was built into the thesis I was trying to fail.

1279
01:05:13.559 --> 01:05:15.360
<v Speaker 4>I was trying to fail. I was trying to make

1280
01:05:15.400 --> 01:05:18.599
<v Speaker 4>it not work and just trying to find why it

1281
01:05:18.599 --> 01:05:20.760
<v Speaker 4>can't work. And I think that I learned from this

1282
01:05:20.880 --> 01:05:23.159
<v Speaker 4>and I hope people can get from it that you know,

1283
01:05:23.159 --> 01:05:25.599
<v Speaker 4>I said earlier in the call that ninety five percent

1284
01:05:25.599 --> 01:05:27.159
<v Speaker 4>I would have been ninety five percent is happy if

1285
01:05:27.199 --> 01:05:29.679
<v Speaker 4>I never told anyone about it. The five percent is

1286
01:05:29.800 --> 01:05:32.800
<v Speaker 4>I really do get a lot of enjoyment out of people,

1287
01:05:33.039 --> 01:05:35.400
<v Speaker 4>you know, have reached out to me privately and online

1288
01:05:35.400 --> 01:05:38.960
<v Speaker 4>and stuff saying like I, because of this project, was

1289
01:05:39.000 --> 01:05:41.320
<v Speaker 4>inspired to pick up some old project that I had

1290
01:05:41.320 --> 01:05:43.039
<v Speaker 4>given up on and I'm going to give it another shot.

1291
01:05:43.360 --> 01:05:45.480
<v Speaker 4>And I hope people take that away. And that's like

1292
01:05:45.480 --> 01:05:48.800
<v Speaker 4>really the main message I want to leave people's minds.

1293
01:05:48.960 --> 01:05:53.320
<v Speaker 3>Having One more important thing that you said that I

1294
01:05:53.400 --> 01:05:58.239
<v Speaker 3>wanted to call out because I think it was very insightful,

1295
01:05:58.639 --> 01:06:02.320
<v Speaker 3>is about taking big problems and breaking them down into

1296
01:06:02.320 --> 01:06:08.719
<v Speaker 3>smaller problems and doing this project process recursively. And I

1297
01:06:08.760 --> 01:06:15.519
<v Speaker 3>think this ability of breaking down difficult problems into smaller,

1298
01:06:15.679 --> 01:06:19.519
<v Speaker 3>more manageable problems and then composing the solutions back in

1299
01:06:19.639 --> 01:06:24.920
<v Speaker 3>order to solve the original big problem is what makes

1300
01:06:24.960 --> 01:06:29.199
<v Speaker 3>an engineer an engineer. Really, Yeah, this ability to me,

1301
01:06:29.440 --> 01:06:32.400
<v Speaker 3>is at the core of what we do, and it

1302
01:06:32.519 --> 01:06:34.880
<v Speaker 3>was really insightful for you to bring that up and

1303
01:06:35.159 --> 01:06:35.880
<v Speaker 3>really important.

1304
01:06:35.920 --> 01:06:39.000
<v Speaker 4>I think I couldn't agree more. Yeah, I love it.

1305
01:06:40.480 --> 01:06:40.960
<v Speaker 2>Alrighty.

1306
01:06:41.400 --> 01:06:44.239
<v Speaker 1>So with that we will move on the picks. Picks

1307
01:06:44.239 --> 01:06:46.280
<v Speaker 1>are part of the show where we get to talk

1308
01:06:46.320 --> 01:06:49.800
<v Speaker 1>about anything we want to talk about, whether it's tech

1309
01:06:49.920 --> 01:06:53.960
<v Speaker 1>or non tech related. So dan' le you go first today.

1310
01:06:53.960 --> 01:06:56.159
<v Speaker 1>What do you have for us besides sirens going off

1311
01:06:56.159 --> 01:06:56.719
<v Speaker 1>in the background.

1312
01:06:56.920 --> 01:07:00.480
<v Speaker 3>Well, my pick will actually be in this vein. So

1313
01:07:02.000 --> 01:07:06.679
<v Speaker 3>without going into you know, the details of what this

1314
01:07:06.760 --> 01:07:09.559
<v Speaker 3>war is about and whatnot, we are living in a

1315
01:07:09.599 --> 01:07:16.639
<v Speaker 3>situation where in Israel we are we are having large

1316
01:07:16.679 --> 01:07:20.360
<v Speaker 3>missiles being fired at us, and by large I mean

1317
01:07:20.440 --> 01:07:26.639
<v Speaker 3>something like one thousand pounds warhead full of explosives. As

1318
01:07:26.679 --> 01:07:29.519
<v Speaker 3>you can imagine, that can cause a lot of damage.

1319
01:07:29.719 --> 01:07:33.039
<v Speaker 3>And what makes a huge difference is the fact that

1320
01:07:33.079 --> 01:07:39.039
<v Speaker 3>we've got the system in place for intercepting and shooting

1321
01:07:39.119 --> 01:07:42.840
<v Speaker 3>down missiles. It's not a fool proof system. Such systems

1322
01:07:42.880 --> 01:07:46.920
<v Speaker 3>cannot be fool proof by definition, but it's very effective.

1323
01:07:46.920 --> 01:07:51.960
<v Speaker 3>It's something like it has an activity of something like

1324
01:07:52.079 --> 01:07:57.079
<v Speaker 3>ninety percent, which is like huge in these types of scenario.

1325
01:07:57.119 --> 01:08:00.719
<v Speaker 3>If you think about the fact that around thirty people

1326
01:08:00.840 --> 01:08:04.079
<v Speaker 3>have been killed in Israel census things started, think of

1327
01:08:04.360 --> 01:08:07.920
<v Speaker 3>you know, they make it ten times bigger or even more,

1328
01:08:08.480 --> 01:08:13.920
<v Speaker 3>that would be yeah, you know, devastating. The reason that

1329
01:08:13.960 --> 01:08:16.319
<v Speaker 3>I'm picking this is that I'm proud to say that

1330
01:08:16.399 --> 01:08:20.479
<v Speaker 3>in my background, I was actually involved with the creation

1331
01:08:20.880 --> 01:08:26.920
<v Speaker 3>of these systems way back when when I actually served

1332
01:08:26.600 --> 01:08:29.479
<v Speaker 3>in the IDF, I served for several years as an

1333
01:08:29.479 --> 01:08:33.199
<v Speaker 3>officer in the Israeli Air Force and where I primarily

1334
01:08:33.239 --> 01:08:36.039
<v Speaker 3>served was at the Air Force Ts Range, where I

1335
01:08:36.199 --> 01:08:39.560
<v Speaker 3>was intimately involved with the development the development of the

1336
01:08:39.640 --> 01:08:43.600
<v Speaker 3>aero system, which is that part of the multi layered

1337
01:08:44.079 --> 01:08:49.439
<v Speaker 3>missile defense system that actually is intended to intercept and

1338
01:08:49.520 --> 01:08:51.840
<v Speaker 3>destroy the ballistic missiles.

1339
01:08:52.239 --> 01:08:53.119
<v Speaker 2>Most that Iron Dome.

1340
01:08:53.840 --> 01:08:56.680
<v Speaker 3>No, so most people are familiar with Iron Dome because

1341
01:08:57.159 --> 01:08:59.199
<v Speaker 3>it got a lot of press and it's got a

1342
01:08:59.239 --> 01:09:02.520
<v Speaker 3>cool name. But iron Dome, like I said, it's a

1343
01:09:02.600 --> 01:09:06.520
<v Speaker 3>multi layered system. Iron Dome is actually for the lowest layer,

1344
01:09:06.600 --> 01:09:11.399
<v Speaker 3>so it's against mostly against rockets. So when Hamas was

1345
01:09:11.439 --> 01:09:15.680
<v Speaker 3>firing rockets at Israeli cities, those who were intercepted by

1346
01:09:16.159 --> 01:09:21.079
<v Speaker 3>the Iron Dome. But then you've got, you've got additional layers,

1347
01:09:21.119 --> 01:09:24.439
<v Speaker 3>You've got David Sling, and finally you've got the arrow.

1348
01:09:24.479 --> 01:09:27.000
<v Speaker 3>And the arrow is the one that's supposed to intercept

1349
01:09:27.000 --> 01:09:30.680
<v Speaker 3>ballistic missiles. Ballistic missiles, in case you don't know, literally

1350
01:09:30.760 --> 01:09:35.239
<v Speaker 3>fly out into outer space before falling back down to Earth.

1351
01:09:36.479 --> 01:09:40.399
<v Speaker 3>And the arrow is actually able to intercept those missiles

1352
01:09:40.439 --> 01:09:43.279
<v Speaker 3>in space. It's pretty nuts when you think about it.

1353
01:09:44.199 --> 01:09:48.680
<v Speaker 3>So right now Israel is using Arrow three. I'm old,

1354
01:09:48.760 --> 01:09:51.279
<v Speaker 3>so I was actually involved in the development of Arrow one.

1355
01:09:52.039 --> 01:09:56.840
<v Speaker 3>But you know, things grow, you know, evolve from one

1356
01:09:56.880 --> 01:09:59.079
<v Speaker 3>to the next. So I'm proud to say that I

1357
01:09:59.239 --> 01:10:04.560
<v Speaker 3>had mice all part in the development of that system.

1358
01:10:04.840 --> 01:10:07.640
<v Speaker 3>Hopefully this war will end soon and we won't need

1359
01:10:07.680 --> 01:10:12.600
<v Speaker 3>those anymore, and at least in the immediate future. Until that, doo,

1360
01:10:12.920 --> 01:10:17.319
<v Speaker 3>I'm happy to have them and to have them protecting us.

1361
01:10:17.840 --> 01:10:25.520
<v Speaker 3>And I guess that, oh yeah, my personal part was

1362
01:10:26.399 --> 01:10:31.079
<v Speaker 3>relatively small that so that would be one pick. The

1363
01:10:31.119 --> 01:10:34.000
<v Speaker 3>other is not a pick. It's more of an announcement.

1364
01:10:34.439 --> 01:10:38.840
<v Speaker 3>In the last episode that recorded, I told that there's

1365
01:10:38.880 --> 01:10:42.720
<v Speaker 3>a conference in Israel. Actually it's a dual conference. It's

1366
01:10:43.039 --> 01:10:46.760
<v Speaker 3>React next and No TLV. They are kind of back

1367
01:10:46.760 --> 01:10:50.960
<v Speaker 3>to back conferences. React Next is Israel's largest front end conference,

1368
01:10:51.000 --> 01:10:54.880
<v Speaker 3>and No TLV is obviously about node. Josh was actually

1369
01:10:54.920 --> 01:10:59.119
<v Speaker 3>supposed to come and keynote the No TLV conference. Obviously

1370
01:10:59.479 --> 01:11:02.199
<v Speaker 3>he can't do this at this time. I was actually

1371
01:11:02.199 --> 01:11:07.159
<v Speaker 3>supposed to keynote React Next. You know, for obvious reasons,

1372
01:11:07.439 --> 01:11:11.159
<v Speaker 3>these conferences have been postponed. So now they've been rescheduled

1373
01:11:11.239 --> 01:11:15.279
<v Speaker 3>from the end of this month to mid December. Hopefully

1374
01:11:15.439 --> 01:11:18.520
<v Speaker 3>by that time all this stuff would be behind us

1375
01:11:18.600 --> 01:11:23.800
<v Speaker 3>and we can have conferences like normal human beings. And

1376
01:11:24.760 --> 01:11:27.840
<v Speaker 3>that would be my announcements and picks for today.

1377
01:11:27.840 --> 01:11:33.800
<v Speaker 1>I guess alrighty, I will go next and go to

1378
01:11:33.920 --> 01:11:35.720
<v Speaker 1>what I prefer to think of as high point of

1379
01:11:36.800 --> 01:11:38.880
<v Speaker 1>our podcast, which is the dad jokes of the week.

1380
01:11:40.680 --> 01:11:42.600
<v Speaker 1>The other day I went into the library and I

1381
01:11:42.640 --> 01:11:44.560
<v Speaker 1>told the library and hey, I'm looking for a book

1382
01:11:44.560 --> 01:11:47.119
<v Speaker 1>about turtles. And he said hardback, and I said, yes,

1383
01:11:47.119 --> 01:11:55.760
<v Speaker 1>with small heads, all right, okay. Questions, So humans can

1384
01:11:55.800 --> 01:11:59.479
<v Speaker 1>catch diseases from monkeys and bats, but why not anteaters

1385
01:12:00.840 --> 01:12:07.880
<v Speaker 1>because they're filled with antibodies, right, okay?

1386
01:12:08.119 --> 01:12:09.760
<v Speaker 2>And then and.

1387
01:12:09.680 --> 01:12:13.239
<v Speaker 1>Then one day I made a call and I said, hey,

1388
01:12:13.279 --> 01:12:17.399
<v Speaker 1>is this the Gambling Addicts hotline, and the operator said, yeah,

1389
01:12:17.439 --> 01:12:20.199
<v Speaker 1>how can I help you? I said, the dealer had

1390
01:12:20.199 --> 01:12:22.760
<v Speaker 1>a ten against my sixteen? Should I hit or stand.

1391
01:12:25.720 --> 01:12:29.119
<v Speaker 2>Right? I was asking for help on gambling anyway, Yeah,

1392
01:12:29.159 --> 01:12:32.159
<v Speaker 2>I get it, d met You looked a little confused.

1393
01:12:32.359 --> 01:12:33.920
<v Speaker 4>I don't think I still I think I still don't

1394
01:12:33.920 --> 01:12:34.239
<v Speaker 4>get it.

1395
01:12:34.279 --> 01:12:36.359
<v Speaker 1>But well, you know, gambling at and you called to

1396
01:12:36.359 --> 01:12:38.479
<v Speaker 1>get help to avoid gambling, but I was calling for

1397
01:12:38.520 --> 01:12:39.039
<v Speaker 1>help on a.

1398
01:12:39.960 --> 01:12:42.600
<v Speaker 3>I can't tell a funny story about the fact that

1399
01:12:42.680 --> 01:12:45.399
<v Speaker 3>you know some and this is a true story. So

1400
01:12:46.640 --> 01:12:48.439
<v Speaker 3>the company that I used to work, we would go

1401
01:12:48.520 --> 01:12:52.680
<v Speaker 3>out to eat lunch at some restaurant and we would

1402
01:12:52.680 --> 01:12:55.800
<v Speaker 3>go there pretty regularly, so we got into kind of

1403
01:12:55.800 --> 01:12:59.800
<v Speaker 3>friendly terms with the owner and he would come and

1404
01:12:59.840 --> 01:13:02.399
<v Speaker 3>say it with us when we arrived and he and

1405
01:13:02.439 --> 01:13:05.199
<v Speaker 3>he liked gambling. He would literally, you know, when he

1406
01:13:05.239 --> 01:13:10.359
<v Speaker 3>could go to some casino to play. And he told

1407
01:13:10.439 --> 01:13:14.079
<v Speaker 3>us about how stupid some of the other gamblers are.

1408
01:13:14.600 --> 01:13:18.960
<v Speaker 3>That he was at the roulette table and it came

1409
01:13:19.039 --> 01:13:21.600
<v Speaker 3>up black like four times in a row, and one

1410
01:13:21.680 --> 01:13:24.399
<v Speaker 3>of the other people put on black. The bet on

1411
01:13:24.439 --> 01:13:27.880
<v Speaker 3>black again, he said, what's the chance of having coming black?

1412
01:13:28.000 --> 01:13:33.600
<v Speaker 3>Five times in a row, and we and we didn't

1413
01:13:33.600 --> 01:13:36.159
<v Speaker 3>want to and we didn't want to correct him because

1414
01:13:36.199 --> 01:13:38.399
<v Speaker 3>we didn't want to get poisoned the next time we

1415
01:13:38.880 --> 01:13:39.479
<v Speaker 3>came to eat.

1416
01:13:42.439 --> 01:13:44.239
<v Speaker 2>Yeah, all right, Gimet, you your turn.

1417
01:13:45.159 --> 01:13:47.439
<v Speaker 4>I'm going to give it up to ts morph. For

1418
01:13:47.520 --> 01:13:49.880
<v Speaker 4>those of you who haven't seen it, it's a project

1419
01:13:49.960 --> 01:13:54.159
<v Speaker 4>that allows you to do conversions on the kind of AST.

1420
01:13:54.359 --> 01:13:58.039
<v Speaker 4>You can describe changes and refactors to a project based

1421
01:13:58.039 --> 01:14:01.520
<v Speaker 4>on its AST and it it's a pretty cool project.

1422
01:14:01.520 --> 01:14:02.880
<v Speaker 4>And I don't know, I just I like. It is

1423
01:14:02.880 --> 01:14:04.199
<v Speaker 4>the first thing that came to mind. So I thought

1424
01:14:04.199 --> 01:14:06.119
<v Speaker 4>it'd be authentic if I just tell you what is

1425
01:14:06.199 --> 01:14:10.199
<v Speaker 4>on my mind that I like. Let's see, is that

1426
01:14:10.600 --> 01:14:12.319
<v Speaker 4>the pickway? Is there two things I'm supposed to pick?

1427
01:14:12.399 --> 01:14:14.760
<v Speaker 3>You can pick whatever you want. I expected you to

1428
01:14:14.880 --> 01:14:16.720
<v Speaker 3>pick a squiggle cony.

1429
01:14:16.760 --> 01:14:20.840
<v Speaker 4>Oh yeah, okay, okay, great, you read my mind. Also,

1430
01:14:21.319 --> 01:14:25.479
<v Speaker 4>so we've talked about Josh Josh okay, yeah, so okay

1431
01:14:25.600 --> 01:14:29.119
<v Speaker 4>before the call, I was saying at squiggle comp, so

1432
01:14:29.279 --> 01:14:31.720
<v Speaker 4>I run a conference with Josh Goldberg. We're co founders

1433
01:14:32.359 --> 01:14:35.239
<v Speaker 4>of squiggle comp. And the name is such because it's

1434
01:14:35.279 --> 01:14:38.039
<v Speaker 4>a dev tools conference. So there's lots of people that

1435
01:14:38.079 --> 01:14:40.199
<v Speaker 4>are making dev tooling and that's their kind of bread

1436
01:14:40.199 --> 01:14:43.880
<v Speaker 4>and butter, even internally at a company, but externally library

1437
01:14:43.880 --> 01:14:46.279
<v Speaker 4>authors and stuff like that, and Google COMP is a

1438
01:14:46.279 --> 01:14:49.479
<v Speaker 4>place for those people to get together and ruminate in

1439
01:14:49.520 --> 01:14:53.119
<v Speaker 4>the things that they learned building these tools. It's a

1440
01:14:53.119 --> 01:14:56.359
<v Speaker 4>cross language conference, so it's not a type trip conference only.

1441
01:14:56.399 --> 01:14:58.800
<v Speaker 4>We have representation from RUST. Last year we had ZIG.

1442
01:14:58.920 --> 01:15:01.439
<v Speaker 4>This year we're having Glean as well, up and coming

1443
01:15:01.479 --> 01:15:05.319
<v Speaker 4>language C plus plus C Sharp is also represented GO.

1444
01:15:05.560 --> 01:15:09.079
<v Speaker 4>There's two talks focusing on Go this year. So it's

1445
01:15:09.119 --> 01:15:12.359
<v Speaker 4>a really cool opportunity to get experience and exposure to

1446
01:15:12.399 --> 01:15:15.720
<v Speaker 4>what other communities and other languages are doing. And yeah,

1447
01:15:15.760 --> 01:15:18.159
<v Speaker 4>we're very passionate about it. Of course you have to

1448
01:15:18.159 --> 01:15:20.479
<v Speaker 4>be to run a conference. But I didn't even realize that.

1449
01:15:20.520 --> 01:15:23.000
<v Speaker 4>I didn't know that we were even being video recorded today.

1450
01:15:23.159 --> 01:15:25.439
<v Speaker 4>Last year at the conference, somebody spilled some coffee on

1451
01:15:25.479 --> 01:15:28.640
<v Speaker 4>a bunch of Squiggle COF twenty twenty four shirts and

1452
01:15:28.640 --> 01:15:31.159
<v Speaker 4>so we couldn't sell them. And so now I have

1453
01:15:31.279 --> 01:15:33.279
<v Speaker 4>like five Squiggle comp shirts, which means that when I

1454
01:15:33.319 --> 01:15:34.880
<v Speaker 4>reach into my drawer to pull out our shirt in

1455
01:15:34.920 --> 01:15:38.039
<v Speaker 4>the morning, there's a abnormally high chance that I'll pull

1456
01:15:38.039 --> 01:15:40.760
<v Speaker 4>out a Squiggle Comp shirt which is very comfortable, so

1457
01:15:40.840 --> 01:15:41.399
<v Speaker 4>it works out.

1458
01:15:41.720 --> 01:15:44.840
<v Speaker 3>A little bird just mentioned, A little bird called Nick

1459
01:15:44.880 --> 01:15:50.239
<v Speaker 3>called Josh just mentioned on our chat that you have

1460
01:15:50.319 --> 01:15:52.560
<v Speaker 3>a great dad joke about Richard Nixon.

1461
01:15:54.000 --> 01:15:56.439
<v Speaker 4>I don't have a great dag joke about Richard Nixon.

1462
01:15:56.920 --> 01:15:57.680
<v Speaker 3>Astant.

1463
01:16:01.079 --> 01:16:06.199
<v Speaker 4>I don't know, I don't know. Sorry, I'm sorry to

1464
01:16:06.199 --> 01:16:12.640
<v Speaker 4>disappoint you, Josh. I may I may, I may know.

1465
01:16:12.920 --> 01:16:15.800
<v Speaker 4>Have forgotten. I'm not very I'm not very funny. Maybe

1466
01:16:15.840 --> 01:16:16.439
<v Speaker 4>I can own that.

1467
01:16:17.119 --> 01:16:23.439
<v Speaker 3>Oh well, By the way, I highly recommend people watch

1468
01:16:23.479 --> 01:16:26.520
<v Speaker 3>the videos that you created. Where can people find them?

1469
01:16:27.119 --> 01:16:29.439
<v Speaker 4>Well, sorry, I just one last thing I forgot to mention.

1470
01:16:29.520 --> 01:16:32.399
<v Speaker 4>So Squiggle Comp this year is in Boston on September

1471
01:16:32.439 --> 01:16:35.520
<v Speaker 4>seventeenth and eighteenth. It's a really cool venue. It's in

1472
01:16:35.520 --> 01:16:38.159
<v Speaker 4>the New England Aquarium and there's a big Imax screen

1473
01:16:38.199 --> 01:16:40.000
<v Speaker 4>so it's like super comfortable and where it's a two

1474
01:16:40.079 --> 01:16:42.840
<v Speaker 4>day conference this year. We just this week announced all

1475
01:16:42.880 --> 01:16:46.039
<v Speaker 4>of the speakers and all their talk their talk topics,

1476
01:16:46.159 --> 01:16:47.720
<v Speaker 4>so you can go read the list to just go

1477
01:16:47.720 --> 01:16:50.960
<v Speaker 4>to squigglecof dot com. C s q U I G

1478
01:16:50.960 --> 01:16:53.520
<v Speaker 4>G L E c O n F and you'll find

1479
01:16:53.560 --> 01:16:56.479
<v Speaker 4>all the information there, so please take a look. Also,

1480
01:16:56.720 --> 01:16:59.720
<v Speaker 4>in kind of parallel to that, yes, I run the

1481
01:16:59.800 --> 01:17:02.239
<v Speaker 4>kind a video aspect of Michigan type Script, but there's

1482
01:17:02.239 --> 01:17:04.520
<v Speaker 4>lots of other people involved with Michigan type script. Is

1483
01:17:04.560 --> 01:17:07.239
<v Speaker 4>this other project from my home state. Here in Michigan.

1484
01:17:07.439 --> 01:17:09.840
<v Speaker 4>We have a meetup that meets once a month. Actually,

1485
01:17:09.840 --> 01:17:12.560
<v Speaker 4>we were meeting in two weeks from yesterday, and we're

1486
01:17:12.600 --> 01:17:15.439
<v Speaker 4>going to be uh definitely represented. We have a few

1487
01:17:15.439 --> 01:17:17.560
<v Speaker 4>people coming out to Squiggle Comf as well from Michigan.

1488
01:17:17.680 --> 01:17:20.359
<v Speaker 4>So it's a it's a good time. I enjoy this

1489
01:17:20.439 --> 01:17:22.119
<v Speaker 4>kind of stuff. Labors of love, you.

1490
01:17:22.079 --> 01:17:26.560
<v Speaker 3>Know, So I have as a homage to Josh, he

1491
01:17:26.680 --> 01:17:28.119
<v Speaker 3>basically wrote out the joke.

1492
01:17:28.399 --> 01:17:29.560
<v Speaker 4>Okay, all right, let's hear it.

1493
01:17:30.279 --> 01:17:33.760
<v Speaker 3>So, so it turns out that Richard Nixon worked at

1494
01:17:33.760 --> 01:17:37.640
<v Speaker 3>the restaurant. Apparently he mostly worked front of house. They

1495
01:17:37.680 --> 01:17:39.880
<v Speaker 3>offered him a space in the back of the house

1496
01:17:39.960 --> 01:17:43.600
<v Speaker 3>like working food prep and culinary work, but he declined,

1497
01:17:43.680 --> 01:17:45.319
<v Speaker 3>saying I'm not a cook.

1498
01:17:50.279 --> 01:17:50.800
<v Speaker 4>That's a joke.

1499
01:17:51.119 --> 01:17:54.199
<v Speaker 2>That was a long road for that one, but we'll

1500
01:17:54.199 --> 01:17:54.600
<v Speaker 2>give it to.

1501
01:17:56.279 --> 01:17:59.119
<v Speaker 3>It's not me, it's Josh, all right, right, all.

1502
01:17:59.159 --> 01:18:01.840
<v Speaker 1>Right, so that awesome dad joke. We will end this

1503
01:18:01.960 --> 01:18:04.880
<v Speaker 1>episode of JavaScript Jabber. Thank you Dimitri for coming on,

1504
01:18:05.039 --> 01:18:07.119
<v Speaker 1>thank you Dan for joining us, Sirens.

1505
01:18:06.680 --> 01:18:08.560
<v Speaker 2>And all, and

1506
01:18:08.640 --> 01:18:12.159
<v Speaker 1>We will talk to you next time on JavaScript Jabber
