WEBVTT

1
00:00:01.080 --> 00:00:03.000
<v Speaker 1>How'd you like to listen to dot net rocks with

2
00:00:03.040 --> 00:00:07.879
<v Speaker 1>no ads? Easy? Become a patron for just five dollars

3
00:00:07.919 --> 00:00:10.800
<v Speaker 1>a month. You get access to a private RSS feed

4
00:00:10.839 --> 00:00:14.240
<v Speaker 1>where all the shows have no ads. Twenty dollars a month.

5
00:00:14.279 --> 00:00:16.879
<v Speaker 1>We'll get you that and a special dot net Rocks

6
00:00:16.960 --> 00:00:21.000
<v Speaker 1>patron mug. Sign up now at Patreon dot dot NetRocks

7
00:00:21.120 --> 00:00:36.640
<v Speaker 1>dot com. Hey, guess what it's dot net rocks. I'm

8
00:00:36.679 --> 00:00:39.520
<v Speaker 1>Carl Franklin, an amateur Campbell. Well, you didn't have to

9
00:00:39.520 --> 00:00:41.640
<v Speaker 1>guess because you knew because you You pushed the button

10
00:00:41.640 --> 00:00:42.640
<v Speaker 1>to listen, didn't you.

11
00:00:42.679 --> 00:00:43.159
<v Speaker 2>There you go.

12
00:00:43.399 --> 00:00:45.600
<v Speaker 3>Yeah, it's just like the old way we telephones. Right

13
00:00:45.600 --> 00:00:47.079
<v Speaker 3>when foleophones is gonning aft to the wall and I

14
00:00:47.079 --> 00:00:48.399
<v Speaker 3>called you, I didn't have to ask you where you

15
00:00:48.479 --> 00:00:51.679
<v Speaker 3>were because you answered the phone you knew where it was.

16
00:00:52.520 --> 00:00:55.439
<v Speaker 1>Hey, you're home. That's usually what we would say. I'm

17
00:00:55.439 --> 00:01:02.640
<v Speaker 1>glad I got you. Uh wow, comf coming up or

18
00:01:02.679 --> 00:01:06.040
<v Speaker 1>maybe it's already gone by. I'm not sure. We'll take

19
00:01:06.079 --> 00:01:09.159
<v Speaker 1>care of that later, but in the meantime, let's roll

20
00:01:09.159 --> 00:01:19.640
<v Speaker 1>the music for a better no framework awesome? All right,

21
00:01:19.680 --> 00:01:20.040
<v Speaker 1>what do you got?

22
00:01:20.120 --> 00:01:20.239
<v Speaker 2>Well?

23
00:01:20.280 --> 00:01:22.480
<v Speaker 1>I think both you guys would be interested in this.

24
00:01:22.480 --> 00:01:28.799
<v Speaker 1>This is Unity Technologies has an mL agents repo. The

25
00:01:28.920 --> 00:01:32.879
<v Speaker 1>Unity Machine Learning Agents Toolkit is an open source project

26
00:01:32.879 --> 00:01:36.799
<v Speaker 1>that enables games and simulations to serve as environments for

27
00:01:36.920 --> 00:01:42.519
<v Speaker 1>training intelligent agents using deep reinforcement learning and imitation learning.

28
00:01:42.959 --> 00:01:47.760
<v Speaker 3>Hmm interesting, Yeah, certainly it's all been on my radar

29
00:01:47.879 --> 00:01:49.480
<v Speaker 3>because I have a bunch of friends in the gaming

30
00:01:49.480 --> 00:01:51.959
<v Speaker 3>industry that a lot of the generative AI technologies are

31
00:01:51.959 --> 00:01:54.920
<v Speaker 3>being evaluated to make games less expensive to make.

32
00:01:55.280 --> 00:01:58.680
<v Speaker 1>Ah okay for building games, not necessarily for having intelligent

33
00:01:58.719 --> 00:01:59.760
<v Speaker 1>agents in them.

34
00:02:00.040 --> 00:02:02.840
<v Speaker 3>Not actually making the game play better, but like instead

35
00:02:02.879 --> 00:02:06.040
<v Speaker 3>of having to voice act every single line and plan

36
00:02:06.159 --> 00:02:09.039
<v Speaker 3>every single line of dialogue out the fact that you

37
00:02:09.080 --> 00:02:12.199
<v Speaker 3>can generate a voice now and you can give it

38
00:02:12.280 --> 00:02:15.159
<v Speaker 3>an area to talk about and it will literally, you know,

39
00:02:15.319 --> 00:02:18.800
<v Speaker 3>just generate to you know, spoken word for you speaks

40
00:02:18.800 --> 00:02:22.080
<v Speaker 3>to game experiences being better where you know, there's not

41
00:02:22.199 --> 00:02:25.639
<v Speaker 3>a fixed path through all of the words anymore. They

42
00:02:25.639 --> 00:02:27.840
<v Speaker 3>could say even more diverse things and you could go

43
00:02:28.080 --> 00:02:32.479
<v Speaker 3>create far more words effectively, you know, imagine your behavior

44
00:02:32.479 --> 00:02:35.879
<v Speaker 3>towards an NPC actually changes the way that NPC speaks

45
00:02:35.919 --> 00:02:38.240
<v Speaker 3>to you, even if they communicate the same facts.

46
00:02:38.080 --> 00:02:42.639
<v Speaker 1>And the hallucinations add bonus entertainment in a fantasy world that.

47
00:02:42.599 --> 00:02:45.479
<v Speaker 3>Would be a feature in a game, not a feature

48
00:02:45.520 --> 00:02:49.199
<v Speaker 3>in real life. But yes, exactly right. But tier one

49
00:02:49.319 --> 00:02:51.759
<v Speaker 3>video games to the billion dollar games, of which is

50
00:02:51.800 --> 00:02:55.560
<v Speaker 3>maybe ten a year, cost a couple hundred million to make,

51
00:02:56.520 --> 00:03:01.159
<v Speaker 3>and so you can't make more. It's very high risk intolerance.

52
00:03:01.240 --> 00:03:04.080
<v Speaker 3>So the idea that we'd reduce the cost of game creation,

53
00:03:04.520 --> 00:03:07.199
<v Speaker 3>democracize some of this technology, it's pretty compelling.

54
00:03:07.280 --> 00:03:10.919
<v Speaker 1>Well, Richard, before we get into the message that you

55
00:03:10.919 --> 00:03:14.479
<v Speaker 1>want to read, let's talk about what happened in nineteen

56
00:03:14.599 --> 00:03:16.479
<v Speaker 1>twenty four twenty four.

57
00:03:16.560 --> 00:03:19.719
<v Speaker 2>This is Oh, you got any favorite highlights for nineteen

58
00:03:19.759 --> 00:03:20.240
<v Speaker 2>twenty four?

59
00:03:20.439 --> 00:03:24.360
<v Speaker 1>Yeah, so this is episode nineteen twenty four, and Dylan

60
00:03:24.400 --> 00:03:27.840
<v Speaker 1>you can chime in here too. As we're getting further

61
00:03:27.879 --> 00:03:29.919
<v Speaker 1>and further up in history, I thought, you know, let's

62
00:03:29.960 --> 00:03:32.479
<v Speaker 1>highlight some of the things that happened that year. Some

63
00:03:32.560 --> 00:03:34.879
<v Speaker 1>of them may or may not be relevant to what's

64
00:03:34.919 --> 00:03:35.520
<v Speaker 1>going on today.

65
00:03:37.520 --> 00:03:40.479
<v Speaker 2>In nineteen twenty three, I mentioned the beer hall pushed right.

66
00:03:40.360 --> 00:03:42.919
<v Speaker 1>That's right, So there are consequences for Adolf Hitler in

67
00:03:42.960 --> 00:03:43.840
<v Speaker 1>twenty four and.

68
00:03:43.879 --> 00:03:46.800
<v Speaker 3>Twenty four is when his trial is and he's quote,

69
00:03:47.039 --> 00:03:49.680
<v Speaker 3>you know, imprisoned for five years, but he's out in

70
00:03:49.800 --> 00:03:50.759
<v Speaker 3>nine months.

71
00:03:51.120 --> 00:03:53.879
<v Speaker 1>Out in nine months. Yeah, that's right. Yeah, right's mind

72
00:03:54.000 --> 00:03:56.599
<v Speaker 1>camp while he's at it. Yeah, so that must have

73
00:03:56.680 --> 00:03:59.759
<v Speaker 1>really made him mad and that may have contributed to

74
00:03:59.840 --> 00:04:03.800
<v Speaker 1>his whatever. Okay. So January twenty fifth, the first Winter

75
00:04:03.879 --> 00:04:09.560
<v Speaker 1>Olympics nineteen twenty four Winter Olympics open in Shawnee, Chemnois

76
00:04:10.520 --> 00:04:13.759
<v Speaker 1>in the French Alps. Sorry French people, I do not

77
00:04:13.879 --> 00:04:14.479
<v Speaker 1>speak French.

78
00:04:14.599 --> 00:04:18.920
<v Speaker 2>Chemony. It's a tremendous apport, ah because billionaires use it

79
00:04:19.000 --> 00:04:20.959
<v Speaker 2>to fly in ghostkiing for a day and then fly

80
00:04:21.000 --> 00:04:25.519
<v Speaker 2>out again. And it's one of those strips that you

81
00:04:25.720 --> 00:04:27.560
<v Speaker 2>kind of there's a suddin point where you kind of

82
00:04:27.600 --> 00:04:29.360
<v Speaker 2>need to fall off the end and get up enough

83
00:04:29.439 --> 00:04:30.920
<v Speaker 2>sp that you can pull up at the other side

84
00:04:30.920 --> 00:04:33.120
<v Speaker 2>of that nice It is true the walk.

85
00:04:33.480 --> 00:04:37.120
<v Speaker 1>Yeah, and that was the voice of Dylan Beattie, who

86
00:04:37.199 --> 00:04:39.959
<v Speaker 1>does interesting things with computer's code, comedy, music, and video,

87
00:04:40.040 --> 00:04:42.639
<v Speaker 1>then travels all over the world and tells people about it. Hello, Okay,

88
00:04:42.680 --> 00:04:44.319
<v Speaker 1>so I got his buy out out of the way.

89
00:04:45.040 --> 00:04:48.759
<v Speaker 1>January twenty six, Petrograd, which is Saint Petersburg, is renamed

90
00:04:48.839 --> 00:04:52.879
<v Speaker 1>Leningrad and it'll revert to Saint Petersburg in nineteen ninety one.

91
00:04:53.680 --> 00:04:57.839
<v Speaker 1>February fifth, gmt A radio time signals broadcast for the

92
00:04:57.879 --> 00:05:01.240
<v Speaker 1>first time from the Royal Greenwich observ Cool nod to

93
00:05:01.319 --> 00:05:04.720
<v Speaker 1>Richard there, that's a good one, yeah. February fourteenth, the

94
00:05:04.800 --> 00:05:08.920
<v Speaker 1>Computing Tabulating Recording Company CTR, based in the US state

95
00:05:08.920 --> 00:05:13.959
<v Speaker 1>of New York, is renamed to IBM IBM. March twenty fourth,

96
00:05:14.040 --> 00:05:17.279
<v Speaker 1>Jean Sibelius or Jean Sabelius conducts the world premiere of

97
00:05:17.360 --> 00:05:21.199
<v Speaker 1>his symphony Number seven in Stockholm. March twenty fifth, the

98
00:05:21.240 --> 00:05:25.319
<v Speaker 1>Second Hellenic Republic is proclaimed in Greece. April first is

99
00:05:25.360 --> 00:05:28.399
<v Speaker 1>when Hitler was sentenced to five years in Landesburg prison

100
00:05:28.519 --> 00:05:33.959
<v Speaker 1>for his participation in the Beer Hall. Butch April sixth

101
00:05:34.000 --> 00:05:37.800
<v Speaker 1>Italian general election nineteen twenty four, Fascists win the elections

102
00:05:37.839 --> 00:05:43.000
<v Speaker 1>in Italy with a two thirds majority. April seventeen, Metro

103
00:05:43.240 --> 00:05:46.439
<v Speaker 1>Pictures Corporation, Goldwyn Pictures and Louis B. Mayer Productions are

104
00:05:46.439 --> 00:05:51.360
<v Speaker 1>merged to become MGM. May thirtieth, Italian socialist leader Jacomo

105
00:05:51.560 --> 00:05:56.480
<v Speaker 1>Mettier Mettioti, matt Tiati. I'm going with Mattiati speaks out

106
00:05:56.480 --> 00:05:59.319
<v Speaker 1>against fascism. A few days later, he's kidnapped and murdered

107
00:05:59.360 --> 00:06:03.399
<v Speaker 1>in Rome. September nineth through eleventh, the kahlhat and riots

108
00:06:03.399 --> 00:06:07.120
<v Speaker 1>breakout in India. October tewod the Geneva Protocol is adopted

109
00:06:07.120 --> 00:06:09.680
<v Speaker 1>by the League of Nations Assembly as a means to

110
00:06:09.759 --> 00:06:14.879
<v Speaker 1>strengthen the League, but later fails to be ratified. November tenth,

111
00:06:14.920 --> 00:06:17.600
<v Speaker 1>the trial one hundred and forty nine begins in Estonia,

112
00:06:17.680 --> 00:06:20.160
<v Speaker 1>eventually resulting in the conviction of one hundred and twenty

113
00:06:20.199 --> 00:06:26.480
<v Speaker 1>nine communists, including several members of the Reche cow. I

114
00:06:26.519 --> 00:06:28.000
<v Speaker 1>don't know how to say that, but.

115
00:06:27.959 --> 00:06:29.639
<v Speaker 3>You're also talking about this is the time of the

116
00:06:29.680 --> 00:06:32.560
<v Speaker 3>emergence of the Soviet Union, right, Yeah, that's right. Tendency

117
00:06:32.560 --> 00:06:33.600
<v Speaker 3>of communism YEP.

118
00:06:34.360 --> 00:06:37.360
<v Speaker 1>December twenty in Germany Hainlf Hitler's release from the prison.

119
00:06:38.040 --> 00:06:42.439
<v Speaker 1>December twenty fourth, Albania becomes republic. In December thirty, American

120
00:06:42.480 --> 00:06:47.680
<v Speaker 1>astronomer Edwin Hubble announces that Andromeda, previously believed to be

121
00:06:47.720 --> 00:06:51.759
<v Speaker 1>a nebula, is actually another galaxy, and that the Milky

122
00:06:51.800 --> 00:06:54.959
<v Speaker 1>Way is only one of many such galaxies in the universe.

123
00:06:55.399 --> 00:06:56.560
<v Speaker 2>Sound that long ago, is it?

124
00:06:57.040 --> 00:06:57.319
<v Speaker 1>Yeah?

125
00:06:57.360 --> 00:07:01.199
<v Speaker 3>I would add one more four is actually the beginning

126
00:07:01.480 --> 00:07:03.720
<v Speaker 3>of the civil war in China that will lead to

127
00:07:03.759 --> 00:07:07.160
<v Speaker 3>the Chinese Communist Revolution. Wow, although they don't really They

128
00:07:07.160 --> 00:07:09.879
<v Speaker 3>say the war started in twenty seven, but Kaichek is

129
00:07:09.920 --> 00:07:13.879
<v Speaker 3>grabbing cities like stuff is up before Mao actually kicks

130
00:07:13.920 --> 00:07:18.439
<v Speaker 3>off the march. It was an interesting year. Two ways

131
00:07:18.480 --> 00:07:18.839
<v Speaker 3>about it.

132
00:07:18.959 --> 00:07:22.360
<v Speaker 2>Yeah, so you mentioned that is the IBM became IBM.

133
00:07:23.040 --> 00:07:27.360
<v Speaker 2>You know, IBM has averaged four patents a day since then. Wow?

134
00:07:27.519 --> 00:07:30.800
<v Speaker 2>They Yeah. If you average out the number of patents

135
00:07:30.800 --> 00:07:34.240
<v Speaker 2>awarded to IBM engineers over the last century, it's something

136
00:07:34.279 --> 00:07:36.920
<v Speaker 2>like one hundred and fifty hundred years, which is about

137
00:07:36.959 --> 00:07:40.879
<v Speaker 2>four point one patents per day, sustained for one hundred years.

138
00:07:40.360 --> 00:07:44.759
<v Speaker 1>And in the last ten years they've all been fonts.

139
00:07:46.879 --> 00:07:48.759
<v Speaker 2>IBM has the largest gone to computer in the world

140
00:07:48.800 --> 00:07:51.120
<v Speaker 2>the moment. It's called the IBM System two.

141
00:07:52.040 --> 00:07:54.600
<v Speaker 3>There's only one of them, and it's the largest cryo

142
00:07:54.720 --> 00:07:55.639
<v Speaker 3>cooler on the planet.

143
00:07:55.839 --> 00:07:56.120
<v Speaker 2>Nice.

144
00:07:56.240 --> 00:07:58.399
<v Speaker 1>Nothing beats you in a blab from the Jetsons, though,

145
00:08:03.879 --> 00:08:08.199
<v Speaker 1>lab Shall I read a comment? Yes? Please? Who's talking

146
00:08:08.199 --> 00:08:08.639
<v Speaker 1>to us? Switch?

147
00:08:08.720 --> 00:08:11.040
<v Speaker 3>I'll grab a comment. I've jumped into the wayback machine

148
00:08:11.079 --> 00:08:13.680
<v Speaker 3>here and grabbed a comment off the show twelve o three.

149
00:08:14.800 --> 00:08:17.959
<v Speaker 3>So that's from twenty fifteen when we talked about programming

150
00:08:18.079 --> 00:08:20.519
<v Speaker 3>in Go Wow, because I know we're going to have

151
00:08:20.560 --> 00:08:24.680
<v Speaker 3>some conversations in a language with Mike ben Sickel generated

152
00:08:24.680 --> 00:08:27.079
<v Speaker 3>a ton of comments lots of people. It should you know,

153
00:08:27.800 --> 00:08:30.759
<v Speaker 3>back in twenty fifteen, polyglot was already hit. But you

154
00:08:30.800 --> 00:08:33.919
<v Speaker 3>know it's now it's just mainstream. And Aaron has this

155
00:08:33.960 --> 00:08:35.200
<v Speaker 3>great comment, admittedly.

156
00:08:34.799 --> 00:08:35.480
<v Speaker 1>From nine years ago.

157
00:08:35.480 --> 00:08:39.000
<v Speaker 3>He said, being passively familiar with many languages and toolkits

158
00:08:39.039 --> 00:08:42.120
<v Speaker 3>provide some value. Commonalities start to jump out at you,

159
00:08:42.159 --> 00:08:44.360
<v Speaker 3>and you can start to develop an understanding of concepts

160
00:08:44.600 --> 00:08:49.200
<v Speaker 3>that transcend a specific language. That said, actually, quote getting

161
00:08:49.240 --> 00:08:51.320
<v Speaker 3>things done does demand a good amount of attention to

162
00:08:51.320 --> 00:08:54.039
<v Speaker 3>a single framework long enough to become effective in it.

163
00:08:54.679 --> 00:08:57.000
<v Speaker 3>The most effective way I know to learn a language

164
00:08:57.039 --> 00:09:00.159
<v Speaker 3>more deeply is to switch from I'm learning X to

165
00:09:00.440 --> 00:09:04.840
<v Speaker 3>I'm trying to get Z done. Go make something right right.

166
00:09:05.039 --> 00:09:07.399
<v Speaker 3>In other words, set out to solve a specific problem

167
00:09:07.440 --> 00:09:10.120
<v Speaker 3>right a small program, contribute to an open source solution.

168
00:09:10.840 --> 00:09:13.519
<v Speaker 3>The quote fear of missing out that people often have

169
00:09:13.600 --> 00:09:16.600
<v Speaker 3>jumping from language language is much suppressed by trying to

170
00:09:16.639 --> 00:09:19.120
<v Speaker 3>get something specific done, especially if you go contribute to

171
00:09:19.159 --> 00:09:20.080
<v Speaker 3>an existing project.

172
00:09:20.159 --> 00:09:21.639
<v Speaker 1>That's how I taught myself.

173
00:09:22.080 --> 00:09:24.720
<v Speaker 3>Yeah, yeah, for sure, make something. But I also like

174
00:09:24.759 --> 00:09:28.159
<v Speaker 3>this contribute to open source because if you can get

175
00:09:28.159 --> 00:09:32.080
<v Speaker 3>through a pr in a new language from somebody else

176
00:09:32.120 --> 00:09:35.799
<v Speaker 3>who uses the language meaningfully, like, that's a confirmation you've

177
00:09:35.879 --> 00:09:38.759
<v Speaker 3>learned some things, you're doing it well enough to make

178
00:09:38.799 --> 00:09:39.519
<v Speaker 3>a contribution.

179
00:09:39.600 --> 00:09:42.639
<v Speaker 1>I always try to make those projects just out of

180
00:09:42.720 --> 00:09:45.440
<v Speaker 1>what I think I can do, just outside the box

181
00:09:45.480 --> 00:09:47.919
<v Speaker 1>of what I think my ability is.

182
00:09:48.159 --> 00:09:52.639
<v Speaker 2>There's an interesting parallel, like, as I'm sure call, you've

183
00:09:52.639 --> 00:09:54.200
<v Speaker 2>also had folks come up to you like, how do

184
00:09:54.200 --> 00:09:56.080
<v Speaker 2>you learn to play the guitar? I want to learn

185
00:09:56.080 --> 00:09:58.320
<v Speaker 2>a play an instrument. It's like you come like learning

186
00:09:58.320 --> 00:10:00.320
<v Speaker 2>a plan instrument. You start now and you I'll still

187
00:10:00.320 --> 00:10:02.240
<v Speaker 2>be learning when you die. Yeah, but you could learn

188
00:10:02.320 --> 00:10:04.480
<v Speaker 2>to play a song. What's your favorite song? Like like

189
00:10:04.519 --> 00:10:06.480
<v Speaker 2>pick us? Okay, maybe not that one, Maybe pick something

190
00:10:06.480 --> 00:10:08.559
<v Speaker 2>a little easier, a little simpler, but go hook on

191
00:10:08.600 --> 00:10:11.200
<v Speaker 2>the water for a reason, right, And like by the

192
00:10:11.240 --> 00:10:12.440
<v Speaker 2>end of the week, you'll be able to play Smoke

193
00:10:12.480 --> 00:10:14.919
<v Speaker 2>on the Water. Congratulations, Now you're a guitar player. Just

194
00:10:14.919 --> 00:10:17.399
<v Speaker 2>one with a limited repertoire. Yeah, and then you'll learn

195
00:10:17.399 --> 00:10:19.840
<v Speaker 2>another song, another song, another song, and eventually the pieces

196
00:10:19.879 --> 00:10:21.879
<v Speaker 2>start to click and the theory starts to make sense.

197
00:10:22.080 --> 00:10:24.200
<v Speaker 1>My favorite interaction is and I'm playing the gig and

198
00:10:24.240 --> 00:10:27.080
<v Speaker 1>somebody comes up and says, hey, wow, how long have

199
00:10:27.120 --> 00:10:34.519
<v Speaker 1>you been playing it? Him about forty minutes?

200
00:10:35.919 --> 00:10:38.120
<v Speaker 3>So, Aaron, thank you so much for your comment, and

201
00:10:38.159 --> 00:10:39.919
<v Speaker 3>a copy of music Koba is on its way to you.

202
00:10:39.960 --> 00:10:41.720
<v Speaker 3>And if you'd like a copy of music Koby, write

203
00:10:41.720 --> 00:10:43.759
<v Speaker 3>a comment on the website at dot net rocks dot

204
00:10:43.799 --> 00:10:46.120
<v Speaker 3>com or on the facebooks. You publish every show there,

205
00:10:46.120 --> 00:10:47.519
<v Speaker 3>and you be comment there and ever reading the show.

206
00:10:47.519 --> 00:10:49.039
<v Speaker 3>We'll send you a copy of music go by.

207
00:10:49.200 --> 00:10:51.919
<v Speaker 1>And you can follow us on ex Twitter if you like.

208
00:10:51.960 --> 00:10:54.000
<v Speaker 1>We're still there and we've been there for years. But

209
00:10:54.480 --> 00:10:56.720
<v Speaker 1>the cool kids are now hanging out at mastadon. I'm

210
00:10:56.799 --> 00:10:59.399
<v Speaker 1>Carl Franklin at tech hub dot Social and.

211
00:10:59.360 --> 00:11:02.960
<v Speaker 2>I'm Ridge Campbell the Social. But the really cool kids

212
00:11:03.000 --> 00:11:04.840
<v Speaker 2>are all on Blue Sky now because that's the latest

213
00:11:04.840 --> 00:11:08.440
<v Speaker 2>wave of migration. Was seeing. Yeah, this has been pretty

214
00:11:08.480 --> 00:11:09.159
<v Speaker 2>good right now.

215
00:11:09.480 --> 00:11:11.279
<v Speaker 3>I got a whole bunch of followers there all of

216
00:11:11.320 --> 00:11:14.000
<v Speaker 3>a sudden, Yeah, yeah, Blue Sky is cool.

217
00:11:14.039 --> 00:11:16.480
<v Speaker 1>It's very much well, the web interface is very much

218
00:11:16.519 --> 00:11:18.919
<v Speaker 1>like Twitter. Yeah, and that's the kind of what.

219
00:11:19.120 --> 00:11:22.000
<v Speaker 2>Is Jack Dorsey after all. The big thing that's happened

220
00:11:22.039 --> 00:11:25.480
<v Speaker 2>recently is that they haven't thing called starter packs, so

221
00:11:25.600 --> 00:11:27.600
<v Speaker 2>you can go on and this I think is just

222
00:11:27.639 --> 00:11:30.039
<v Speaker 2>a great feature. Like if you're organizing a conference and

223
00:11:30.080 --> 00:11:32.559
<v Speaker 2>all your speakers are on Blue Sky, you can give

224
00:11:32.600 --> 00:11:34.639
<v Speaker 2>people a starter pack. You like to click one button

225
00:11:34.679 --> 00:11:36.679
<v Speaker 2>and you're going to follow everyone who's speaking, right, that's

226
00:11:36.679 --> 00:11:38.519
<v Speaker 2>pretty good. And so a couple of folks started putting

227
00:11:38.559 --> 00:11:40.799
<v Speaker 2>together like this is the AI starter pack, this is

228
00:11:40.919 --> 00:11:43.600
<v Speaker 2>the you know, three D gaming starter pack. This is

229
00:11:44.240 --> 00:11:46.519
<v Speaker 2>and so you're like, where will all these followers come from?

230
00:11:46.600 --> 00:11:48.720
<v Speaker 2>And then you're like, oh, oh, I'm in a starter pack?

231
00:11:48.720 --> 00:11:51.120
<v Speaker 2>All right? Yeah, and you know it's I was talking

232
00:11:51.120 --> 00:11:53.000
<v Speaker 2>with Rendle about it earlier. It kind of feels like

233
00:11:53.080 --> 00:11:55.279
<v Speaker 2>Blue Sky has got a little better, and the kind

234
00:11:55.279 --> 00:11:56.960
<v Speaker 2>of gets it's a little worse and then better and

235
00:11:56.960 --> 00:11:58.799
<v Speaker 2>then worse, and it's like waves coming up the beach,

236
00:11:59.120 --> 00:12:02.200
<v Speaker 2>but the tide is definitely coming up, and it's getting

237
00:12:02.399 --> 00:12:04.600
<v Speaker 2>closer and closer to hitting what feels like a sort

238
00:12:04.600 --> 00:12:05.799
<v Speaker 2>of critical mass.

239
00:12:06.159 --> 00:12:11.240
<v Speaker 1>Yeah, yeah, I have my Blue Sky's social account. I

240
00:12:11.320 --> 00:12:13.519
<v Speaker 1>have one hundred and ninety five followers, so not a

241
00:12:13.519 --> 00:12:16.399
<v Speaker 1>whole bunch, but I do post there. I'm at Carl

242
00:12:16.399 --> 00:12:20.759
<v Speaker 1>Franklin dot b sky dot social in case anybody cares.

243
00:12:20.919 --> 00:12:22.679
<v Speaker 2>So the other thing I really like about the way

244
00:12:22.679 --> 00:12:24.759
<v Speaker 2>Blue Sky is set up is that your handles your domain,

245
00:12:25.360 --> 00:12:26.799
<v Speaker 2>so or if you want to set it up, it

246
00:12:26.840 --> 00:12:29.759
<v Speaker 2>can be. And so if you're you know, I'm dylanbet

247
00:12:29.840 --> 00:12:32.080
<v Speaker 2>dot net, because I'm dylanbet dot net and I have

248
00:12:32.120 --> 00:12:34.000
<v Speaker 2>the DNS and I control the domain, so that's how

249
00:12:34.039 --> 00:12:35.559
<v Speaker 2>you know it's me. So none of those kind of

250
00:12:35.679 --> 00:12:39.000
<v Speaker 2>blue tick verification, right, and you know, like the sort

251
00:12:39.000 --> 00:12:42.480
<v Speaker 2>of big newspapers. If you've got at Washingtonpost dot com,

252
00:12:42.519 --> 00:12:45.200
<v Speaker 2>then that's it. You're the Washington Post. You don't need

253
00:12:45.240 --> 00:12:48.399
<v Speaker 2>blue check marks and stuff. And you can because if

254
00:12:48.440 --> 00:12:50.639
<v Speaker 2>you control the DNS, you can sort of sub delegate it,

255
00:12:50.759 --> 00:12:52.919
<v Speaker 2>so you could have like, you know, Richard dot dot

256
00:12:52.960 --> 00:12:55.320
<v Speaker 2>net rocks and Carl dot dot net rocks, and the

257
00:12:55.360 --> 00:12:57.559
<v Speaker 2>whole mechanism filters down. I'm a big fan of anything

258
00:12:57.559 --> 00:13:00.600
<v Speaker 2>that uses DNS in interesting ways because it's such a

259
00:13:00.639 --> 00:13:03.399
<v Speaker 2>flexible and powerful system that I think has really stood

260
00:13:03.440 --> 00:13:04.080
<v Speaker 2>the test of time.

261
00:13:04.159 --> 00:13:06.600
<v Speaker 1>So well, we're also making it sound like mere mortals

262
00:13:06.639 --> 00:13:08.440
<v Speaker 1>won't be able to use it, but that's not true.

263
00:13:08.440 --> 00:13:09.600
<v Speaker 1>It's very easy, isn't it.

264
00:13:09.679 --> 00:13:12.519
<v Speaker 2>Yeah, Yeah, it's that Lenark. If you just want to

265
00:13:12.519 --> 00:13:13.960
<v Speaker 2>sign up, you just sign up and hey, now you're

266
00:13:13.960 --> 00:13:16.360
<v Speaker 2>reading and writing and you don't need like mast it on.

267
00:13:16.960 --> 00:13:18.759
<v Speaker 2>You know. I love what they tried to do with it,

268
00:13:18.960 --> 00:13:21.440
<v Speaker 2>but it feels like Linux. It feels like the people

269
00:13:21.440 --> 00:13:23.440
<v Speaker 2>who get it don't see the problem, and the people

270
00:13:23.440 --> 00:13:25.080
<v Speaker 2>who don't get it, I'm never going to get it.

271
00:13:25.159 --> 00:13:29.279
<v Speaker 3>Are you saying you don't like Linux and are the majority?

272
00:13:30.440 --> 00:13:34.679
<v Speaker 2>Linux is a wonderful cloud server operating system and I

273
00:13:34.759 --> 00:13:37.679
<v Speaker 2>will never use it to edit video? Put it that way.

274
00:13:38.080 --> 00:13:41.600
<v Speaker 1>Ah, good right, Okay, got concern there for a minute.

275
00:13:41.799 --> 00:13:43.840
<v Speaker 1>All right, dyl we're here to talk about to catch

276
00:13:43.919 --> 00:13:47.679
<v Speaker 1>up with you first of all, and talk about some

277
00:13:47.759 --> 00:13:50.279
<v Speaker 1>new things that are happening in your language, rock star.

278
00:13:50.440 --> 00:13:53.200
<v Speaker 1>Why don't you, yeah fill us in on how that

279
00:13:53.320 --> 00:13:55.600
<v Speaker 1>came to be and bring us back a little bit.

280
00:13:55.639 --> 00:13:57.200
<v Speaker 2>So well, I was trying to figure out what it was.

281
00:13:57.200 --> 00:13:58.799
<v Speaker 2>I can't remember, but I was on the show a

282
00:13:58.799 --> 00:14:03.440
<v Speaker 2>few years back talking about Rockstar, which is a tweet

283
00:14:03.519 --> 00:14:06.200
<v Speaker 2>that turned into a spec that turned into a so

284
00:14:06.320 --> 00:14:12.200
<v Speaker 2>the joke tweet it was, yeah, it's a joke, prank literally, Yeah.

285
00:14:13.720 --> 00:14:16.159
<v Speaker 2>It was a tweet from I think it was Pulster Vell,

286
00:14:16.399 --> 00:14:18.440
<v Speaker 2>the Octopus deploy guy, just saying, hey, you're had a

287
00:14:18.440 --> 00:14:21.440
<v Speaker 2>confused recruiter. Someone should make a language called Rockstar.

288
00:14:21.320 --> 00:14:23.799
<v Speaker 1>Because they always ask for rock Star developers.

289
00:14:24.240 --> 00:14:26.200
<v Speaker 2>Yeah, and there was this whole trope of we need

290
00:14:26.200 --> 00:14:29.279
<v Speaker 2>to hire Rockstar developers and we're looking for and you know,

291
00:14:29.679 --> 00:14:31.279
<v Speaker 2>and one of the nice things is that that has

292
00:14:31.399 --> 00:14:33.960
<v Speaker 2>that has gone down a little bit because it and

293
00:14:34.000 --> 00:14:38.720
<v Speaker 2>I think, yeah, yes to you, well, you know me

294
00:14:38.799 --> 00:14:40.759
<v Speaker 2>and all of the other people who have leaned in

295
00:14:40.840 --> 00:14:43.440
<v Speaker 2>on the joke and kind of got with it. And

296
00:14:43.840 --> 00:14:48.039
<v Speaker 2>so this it started out as a parody specification, just

297
00:14:48.080 --> 00:14:49.840
<v Speaker 2>a kind of you know, tongue in cheek piece of

298
00:14:49.840 --> 00:14:53.360
<v Speaker 2>technical writing about like you know, it was one markdown

299
00:14:53.399 --> 00:14:56.759
<v Speaker 2>file on a GitHub po And what I've done is

300
00:14:56.799 --> 00:14:59.960
<v Speaker 2>I tried to take as many cliches from rock and metal,

301
00:15:00.159 --> 00:15:04.120
<v Speaker 2>heavy metal, soft rock and yeah, and see, you know,

302
00:15:04.279 --> 00:15:08.080
<v Speaker 2>is there enough formulaic consistency that you can derive a

303
00:15:08.120 --> 00:15:12.120
<v Speaker 2>grammar from it? And it got it kind of got

304
00:15:12.159 --> 00:15:17.799
<v Speaker 2>too far, too fast for me to give up. Hilarious,

305
00:15:18.360 --> 00:15:20.320
<v Speaker 2>I said to folks before you know that. It was

306
00:15:20.399 --> 00:15:24.559
<v Speaker 2>the three factors behind taking the joke too far. I

307
00:15:24.600 --> 00:15:26.600
<v Speaker 2>had Internet, I had alcohol, and there was no one

308
00:15:26.600 --> 00:15:31.320
<v Speaker 2>that stop it. I was I was meeting friends in

309
00:15:31.360 --> 00:15:33.840
<v Speaker 2>a bar and they were like, I'm like, I wonder

310
00:15:33.879 --> 00:15:39.399
<v Speaker 2>if you could and you know, to stop you. Yeah,

311
00:15:39.679 --> 00:15:42.200
<v Speaker 2>you'd be amazed how much of the fun side of

312
00:15:42.240 --> 00:15:47.039
<v Speaker 2>the web is attributable to those three fures. And so this,

313
00:15:47.320 --> 00:15:49.559
<v Speaker 2>you know, it turned into like a parody spec with

314
00:15:50.919 --> 00:15:53.159
<v Speaker 2>you know, things like you want to write a function,

315
00:15:53.759 --> 00:15:56.080
<v Speaker 2>like you know, most languages, you have the function declaration

316
00:15:56.159 --> 00:15:58.200
<v Speaker 2>and the return type, and then you have some brackets

317
00:15:58.240 --> 00:16:01.320
<v Speaker 2>around the parameter types. And so it's like, well then

318
00:16:01.360 --> 00:16:04.000
<v Speaker 2>you say, well, this function like modulus takes a number

319
00:16:04.039 --> 00:16:06.440
<v Speaker 2>and a divisor, and you're like, all right, well and

320
00:16:06.519 --> 00:16:09.679
<v Speaker 2>we'll use takes a this and that. That's function syntex.

321
00:16:10.120 --> 00:16:14.960
<v Speaker 2>So my function takes first argument and second argument and

322
00:16:15.320 --> 00:16:17.000
<v Speaker 2>you know all kind of thing like variable names with

323
00:16:17.039 --> 00:16:18.919
<v Speaker 2>spaces in them, which is easy to do when you're

324
00:16:18.919 --> 00:16:20.840
<v Speaker 2>designing a language in a bar as a joke, right,

325
00:16:21.240 --> 00:16:24.039
<v Speaker 2>and oh well, we're going to have you know, my variable,

326
00:16:24.159 --> 00:16:27.840
<v Speaker 2>your variable the variable. And you know that the idea

327
00:16:27.919 --> 00:16:31.519
<v Speaker 2>that came from from Crockford, from Douglas Crockford talking about

328
00:16:31.519 --> 00:16:34.639
<v Speaker 2>the whole people arguing about pascal case, camel case, kebab case,

329
00:16:34.639 --> 00:16:37.399
<v Speaker 2>snake case change, and he's like, we want spaces. We

330
00:16:37.559 --> 00:16:40.320
<v Speaker 2>all want the same thing. These are stupid arguments. So

331
00:16:40.559 --> 00:16:44.279
<v Speaker 2>I'm like, he's absolutely right. You know, we want to

332
00:16:44.320 --> 00:16:46.840
<v Speaker 2>be able to have a variable called, you know, customer

333
00:16:46.919 --> 00:16:49.840
<v Speaker 2>account category because that's what it is. And if you're

334
00:16:49.879 --> 00:16:53.759
<v Speaker 2>writing documentation, you don't use pascal camel case and and

335
00:16:54.159 --> 00:16:56.000
<v Speaker 2>so you know, I came up with this this spec

336
00:16:56.039 --> 00:16:58.480
<v Speaker 2>which had kind of just enough structure to write a

337
00:16:58.639 --> 00:17:03.519
<v Speaker 2>joke fizz buzz so you do rockstar interviews, And then

338
00:17:03.960 --> 00:17:05.640
<v Speaker 2>I stuck it on the internet and I went to bed,

339
00:17:05.880 --> 00:17:06.599
<v Speaker 2>and do.

340
00:17:06.640 --> 00:17:09.119
<v Speaker 1>You remember any of that? Because it's really a poem,

341
00:17:09.240 --> 00:17:09.559
<v Speaker 1>isn't it.

342
00:17:10.160 --> 00:17:14.519
<v Speaker 2>So desire is a love struck lady killer is how

343
00:17:14.880 --> 00:17:21.400
<v Speaker 2>you initialize a variable to one hundred Because one of

344
00:17:21.440 --> 00:17:23.640
<v Speaker 2>the ideas I had very early on is you want

345
00:17:23.640 --> 00:17:26.079
<v Speaker 2>to be able to write numbers by using the lengths

346
00:17:26.119 --> 00:17:30.079
<v Speaker 2>of words, right, which is you know, I love anything

347
00:17:30.200 --> 00:17:32.559
<v Speaker 2>that has two different meanings depending how you look at it.

348
00:17:32.720 --> 00:17:35.720
<v Speaker 2>I love you know, kind of optical illusions in art

349
00:17:35.799 --> 00:17:37.480
<v Speaker 2>and that kind of thing. And I thought, well, if

350
00:17:37.519 --> 00:17:40.599
<v Speaker 2>you take the length of the word, that's a decimal digit.

351
00:17:40.759 --> 00:17:43.079
<v Speaker 2>So love struck is a ten letter word, so that's

352
00:17:43.119 --> 00:17:45.400
<v Speaker 2>a zero, and lady killer is a ten letter word,

353
00:17:45.480 --> 00:17:48.119
<v Speaker 2>so that's a zero. So a love struck lady killer

354
00:17:48.240 --> 00:17:52.559
<v Speaker 2>is one zero zero, so that's one hundred. And of

355
00:17:52.640 --> 00:17:54.279
<v Speaker 2>course that means you can pick any words you want,

356
00:17:54.480 --> 00:17:59.079
<v Speaker 2>so you can actually write code that rhymes and and

357
00:18:01.039 --> 00:18:03.359
<v Speaker 2>so you kind of throw these ideas together. And then

358
00:18:03.440 --> 00:18:05.640
<v Speaker 2>what happened next is that the Internet found it and

359
00:18:05.720 --> 00:18:09.519
<v Speaker 2>they liked it, and people started filing issues on the

360
00:18:09.559 --> 00:18:13.119
<v Speaker 2>get repo with the spec because and some of them

361
00:18:13.160 --> 00:18:15.240
<v Speaker 2>were just jokes like, hey, the number system should go

362
00:18:15.319 --> 00:18:18.160
<v Speaker 2>up to eleven, like happen It's like hah, yeah, no,

363
00:18:18.400 --> 00:18:19.920
<v Speaker 2>but yeah, I get the joke, but no, we're not

364
00:18:20.079 --> 00:18:23.519
<v Speaker 2>right that, And some of them were genuinely people saying, hey,

365
00:18:23.599 --> 00:18:26.400
<v Speaker 2>well what should happen here? I like, there's undefined behavior,

366
00:18:26.440 --> 00:18:29.039
<v Speaker 2>and the specification. I'm like, of course, there is a joke,

367
00:18:29.640 --> 00:18:33.480
<v Speaker 2>why do you care? And people implemented it. There are

368
00:18:33.599 --> 00:18:36.759
<v Speaker 2>a couple of people built Rockstar interpreters, someone built a

369
00:18:36.839 --> 00:18:41.920
<v Speaker 2>Scarlar interpreter, someone built a rock Star Python transpiler, and

370
00:18:42.119 --> 00:18:44.440
<v Speaker 2>all this is within like a week of this this

371
00:18:44.559 --> 00:18:45.640
<v Speaker 2>first draft coming out.

372
00:18:46.160 --> 00:18:51.720
<v Speaker 3>And so suddenly you've got an obligation because yes, you know,

373
00:18:53.119 --> 00:18:55.079
<v Speaker 3>not enough alcohol, not enough.

374
00:18:56.359 --> 00:18:58.599
<v Speaker 1>If you had a little more alcohol, then it would

375
00:18:58.640 --> 00:19:00.359
<v Speaker 1>have been more obvious that it was a joke.

376
00:19:01.000 --> 00:19:03.720
<v Speaker 2>It was in Sydney, Australia, and they they cut you

377
00:19:03.839 --> 00:19:05.640
<v Speaker 2>off there if they think you've had too much. So

378
00:19:05.720 --> 00:19:08.839
<v Speaker 2>they're almost incubating the conditions for these kind of wonderful,

379
00:19:08.960 --> 00:19:10.119
<v Speaker 2>terrible things to happen, you.

380
00:19:10.160 --> 00:19:12.519
<v Speaker 1>Know, So we can blame that bar wherever it was,

381
00:19:12.680 --> 00:19:16.640
<v Speaker 1>or that hotel bar, probably the Baxter. Yeah, therefore, now

382
00:19:16.720 --> 00:19:19.759
<v Speaker 1>the Baxter was later in the evening. I definitely remember

383
00:19:19.839 --> 00:19:23.240
<v Speaker 1>that that the Evening progressed to the Baxter. If you've

384
00:19:23.279 --> 00:19:26.119
<v Speaker 1>never been to Sydney, Australia, folks, the Baxter in is

385
00:19:26.200 --> 00:19:29.119
<v Speaker 1>this wonderful whiskey bar. And the first time someone takes

386
00:19:29.160 --> 00:19:31.200
<v Speaker 1>you there, they you will think they are taking you there.

387
00:19:31.119 --> 00:19:33.079
<v Speaker 2>To kill you and dispose of you. You're going down

388
00:19:33.119 --> 00:19:36.039
<v Speaker 2>an all, down an alley, down a flight of stairs,

389
00:19:36.200 --> 00:19:39.039
<v Speaker 2>and you bang on an iron door and then behind

390
00:19:39.039 --> 00:19:41.359
<v Speaker 2>it there is this little speakeasy. It's a one. Wow,

391
00:19:41.480 --> 00:19:43.240
<v Speaker 2>it's about one of the best collustions of whiskey on

392
00:19:43.279 --> 00:19:47.039
<v Speaker 2>the planet. Yeah, it is. It's it's phenomenal. And so

393
00:19:47.119 --> 00:19:49.440
<v Speaker 2>and you know, this kind of became a recurring theme

394
00:19:49.519 --> 00:19:52.160
<v Speaker 2>of like, oh wow, if I'd known people were going

395
00:19:52.200 --> 00:19:54.880
<v Speaker 2>to do that, that I would have I would have.

396
00:19:55.920 --> 00:19:58.599
<v Speaker 2>And so that there's there's about a week of you know,

397
00:19:58.720 --> 00:20:00.200
<v Speaker 2>a lot of it to activity, and then and it

398
00:20:00.319 --> 00:20:02.319
<v Speaker 2>dies away like it made hack and use, it made Reddit,

399
00:20:02.759 --> 00:20:05.200
<v Speaker 2>it got write ups in a like Boing boying and things,

400
00:20:06.039 --> 00:20:07.519
<v Speaker 2>and then it kind of goes away and then it

401
00:20:07.880 --> 00:20:09.880
<v Speaker 2>makes read it again a couple of months later, and

402
00:20:09.920 --> 00:20:12.599
<v Speaker 2>there's another influx of activity, and then it kind of

403
00:20:12.680 --> 00:20:17.440
<v Speaker 2>dies away. And then Carnegie Mellon University used it in

404
00:20:17.599 --> 00:20:19.920
<v Speaker 2>there Capture the Flag competition.

405
00:20:19.680 --> 00:20:21.160
<v Speaker 1>Right, I remember this story.

406
00:20:21.319 --> 00:20:24.599
<v Speaker 2>Oh no, and that had like that that was in

407
00:20:24.720 --> 00:20:28.079
<v Speaker 2>twenty twenty, and that had like thirty nine thousand people.

408
00:20:28.759 --> 00:20:30.799
<v Speaker 2>And of course every time it happens, there's a bunch

409
00:20:30.880 --> 00:20:33.599
<v Speaker 2>of you know, mostly sort of younger developers, because a

410
00:20:33.640 --> 00:20:35.799
<v Speaker 2>lot of this stuff is sort of undergraduate fresh air

411
00:20:35.880 --> 00:20:38.200
<v Speaker 2>level going, hey, how does Rockstar work? How does this work?

412
00:20:38.200 --> 00:20:40.079
<v Speaker 2>How does that work? And there's a voice in the

413
00:20:40.119 --> 00:20:42.680
<v Speaker 2>back of my head going, Carnegie Mellon was looking at

414
00:20:42.759 --> 00:20:47.400
<v Speaker 2>my joke. Oh yeah, you know, and so it kind

415
00:20:47.440 --> 00:20:51.279
<v Speaker 2>of it never it's never been big enough to be important,

416
00:20:51.400 --> 00:20:54.599
<v Speaker 2>but it's also never gone away. And there's this little

417
00:20:54.880 --> 00:20:57.759
<v Speaker 2>community of people out there on the web who clearly

418
00:20:57.960 --> 00:21:01.319
<v Speaker 2>they really enjoy playing with it, and that one of

419
00:21:01.480 --> 00:21:03.880
<v Speaker 2>the things that really blew my mind is there is

420
00:21:04.000 --> 00:21:07.000
<v Speaker 2>a you know, a double digit number of people out

421
00:21:07.039 --> 00:21:09.039
<v Speaker 2>there in the world right now who Rockstar is the

422
00:21:09.160 --> 00:21:11.960
<v Speaker 2>only programming language they have ever learnt. That is insane

423
00:21:12.839 --> 00:21:16.519
<v Speaker 2>because it has no baggage, it doesn't have any of

424
00:21:16.680 --> 00:21:19.119
<v Speaker 2>the kind of technical It's like you type it into

425
00:21:19.200 --> 00:21:21.160
<v Speaker 2>a web page and you click go and if it works,

426
00:21:21.400 --> 00:21:25.160
<v Speaker 2>it works, and like you know, and this is a pattern,

427
00:21:25.240 --> 00:21:28.279
<v Speaker 2>you know, the same like Python has online interpreters, you

428
00:21:28.359 --> 00:21:30.440
<v Speaker 2>know dot net. They've been working really hard to get

429
00:21:30.559 --> 00:21:33.319
<v Speaker 2>rid of all that boiler plate, which scares people who

430
00:21:33.359 --> 00:21:34.200
<v Speaker 2>don't know what they're looking at it.

431
00:21:34.240 --> 00:21:36.319
<v Speaker 1>But you're not going to have academics breathing down your

432
00:21:36.400 --> 00:21:38.960
<v Speaker 1>next saying no, that is the wrong way to write

433
00:21:39.359 --> 00:21:39.839
<v Speaker 1>rock Star.

434
00:21:40.079 --> 00:21:42.440
<v Speaker 2>Well it's you know, one of the things that we'll

435
00:21:42.480 --> 00:21:45.759
<v Speaker 2>talk about in the show is I stopped asking kind

436
00:21:45.799 --> 00:21:48.559
<v Speaker 2>of you know, language experts for help because a lot

437
00:21:48.599 --> 00:21:49.440
<v Speaker 2>of them just don't.

438
00:21:49.279 --> 00:21:50.200
<v Speaker 1>Get the chat right.

439
00:21:50.279 --> 00:21:52.160
<v Speaker 2>They're like, well, you shouldn't do that. I'm like, no, no,

440
00:21:52.359 --> 00:21:54.279
<v Speaker 2>you don't understand it has to be lyrics. If it's

441
00:21:54.319 --> 00:21:57.079
<v Speaker 2>not lyrics, and they're like, well, you just use parentheses.

442
00:21:57.160 --> 00:21:59.920
<v Speaker 2>I'm like saying parentheses and they're like, well, why would

443
00:21:59.920 --> 00:22:03.160
<v Speaker 2>you sing a language. I'm like, the choke the job,

444
00:22:04.559 --> 00:22:04.720
<v Speaker 2>you know.

445
00:22:08.039 --> 00:22:11.960
<v Speaker 1>And I remember you actually performed a rock Star program

446
00:22:12.880 --> 00:22:15.079
<v Speaker 1>with your band at somewhere.

447
00:22:15.640 --> 00:22:20.240
<v Speaker 2>Yeah, so so so fizz buzz in in rock Star

448
00:22:20.720 --> 00:22:23.279
<v Speaker 2>became the sort of canonical touch point. And I did

449
00:22:23.319 --> 00:22:25.240
<v Speaker 2>that at the end of a talk I did at

450
00:22:25.359 --> 00:22:29.079
<v Speaker 2>NBC London in twenty twenty, right before the lockdown started,

451
00:22:30.000 --> 00:22:33.000
<v Speaker 2>and that talk got like millions of you Tube and

452
00:22:33.279 --> 00:22:35.079
<v Speaker 2>you know, and Covid can take a lot of the

453
00:22:35.119 --> 00:22:37.480
<v Speaker 2>credit for that because a lot of people were stuck

454
00:22:37.480 --> 00:22:40.200
<v Speaker 2>at home with nothing to do. But clearly it's kind

455
00:22:40.240 --> 00:22:42.240
<v Speaker 2>of struck a chord and people like, we like this,

456
00:22:42.400 --> 00:22:44.000
<v Speaker 2>and they were sending it around and you know, I

457
00:22:44.240 --> 00:22:46.200
<v Speaker 2>got I got a bunch of speaking gigs off from

458
00:22:46.200 --> 00:22:47.880
<v Speaker 2>people who just seen that one video. They're like, we

459
00:22:47.960 --> 00:22:49.920
<v Speaker 2>need to book this guy to come and do our conference.

460
00:22:50.799 --> 00:22:51.880
<v Speaker 2>And of course a lot of one like you got

461
00:22:51.960 --> 00:22:53.640
<v Speaker 2>to bring the guitar, you do the rock Star bit

462
00:22:53.960 --> 00:22:57.440
<v Speaker 2>and so yeah, so that kind of and it just,

463
00:22:57.920 --> 00:23:00.240
<v Speaker 2>you know, sort of bubbled along. Now, one of the

464
00:23:00.319 --> 00:23:05.319
<v Speaker 2>things that always bothered me was the implementations. You know,

465
00:23:05.400 --> 00:23:07.400
<v Speaker 2>with all due respect to the people who did them,

466
00:23:07.440 --> 00:23:09.839
<v Speaker 2>it's a phenomenal piece of you know engineering to build

467
00:23:09.880 --> 00:23:12.759
<v Speaker 2>this interpreter for an esoteric language in like forty eight hours.

468
00:23:13.799 --> 00:23:15.799
<v Speaker 2>But the people who are curious are not the same

469
00:23:15.839 --> 00:23:18.480
<v Speaker 2>people as the people who know how to runs color right,

470
00:23:18.720 --> 00:23:20.960
<v Speaker 2>And I care about the people who are curious because

471
00:23:20.960 --> 00:23:24.000
<v Speaker 2>I think curiosity is you know, wonderful quality that should

472
00:23:24.000 --> 00:23:27.759
<v Speaker 2>be encouraged and nurtured. And so started twenty twenty, I

473
00:23:28.079 --> 00:23:30.720
<v Speaker 2>sat down and built a Rockstar interpreter in JavaScript so

474
00:23:30.720 --> 00:23:33.920
<v Speaker 2>I could run it in a browser. Because I decided

475
00:23:33.960 --> 00:23:35.559
<v Speaker 2>early on, i'd I want to do this on you know,

476
00:23:35.640 --> 00:23:37.759
<v Speaker 2>a zero or Google Cloud, because I don't ever want

477
00:23:37.839 --> 00:23:39.960
<v Speaker 2>to wake up to a five thousand dollars bill. You

478
00:23:40.000 --> 00:23:40.680
<v Speaker 2>don't need a bill.

479
00:23:40.920 --> 00:23:42.000
<v Speaker 1>Yeah, yeah, exactly.

480
00:23:42.319 --> 00:23:45.920
<v Speaker 2>Yeah, because Rockstar made hack and News and everyone jumped

481
00:23:45.960 --> 00:23:48.359
<v Speaker 2>on it, or because you know, I there's an infinite

482
00:23:48.480 --> 00:23:51.039
<v Speaker 2>loop somewhere that I was paying every time it ticks,

483
00:23:52.200 --> 00:23:53.960
<v Speaker 2>and so it had to be client side. There's a

484
00:23:54.039 --> 00:23:56.519
<v Speaker 2>lyric for an infinite loop in there somewhere, you knows,

485
00:23:59.000 --> 00:24:01.880
<v Speaker 2>oh easily. So one of the things that I did

486
00:24:01.920 --> 00:24:05.480
<v Speaker 2>in Rockstar Version one is a blank line ended a block.

487
00:24:05.599 --> 00:24:07.160
<v Speaker 2>So if you had like a loop or a function

488
00:24:07.400 --> 00:24:10.119
<v Speaker 2>or a you know, an if statement, a blank line

489
00:24:10.200 --> 00:24:12.519
<v Speaker 2>mark the end, which meant if you had an if

490
00:24:12.599 --> 00:24:14.920
<v Speaker 2>that was inside a loop that was inside a function,

491
00:24:15.079 --> 00:24:17.359
<v Speaker 2>you needed three blank lines to end all of them,

492
00:24:18.160 --> 00:24:21.519
<v Speaker 2>which became very very hard to troubleshoot because it wasn't

493
00:24:21.519 --> 00:24:24.119
<v Speaker 2>always obvious. You know, one is obvious, Two is you know,

494
00:24:24.519 --> 00:24:26.440
<v Speaker 2>is that three or four or five? I honestly can't

495
00:24:26.480 --> 00:24:28.759
<v Speaker 2>see it. And so a lot of folks out there

496
00:24:28.799 --> 00:24:31.880
<v Speaker 2>they started in to make it easy to track, and

497
00:24:31.920 --> 00:24:35.359
<v Speaker 2>I'm like, no, no, it looks like Python. That's the point, right,

498
00:24:35.960 --> 00:24:38.759
<v Speaker 2>And so one of the one of the features that

499
00:24:39.079 --> 00:24:41.720
<v Speaker 2>I put in. So so let's uh, actually, let's let's

500
00:24:41.759 --> 00:24:43.559
<v Speaker 2>bring things up to speed. So this ticks along for

501
00:24:43.599 --> 00:24:45.640
<v Speaker 2>about five years and it's built in JavaScript and it

502
00:24:45.720 --> 00:24:48.599
<v Speaker 2>runs on the web, and every once in a while

503
00:24:48.640 --> 00:24:50.880
<v Speaker 2>there's a little something just kind of you know, hits

504
00:24:50.960 --> 00:24:53.720
<v Speaker 2>me and makes me think. And last year somebody did

505
00:24:53.759 --> 00:24:56.680
<v Speaker 2>an advent of code in it. They solved every day

506
00:24:56.720 --> 00:25:01.119
<v Speaker 2>of advent of code in Rockstar has no IO, You've

507
00:25:01.119 --> 00:25:03.480
<v Speaker 2>got standard in Standard out, doesn't have file system, doesn't

508
00:25:03.480 --> 00:25:06.119
<v Speaker 2>have a network, which is partly on purpose, because I

509
00:25:06.119 --> 00:25:08.680
<v Speaker 2>don't ever want somebody to, you know, start a job

510
00:25:09.119 --> 00:25:13.160
<v Speaker 2>and be like, oh, well, the no viruses in Rockstar,

511
00:25:13.559 --> 00:25:16.279
<v Speaker 2>or you know, worse than that. The because I believe

512
00:25:16.400 --> 00:25:19.799
<v Speaker 2>that this could happen is somebody's like, yeah, the previous

513
00:25:19.960 --> 00:25:23.200
<v Speaker 2>developer wrote the whole system in Rockstar and they've left now.

514
00:25:23.680 --> 00:25:28.359
<v Speaker 1>And the new guy, the new guy rock he doesn't

515
00:25:28.440 --> 00:25:29.279
<v Speaker 1>understand any of it.

516
00:25:30.480 --> 00:25:32.559
<v Speaker 2>But if you don't have no file system and no network,

517
00:25:32.599 --> 00:25:34.839
<v Speaker 2>then there's how limit to how much damage you how

518
00:25:34.920 --> 00:25:36.720
<v Speaker 2>much trouble can you really go? But advent to code

519
00:25:36.799 --> 00:25:38.839
<v Speaker 2>is brilliant because it's standard in Standard out and that's it.

520
00:25:39.000 --> 00:25:41.319
<v Speaker 2>That's all you need. And so the kind of and

521
00:25:41.400 --> 00:25:43.799
<v Speaker 2>somebody did the whole thing, and I was like, if

522
00:25:43.920 --> 00:25:46.640
<v Speaker 2>people are going to put that many hours into the joke.

523
00:25:46.839 --> 00:25:50.640
<v Speaker 2>They deserve a better implementation of the joke. And the

524
00:25:50.759 --> 00:25:52.799
<v Speaker 2>other thing that happened at the end of last year,

525
00:25:52.880 --> 00:25:57.119
<v Speaker 2>so Rand November twenty twenty three was dotnor eight and

526
00:25:57.279 --> 00:26:01.640
<v Speaker 2>dotnor eight finally gave us a native ahead of time compilation.

527
00:26:02.400 --> 00:26:04.759
<v Speaker 2>And this was always a deal breaker for me, is

528
00:26:04.799 --> 00:26:07.400
<v Speaker 2>because having to install the dot net framework. I'm like,

529
00:26:07.519 --> 00:26:09.839
<v Speaker 2>that is if you want to learn dot net whatever,

530
00:26:09.839 --> 00:26:11.599
<v Speaker 2>but if you just want to play with Rockstar, I

531
00:26:11.599 --> 00:26:14.160
<v Speaker 2>don't want you having to install dot net that because

532
00:26:14.240 --> 00:26:17.279
<v Speaker 2>that is too much downloading and everything. And then this

533
00:26:17.400 --> 00:26:20.200
<v Speaker 2>thing came along and I'm like, wow, so this, you know,

534
00:26:20.319 --> 00:26:22.240
<v Speaker 2>you can do the ahead of time compilation. There's a

535
00:26:22.319 --> 00:26:26.039
<v Speaker 2>thing called il stripping, which takes a Dotnet program, runs

536
00:26:26.079 --> 00:26:29.119
<v Speaker 2>it or builds it, links it against the entire run

537
00:26:29.240 --> 00:26:32.480
<v Speaker 2>time with certain caveats. You can't use reflection, you can't

538
00:26:32.559 --> 00:26:36.519
<v Speaker 2>use type introspection, you can't use you know, dynamic assembly instatiation.

539
00:26:37.119 --> 00:26:38.720
<v Speaker 2>But we're not doing any of those things.

540
00:26:38.799 --> 00:26:38.920
<v Speaker 1>You know.

541
00:26:39.000 --> 00:26:41.920
<v Speaker 2>It's a PASA and an interpreter. It's it's the code

542
00:26:42.000 --> 00:26:45.680
<v Speaker 2>for it is relatively kind of clean, I guess is

543
00:26:45.960 --> 00:26:48.440
<v Speaker 2>a good word for it. It's not doing anything too gnally.

544
00:26:48.519 --> 00:26:50.640
<v Speaker 1>So you end up with an EXC that anybody can

545
00:26:50.680 --> 00:26:52.759
<v Speaker 1>download and run on Windows or.

546
00:26:53.079 --> 00:26:54.720
<v Speaker 2>And so yeah, you end up with with an XC

547
00:26:54.880 --> 00:26:56.519
<v Speaker 2>and this is this is the fun part as well,

548
00:26:56.599 --> 00:27:00.759
<v Speaker 2>because GitHub actions now has native runners for Windows and Chirk,

549
00:27:01.400 --> 00:27:03.799
<v Speaker 2>so you can write code and c sharp, you can

550
00:27:03.839 --> 00:27:06.160
<v Speaker 2>deploy it to gethub and as long as you wire

551
00:27:06.200 --> 00:27:10.000
<v Speaker 2>everything up properly, you end up with a mac OS

552
00:27:10.359 --> 00:27:13.119
<v Speaker 2>native executable that doesn't need a run time. So it's

553
00:27:13.319 --> 00:27:16.400
<v Speaker 2>just it's like about a six megabyte binary that is

554
00:27:16.480 --> 00:27:19.720
<v Speaker 2>a rockstar interpreter and as a six meg one for Linux.

555
00:27:20.000 --> 00:27:22.119
<v Speaker 2>Actually the Mac one's a little bigger. It's four for Windows,

556
00:27:22.119 --> 00:27:24.440
<v Speaker 2>four for len it's about six megs for Mac. And

557
00:27:24.559 --> 00:27:26.680
<v Speaker 2>that to me was like this is time, like if

558
00:27:26.759 --> 00:27:29.000
<v Speaker 2>dot net can do this, now is the time to

559
00:27:29.519 --> 00:27:32.599
<v Speaker 2>see what would be involved in kind of porting the

560
00:27:32.640 --> 00:27:37.759
<v Speaker 2>whole thing. And so the first kind of potential brick

561
00:27:37.839 --> 00:27:40.519
<v Speaker 2>wall there was, okay, well what about the web sure?

562
00:27:40.680 --> 00:27:43.960
<v Speaker 2>And now the interesting thing something that I've seen time

563
00:27:44.039 --> 00:27:46.480
<v Speaker 2>and time again is so dot net will compile to

564
00:27:46.519 --> 00:27:50.359
<v Speaker 2>web assembly, and the I think misunderstanding a lot of

565
00:27:50.359 --> 00:27:52.799
<v Speaker 2>people have and I think, you know, Microsoft could have

566
00:27:52.880 --> 00:27:56.519
<v Speaker 2>done more to avoid this is people think dot net

567
00:27:56.559 --> 00:27:59.559
<v Speaker 2>plus web assembly means Blazer. Yeah right, and you're like, no,

568
00:28:00.279 --> 00:28:04.960
<v Speaker 2>dot net plus web assembly runs browser enables Blazer. That's

569
00:28:05.039 --> 00:28:07.400
<v Speaker 2>not Blazer's built on top of that. If you want to,

570
00:28:07.559 --> 00:28:10.720
<v Speaker 2>you can compile sea sharp into a web assembly binary

571
00:28:10.839 --> 00:28:13.680
<v Speaker 2>that you then bootstrap in a browser and you can

572
00:28:13.839 --> 00:28:16.480
<v Speaker 2>run code natively in web assembly and you don't need

573
00:28:16.519 --> 00:28:16.920
<v Speaker 2>the Blazer.

574
00:28:16.960 --> 00:28:17.519
<v Speaker 1>You are stuff.

575
00:28:17.599 --> 00:28:20.839
<v Speaker 2>None of that interaction happens and the JAS interrupt that

576
00:28:21.000 --> 00:28:22.519
<v Speaker 2>exists in dot net.

577
00:28:22.599 --> 00:28:24.160
<v Speaker 1>Now, yeah, it's really great.

578
00:28:24.279 --> 00:28:26.759
<v Speaker 2>It just blew me away, Like I kept getting to

579
00:28:26.839 --> 00:28:29.559
<v Speaker 2>this point thinking can I do that? And you know

580
00:28:29.680 --> 00:28:33.119
<v Speaker 2>it's things like so the way that the Rockstar Web

581
00:28:33.240 --> 00:28:36.240
<v Speaker 2>interpreter works now and by the time the show comes out,

582
00:28:36.279 --> 00:28:39.319
<v Speaker 2>this will be on code with Rockstar dot com because

583
00:28:39.400 --> 00:28:41.400
<v Speaker 2>the next week is going to get flipped over. It's

584
00:28:41.400 --> 00:28:43.319
<v Speaker 2>been on running on beta for a couple of months

585
00:28:43.359 --> 00:28:45.240
<v Speaker 2>now and folks, I think have kicked out most of

586
00:28:45.279 --> 00:28:47.319
<v Speaker 2>the bugs on it. So if you've got a code

587
00:28:47.359 --> 00:28:50.200
<v Speaker 2>with Rockstar dot Com, there will be an interpreter. You

588
00:28:50.279 --> 00:28:52.519
<v Speaker 2>type code and you click run and it runs, and

589
00:28:52.640 --> 00:28:56.119
<v Speaker 2>it's running sea sharp code built into web assembly and

590
00:28:56.240 --> 00:28:58.240
<v Speaker 2>it's doing it in a background. So it's a JavaScript

591
00:28:58.319 --> 00:29:00.759
<v Speaker 2>worker process because that way, if you're an infinite loop,

592
00:29:00.759 --> 00:29:04.480
<v Speaker 2>it doesn't freeze the browser window. So we got JavaScript

593
00:29:04.559 --> 00:29:06.960
<v Speaker 2>in the browser talking to JavaScript, and a worker which

594
00:29:07.039 --> 00:29:10.480
<v Speaker 2>is instantiating the web assembly runtime loading the dot net.

595
00:29:10.960 --> 00:29:14.079
<v Speaker 2>You know the runtime that the CLR web assembly version

596
00:29:14.119 --> 00:29:17.119
<v Speaker 2>of that right flying in the Rockstar code interpreter on

597
00:29:17.240 --> 00:29:19.480
<v Speaker 2>top of that, and then buried under all these levels.

598
00:29:19.519 --> 00:29:22.039
<v Speaker 2>Someone wants to say hello World, and you're like, well,

599
00:29:22.039 --> 00:29:25.680
<v Speaker 2>where is the hello world? Co and the js interrupt

600
00:29:25.720 --> 00:29:28.240
<v Speaker 2>team who built the web assembly support for c sharp

601
00:29:28.279 --> 00:29:30.559
<v Speaker 2>are like, well, yeah, you can inject a function. You

602
00:29:30.640 --> 00:29:33.839
<v Speaker 2>give us a function signature, and we will take the

603
00:29:34.319 --> 00:29:37.000
<v Speaker 2>JavaScript function which puts hellow world on a web page

604
00:29:37.079 --> 00:29:39.119
<v Speaker 2>and we will wire that all the way through these

605
00:29:39.200 --> 00:29:42.400
<v Speaker 2>levels of abstraction so that you can wire that into

606
00:29:42.480 --> 00:29:45.240
<v Speaker 2>the environment, the input output mapping of the environment when

607
00:29:45.279 --> 00:29:48.359
<v Speaker 2>your interpreter is running. And when I found that, I

608
00:29:48.519 --> 00:29:53.200
<v Speaker 2>was just like, this is amazing. This is like and

609
00:29:53.279 --> 00:29:56.720
<v Speaker 2>you're thinking, how many things, you know, let the browser

610
00:29:56.799 --> 00:29:58.640
<v Speaker 2>do what the browser is good at. The browser is

611
00:29:58.680 --> 00:30:01.920
<v Speaker 2>going to do fonts and color and typography and buttons

612
00:30:01.960 --> 00:30:02.960
<v Speaker 2>and clicking on stuff.

613
00:30:03.039 --> 00:30:06.039
<v Speaker 1>And then ninety percent of those fonts came from IBM.

614
00:30:06.319 --> 00:30:06.880
<v Speaker 1>Just remember that.

615
00:30:13.000 --> 00:30:20.000
<v Speaker 2>To joke people, to joke, that's a callback. And you know,

616
00:30:20.119 --> 00:30:22.599
<v Speaker 2>this to me was just like, it was really really

617
00:30:22.680 --> 00:30:25.640
<v Speaker 2>exciting being able to use c sharp to do the

618
00:30:25.720 --> 00:30:28.400
<v Speaker 2>heavy lifting. And of course there's always that point. I

619
00:30:28.519 --> 00:30:30.359
<v Speaker 2>don't know if I'm sure you folks experienced the same thing.

620
00:30:30.400 --> 00:30:31.640
<v Speaker 2>You make a little list in your head of the

621
00:30:31.680 --> 00:30:33.119
<v Speaker 2>bits of it you think are going to be difficult,

622
00:30:33.519 --> 00:30:36.079
<v Speaker 2>and you do those first, and you validate the approach.

623
00:30:36.119 --> 00:30:38.160
<v Speaker 2>You're like, is this actually impossible? If we can prove

624
00:30:38.200 --> 00:30:41.039
<v Speaker 2>it's not impossible. And at that point I do what

625
00:30:41.119 --> 00:30:43.079
<v Speaker 2>I think a lot of developers do, which is like, well,

626
00:30:43.079 --> 00:30:45.559
<v Speaker 2>I've proved it's not impossible, therefore it's going to be easy, yeah,

627
00:30:45.759 --> 00:30:49.839
<v Speaker 2>because you know, and it turns out it's not actually easy.

628
00:30:50.319 --> 00:30:54.240
<v Speaker 2>It's it's just not impossible, right, And so the what

629
00:30:54.359 --> 00:30:56.039
<v Speaker 2>I thought was going to be a probably a long

630
00:30:56.079 --> 00:30:59.200
<v Speaker 2>weekend and probably about five or six weeks of working

631
00:30:59.240 --> 00:31:03.119
<v Speaker 2>on this thing. But it's good fun. And you know

632
00:31:03.240 --> 00:31:06.039
<v Speaker 2>the number of wonderful things that exist in dot net now.

633
00:31:06.839 --> 00:31:09.759
<v Speaker 2>So there's a fantastic book Crafting Interpreters by a guy

634
00:31:09.839 --> 00:31:13.559
<v Speaker 2>called Robert Meistrom and it's a great book about how

635
00:31:13.559 --> 00:31:16.519
<v Speaker 2>to design a programming language. Fantastic reading. And there's a

636
00:31:16.559 --> 00:31:17.880
<v Speaker 2>couple of things in it that I'm looking at and

637
00:31:17.920 --> 00:31:20.440
<v Speaker 2>a going the thing he's doing here to avoid it

638
00:31:20.559 --> 00:31:23.359
<v Speaker 2>being slow. That's not slow in dot net anyway, right, So,

639
00:31:23.839 --> 00:31:27.079
<v Speaker 2>like you know, switching on a switch expressions inside and

640
00:31:27.200 --> 00:31:31.000
<v Speaker 2>using pattern matching and stuff kind of alleviates the need

641
00:31:31.079 --> 00:31:33.039
<v Speaker 2>for the visitor pattern, which is one of the things

642
00:31:33.119 --> 00:31:36.079
<v Speaker 2>I used to get away from big switch statements, because

643
00:31:36.119 --> 00:31:39.079
<v Speaker 2>the compiler knows where to root the execution flow based

644
00:31:39.119 --> 00:31:41.119
<v Speaker 2>on the types that are available at run time. And

645
00:31:41.599 --> 00:31:45.559
<v Speaker 2>that kind of thing made it just this compelling proposition

646
00:31:46.079 --> 00:31:48.440
<v Speaker 2>let's do this, and let's do it right, all.

647
00:31:48.400 --> 00:31:50.440
<v Speaker 1>Right, And there's more coming up with Dylan Beattie and

648
00:31:50.559 --> 00:31:55.799
<v Speaker 1>Rockstar after these very important messages stick around. Did you

649
00:31:55.960 --> 00:31:58.880
<v Speaker 1>know you can easily migrate asp net web apps to

650
00:31:59.039 --> 00:32:03.599
<v Speaker 1>Windows containers on Aws. Use the app to Container tool

651
00:32:03.920 --> 00:32:08.400
<v Speaker 1>to containerize your iis websites and deploy to AWS managed

652
00:32:08.440 --> 00:32:13.319
<v Speaker 1>container services with or without Kubernetes. Find out more about

653
00:32:13.359 --> 00:32:17.720
<v Speaker 1>app to Container at AWS dot Amazon dot Com, slash

654
00:32:17.759 --> 00:32:23.039
<v Speaker 1>dot net, slash Modernize. Hey Carl, here, today we're spotlighting

655
00:32:23.079 --> 00:32:26.599
<v Speaker 1>a tool that's turning heads in the tech community. Ygun's

656
00:32:26.759 --> 00:32:31.599
<v Speaker 1>AI error resolution brings you smart AI powered insights directly

657
00:32:31.680 --> 00:32:36.400
<v Speaker 1>into your development workflow. This feature doesn't just identify errors,

658
00:32:36.759 --> 00:32:40.720
<v Speaker 1>it suggests how to fix them quickly and efficiently in seconds.

659
00:32:41.319 --> 00:32:44.640
<v Speaker 1>If you're ready for a deeper dive into smarter debugging,

660
00:32:45.160 --> 00:32:47.720
<v Speaker 1>you won't want to miss what raygun has to offer.

661
00:32:48.440 --> 00:32:52.039
<v Speaker 1>Visit raygun dot com slash dot net rocks that's ygun,

662
00:32:52.440 --> 00:32:55.559
<v Speaker 1>r A y g U n dot com slash do

663
00:32:55.720 --> 00:32:57.720
<v Speaker 1>O t n E t r O c k s

664
00:32:58.240 --> 00:33:01.039
<v Speaker 1>for your free fourteen day trial to explore the way

665
00:33:01.200 --> 00:33:07.119
<v Speaker 1>raygun is revolutionizing debugging. And we're back. It's dot in

666
00:33:07.119 --> 00:33:09.720
<v Speaker 1>a rocks. I'm Carl Franklin, my friend Richard Campbell Hey,

667
00:33:10.160 --> 00:33:14.200
<v Speaker 1>and our friend Dylan Beattie, super genius who wrote a

668
00:33:15.519 --> 00:33:18.440
<v Speaker 1>programming language as a joke, and now he it's like

669
00:33:18.559 --> 00:33:20.680
<v Speaker 1>stepping in a pile of dog poo. He can't get

670
00:33:20.720 --> 00:33:24.200
<v Speaker 1>it off his shoe and every but even worse, all

671
00:33:24.279 --> 00:33:26.680
<v Speaker 1>the dogs are coming around sniffing at it, asking him

672
00:33:26.759 --> 00:33:29.359
<v Speaker 1>to improve the quality. I don't know what that means,

673
00:33:29.480 --> 00:33:31.599
<v Speaker 1>but it kind of I kind of thought it would

674
00:33:31.640 --> 00:33:33.200
<v Speaker 1>work before it came out of my mouth.

675
00:33:33.640 --> 00:33:37.640
<v Speaker 2>Mister Carl Franklin, our chief Medical Office site, his finest

676
00:33:38.720 --> 00:33:43.000
<v Speaker 2>quite so.

677
00:33:43.799 --> 00:33:46.319
<v Speaker 1>So dot net eight turns out to be the point

678
00:33:46.400 --> 00:33:49.000
<v Speaker 1>at which you say, dot neck got awesome. Now I

679
00:33:49.079 --> 00:33:50.640
<v Speaker 1>can do what I want to do, and it can

680
00:33:50.759 --> 00:33:54.880
<v Speaker 1>run everywhere and pretty much maybe we should talk a

681
00:33:54.960 --> 00:33:58.240
<v Speaker 1>little bit about the internals of how it actually works

682
00:33:58.279 --> 00:34:01.680
<v Speaker 1>through the grammar and the parser and the interpreting the interpreter.

683
00:34:02.160 --> 00:34:04.880
<v Speaker 2>So you know something that I've been very acutely aware

684
00:34:04.960 --> 00:34:07.200
<v Speaker 2>of throughout the whole process. There are people out there

685
00:34:07.240 --> 00:34:09.480
<v Speaker 2>who are way smarter than me. And I know this

686
00:34:09.880 --> 00:34:13.199
<v Speaker 2>because there are certain elements of this where like the

687
00:34:13.480 --> 00:34:17.639
<v Speaker 2>JS interrupt thing I just mentioned, I understand how that work,

688
00:34:17.679 --> 00:34:19.880
<v Speaker 2>I understand how to use it, I understand the problem

689
00:34:19.920 --> 00:34:23.360
<v Speaker 2>it solves, and I can appreciate the solution how they

690
00:34:23.480 --> 00:34:26.199
<v Speaker 2>got that thing to work. I have no idea. You know,

691
00:34:26.320 --> 00:34:28.599
<v Speaker 2>there is clearly there is a level of genius far

692
00:34:28.719 --> 00:34:32.440
<v Speaker 2>beyond anything that you know I would have done on this.

693
00:34:32.920 --> 00:34:34.920
<v Speaker 2>And you know, I'm in awe and respect of the

694
00:34:35.000 --> 00:34:37.079
<v Speaker 2>people who made those because with that stuff, none of

695
00:34:37.119 --> 00:34:39.920
<v Speaker 2>this will work. And one of those is there's a

696
00:34:39.960 --> 00:34:43.760
<v Speaker 2>thing of the pausing expression grammar and or a PEG

697
00:34:43.920 --> 00:34:46.119
<v Speaker 2>grammar they call them. But then you've got redundant acronyms

698
00:34:46.440 --> 00:34:50.000
<v Speaker 2>like machine. So yeah, like ATM machines where you put

699
00:34:50.000 --> 00:34:51.920
<v Speaker 2>your pin number in the ATM machine.

700
00:34:51.679 --> 00:34:55.119
<v Speaker 1>Or IBM machine, but the IBM machine.

701
00:34:57.400 --> 00:34:59.880
<v Speaker 2>Yeah again, an IBM business machine. Where are you getting that?

702
00:35:00.000 --> 00:35:00.079
<v Speaker 1>Oh?

703
00:35:00.199 --> 00:35:06.760
<v Speaker 2>Internationally, you know, But basically, you know the expression grammar

704
00:35:07.199 --> 00:35:12.280
<v Speaker 2>is ah, you build a set of matching expressions regular

705
00:35:12.360 --> 00:35:15.360
<v Speaker 2>expression syntax or something very very similar to that, and

706
00:35:15.639 --> 00:35:17.920
<v Speaker 2>you feed your source code into that. So one of

707
00:35:17.960 --> 00:35:21.559
<v Speaker 2>the really fun things about building a programming language interpreter

708
00:35:22.320 --> 00:35:26.480
<v Speaker 2>is you have the language you designed, and you have

709
00:35:26.679 --> 00:35:30.679
<v Speaker 2>the language that you're building it in. And so when

710
00:35:30.719 --> 00:35:32.960
<v Speaker 2>you find a bug, you're like, Okay, where's is it.

711
00:35:33.199 --> 00:35:34.920
<v Speaker 2>It could be a bug in my rock Star code,

712
00:35:35.400 --> 00:35:36.800
<v Speaker 2>or it could be a bug in the thing that

713
00:35:36.920 --> 00:35:38.599
<v Speaker 2>passes the rock Star code, or it could be a

714
00:35:38.639 --> 00:35:41.119
<v Speaker 2>bug in the thing that then runs the interprets the

715
00:35:41.119 --> 00:35:45.800
<v Speaker 2>abstract syntax tree. And so you're constantly trying to find,

716
00:35:45.920 --> 00:35:48.119
<v Speaker 2>you know, where are the abstraction points in this where

717
00:35:48.159 --> 00:35:50.960
<v Speaker 2>you can stick in a debugger or something and go right,

718
00:35:51.039 --> 00:35:52.679
<v Speaker 2>If it's good as far as here, then I know

719
00:35:52.800 --> 00:35:53.480
<v Speaker 2>it's not a bug.

720
00:35:53.599 --> 00:35:54.199
<v Speaker 1>In this part.

721
00:35:54.239 --> 00:35:57.519
<v Speaker 2>It's a bug in that part and the pausing expression

722
00:35:57.559 --> 00:36:00.079
<v Speaker 2>grammar as a guy called John John Getson has a

723
00:36:00.159 --> 00:36:02.719
<v Speaker 2>library called Pegasus, which is up on new get and

724
00:36:03.719 --> 00:36:06.599
<v Speaker 2>this is basically the you write your peg grammar for

725
00:36:06.639 --> 00:36:09.119
<v Speaker 2>the language you're building, which is like, what's a program?

726
00:36:09.199 --> 00:36:12.280
<v Speaker 2>Will a program is a set of blocks, or it's empty.

727
00:36:12.719 --> 00:36:15.440
<v Speaker 2>So the shortest possible program is nothing, it's white space

728
00:36:15.480 --> 00:36:18.480
<v Speaker 2>followed by under file, which is valid. Or it's a

729
00:36:18.519 --> 00:36:21.480
<v Speaker 2>block followed by a program, which could be the empty program,

730
00:36:21.599 --> 00:36:22.960
<v Speaker 2>so it's just one block, or it could be a

731
00:36:23.039 --> 00:36:25.639
<v Speaker 2>block followed by a program, which is a block followed

732
00:36:25.639 --> 00:36:27.280
<v Speaker 2>by a program, which is a block followed by a

733
00:36:27.320 --> 00:36:28.960
<v Speaker 2>program which is the empty one. So you got four.

734
00:36:29.400 --> 00:36:31.480
<v Speaker 2>And I love that. I love the elegance of kind

735
00:36:31.519 --> 00:36:33.400
<v Speaker 2>of the self yeah, self reference.

736
00:36:33.519 --> 00:36:35.400
<v Speaker 1>I know if you heard that the burdens were flying

737
00:36:35.440 --> 00:36:37.480
<v Speaker 1>over around my head in a circle.

738
00:36:39.599 --> 00:36:41.519
<v Speaker 2>And then what's a block? Well, a block is either

739
00:36:41.559 --> 00:36:43.920
<v Speaker 2>a statement followed by an end of statement, or it's

740
00:36:43.960 --> 00:36:46.880
<v Speaker 2>a statement followed by a block, all right, And what's

741
00:36:46.920 --> 00:36:48.880
<v Speaker 2>a statement? And then you're like, well, a statement is

742
00:36:49.039 --> 00:36:52.599
<v Speaker 2>input output arithmetic par as this read that you know,

743
00:36:52.679 --> 00:36:54.559
<v Speaker 2>the actual the guts.

744
00:36:54.280 --> 00:36:54.920
<v Speaker 1>Of the language.

745
00:36:54.920 --> 00:36:56.920
<v Speaker 2>That's where it kind of widens out, and then you

746
00:36:57.000 --> 00:36:59.519
<v Speaker 2>get down to what are the expressions, and the expressions

747
00:36:59.559 --> 00:37:02.199
<v Speaker 2>are operators and values, and what are the values, And

748
00:37:02.239 --> 00:37:03.719
<v Speaker 2>that's where you get down to the type system. You

749
00:37:03.760 --> 00:37:05.199
<v Speaker 2>can have a string, you can have the number, you

750
00:37:05.280 --> 00:37:07.840
<v Speaker 2>can have a boolean. And the type system in Rockstar

751
00:37:07.880 --> 00:37:10.000
<v Speaker 2>is straight out of JavaScript, just because it you know,

752
00:37:10.360 --> 00:37:13.159
<v Speaker 2>it's one I think makes sense, so no types. Very

753
00:37:13.199 --> 00:37:16.760
<v Speaker 2>early on it kind of has types. It's got some

754
00:37:16.920 --> 00:37:18.920
<v Speaker 2>really interesting type coercion because one of the one of

755
00:37:18.960 --> 00:37:22.400
<v Speaker 2>the things that JavaScript always frustrated me with is, you know,

756
00:37:22.440 --> 00:37:25.199
<v Speaker 2>it's really idiosyncratic, like, you know, you can add a

757
00:37:25.239 --> 00:37:27.280
<v Speaker 2>string to a number, but you can't subtract a string

758
00:37:27.360 --> 00:37:30.480
<v Speaker 2>from home. And I'm like, well, if you can add

759
00:37:30.519 --> 00:37:33.559
<v Speaker 2>the string, surely there are scenarios where subtracting the string

760
00:37:33.679 --> 00:37:36.400
<v Speaker 2>makes sense. So I decided, you know, the Rockstar two

761
00:37:36.400 --> 00:37:39.639
<v Speaker 2>point zero, everything would return something like there's no nan,

762
00:37:39.719 --> 00:37:43.039
<v Speaker 2>there's no so divide by zero gives you infinity because

763
00:37:43.079 --> 00:37:49.079
<v Speaker 2>that sounds like rock and roll, and something like we

764
00:37:49.119 --> 00:37:51.559
<v Speaker 2>don't have we don't have not a number. It's got mysterious,

765
00:37:51.719 --> 00:37:55.039
<v Speaker 2>Like mysterious is the value you get but other things

766
00:37:55.079 --> 00:37:57.280
<v Speaker 2>like you subtract a string from another string, it's gonna

767
00:37:57.679 --> 00:37:59.760
<v Speaker 2>like if you subtract rock from Rockstar, you're going to

768
00:37:59.800 --> 00:38:02.519
<v Speaker 2>get because it's going to take the rockout because obviously

769
00:38:02.599 --> 00:38:05.519
<v Speaker 2>that makes sense. And like Rockstar divided by R it

770
00:38:05.559 --> 00:38:07.239
<v Speaker 2>gives you two because there's two rs in the words.

771
00:38:07.880 --> 00:38:12.039
<v Speaker 2>So string division is defined, string multiplication is defined. And

772
00:38:13.400 --> 00:38:15.280
<v Speaker 2>so you got all these these kind of ideas and

773
00:38:15.360 --> 00:38:17.320
<v Speaker 2>you're like, right, first, you got to design the syntax,

774
00:38:17.760 --> 00:38:19.599
<v Speaker 2>and some of it is syntax you design, and other

775
00:38:19.679 --> 00:38:21.360
<v Speaker 2>stuff is like, well, I've got these types and I

776
00:38:21.440 --> 00:38:23.480
<v Speaker 2>have this operator now, but I haven't figured out what

777
00:38:23.559 --> 00:38:27.320
<v Speaker 2>happens if you mash them together. And I figured out

778
00:38:27.400 --> 00:38:29.840
<v Speaker 2>very early on. So there's a wonderful tool called Endcrunch,

779
00:38:29.880 --> 00:38:32.239
<v Speaker 2>which is a continuous test runner for dot net that

780
00:38:32.599 --> 00:38:34.880
<v Speaker 2>I love dearly. I use it. It's on Writer as

781
00:38:34.920 --> 00:38:36.639
<v Speaker 2>well now but it's still Windows only. But for a

782
00:38:36.679 --> 00:38:38.559
<v Speaker 2>long time it was just a visual studio plug in

783
00:38:39.000 --> 00:38:40.719
<v Speaker 2>and it just sits there. It runs all your tests,

784
00:38:41.039 --> 00:38:44.079
<v Speaker 2>and I figured out very early on how to get

785
00:38:44.239 --> 00:38:47.119
<v Speaker 2>that to report the line and the rock Star program

786
00:38:47.199 --> 00:38:50.639
<v Speaker 2>where the test had failed. But I think the developer

787
00:38:50.679 --> 00:38:53.280
<v Speaker 2>remco molderus like, hey, how do you know when a

788
00:38:53.360 --> 00:38:55.360
<v Speaker 2>test fails? How do you know what line to link to?

789
00:38:56.039 --> 00:38:59.079
<v Speaker 2>And it was like, it's just we use a regular

790
00:38:59.119 --> 00:39:02.360
<v Speaker 2>expression to pass the output from the dot netcompiler. And

791
00:39:02.440 --> 00:39:04.679
<v Speaker 2>I'm like, so if I can emit a line of

792
00:39:04.760 --> 00:39:09.599
<v Speaker 2>output that matches the exact error this space at space

793
00:39:10.440 --> 00:39:14.440
<v Speaker 2>file name colon, line number, comma, And he's like, try it,

794
00:39:14.519 --> 00:39:16.440
<v Speaker 2>and see I tried it and it worked. So now

795
00:39:16.519 --> 00:39:18.360
<v Speaker 2>I have a test runner that I can click and

796
00:39:18.400 --> 00:39:20.360
<v Speaker 2>I can jump to a line in a Rockstar program

797
00:39:20.679 --> 00:39:23.039
<v Speaker 2>where the test failed. So now you can start using

798
00:39:23.119 --> 00:39:26.000
<v Speaker 2>Rockstar to write the tests. And that's at that point

799
00:39:26.039 --> 00:39:27.159
<v Speaker 2>I'm like, well, if you can use them to right

800
00:39:27.199 --> 00:39:29.800
<v Speaker 2>the tests, I can also use a test runner to

801
00:39:29.880 --> 00:39:34.719
<v Speaker 2>validate the documentation. And so the code with rockstar dot

802
00:39:34.800 --> 00:39:38.199
<v Speaker 2>com website, all of the examples in it are actual

803
00:39:38.320 --> 00:39:42.039
<v Speaker 2>Rockstar programs that are tested as part of building the solution.

804
00:39:42.800 --> 00:39:45.400
<v Speaker 2>But then the website's built in Jackiel, so it runs

805
00:39:45.440 --> 00:39:47.960
<v Speaker 2>on GitHub pages and there's a little custom Ruby plug

806
00:39:48.079 --> 00:39:51.239
<v Speaker 2>in that takes each snippet of code and turns it

807
00:39:51.400 --> 00:39:53.719
<v Speaker 2>into an one you can actually run right there on

808
00:39:53.800 --> 00:39:57.880
<v Speaker 2>the page by clicking a button. So every single kind

809
00:39:57.880 --> 00:40:01.679
<v Speaker 2>of scenario, every test case, every operates to the examples.

810
00:40:01.719 --> 00:40:03.360
<v Speaker 2>How do you do a raise, how do you do loops?

811
00:40:03.400 --> 00:40:05.039
<v Speaker 2>How do you do input? How do you do output?

812
00:40:06.000 --> 00:40:08.719
<v Speaker 2>The docs get unit tested as part of building the

813
00:40:08.760 --> 00:40:11.880
<v Speaker 2>whole thing, which has only caused a couple of headaches

814
00:40:11.880 --> 00:40:14.559
<v Speaker 2>because it doesn't using symbolic linking, which causes problems with

815
00:40:14.639 --> 00:40:18.800
<v Speaker 2>cross platform builds, which you know is a is a headache.

816
00:40:19.639 --> 00:40:21.719
<v Speaker 1>I have a question, Go for it. I hate to

817
00:40:21.800 --> 00:40:24.159
<v Speaker 1>interrupt it. As you're talking about this, I can't help

818
00:40:24.199 --> 00:40:28.440
<v Speaker 1>but think that you beyond rockstar, you may have invented

819
00:40:28.480 --> 00:40:32.079
<v Speaker 1>a new type of language paradigm where you could use

820
00:40:32.199 --> 00:40:37.360
<v Speaker 1>the language in any kind of genre of writing, for

821
00:40:37.519 --> 00:40:43.480
<v Speaker 1>example Shakespeare. What's stopping anybody from taking your the basis

822
00:40:43.599 --> 00:40:47.320
<v Speaker 1>of your you know, your language and turning it using

823
00:40:47.559 --> 00:40:50.079
<v Speaker 1>Shakespearean language to write code?

824
00:40:50.119 --> 00:40:54.400
<v Speaker 2>And so that's that's actually a really interesting question because

825
00:40:55.440 --> 00:40:57.960
<v Speaker 2>I think at this point, so generally, you know, part

826
00:40:58.000 --> 00:41:01.360
<v Speaker 2>of the problem is how do you take the lexical

827
00:41:01.400 --> 00:41:05.880
<v Speaker 2>structure of natural, lyrical sounding English and turn that into

828
00:41:05.920 --> 00:41:08.880
<v Speaker 2>something you can use to write programs? And that part

829
00:41:08.920 --> 00:41:11.280
<v Speaker 2>of it does lend itself to a lot of flexibility

830
00:41:11.320 --> 00:41:13.239
<v Speaker 2>and One of the things that I baked into Rockstar

831
00:41:13.320 --> 00:41:16.280
<v Speaker 2>early on is aliases. So there's a lot of things

832
00:41:16.320 --> 00:41:18.800
<v Speaker 2>where there are three or four different keywords that compile

833
00:41:18.920 --> 00:41:21.400
<v Speaker 2>to the same instruction. They mean the same thing. So

834
00:41:21.719 --> 00:41:24.559
<v Speaker 2>we got like print tallow world, but also you can shout,

835
00:41:24.639 --> 00:41:28.800
<v Speaker 2>you can scream, you can whisper how world. Otherwise it's

836
00:41:28.840 --> 00:41:32.199
<v Speaker 2>just print, print, print, print, print, you know. And so

837
00:41:32.360 --> 00:41:34.960
<v Speaker 2>the minimalist rock Star looks a little bit like Python,

838
00:41:35.320 --> 00:41:38.079
<v Speaker 2>and idiomatic Rockstar has all the kind of fancy edges

839
00:41:38.159 --> 00:41:42.079
<v Speaker 2>and frills and stuff on it. And so the next

840
00:41:42.159 --> 00:41:45.639
<v Speaker 2>part then is choosing the keyword that you're going to

841
00:41:45.760 --> 00:41:48.639
<v Speaker 2>use for built in operations, so you know, like a

842
00:41:48.800 --> 00:41:52.119
<v Speaker 2>natural or many programming languages have stack operators which are

843
00:41:52.119 --> 00:41:54.360
<v Speaker 2>pushing pop, and everyone's like, you push it on the stack,

844
00:41:54.400 --> 00:41:56.199
<v Speaker 2>you pop it off the stack. And I was like,

845
00:41:56.239 --> 00:41:58.000
<v Speaker 2>all right, well push and pop is in there. But

846
00:41:58.159 --> 00:42:00.280
<v Speaker 2>I'm also going to have rock and roll absolutely, so

847
00:42:00.639 --> 00:42:03.199
<v Speaker 2>you can you can rock something. And then you're like, well,

848
00:42:03.199 --> 00:42:04.800
<v Speaker 2>if we got this rock up right, what happens if

849
00:42:04.840 --> 00:42:07.960
<v Speaker 2>you rock something that isn't a isn't a list, and

850
00:42:08.480 --> 00:42:10.920
<v Speaker 2>so rock will if you rock a number, it turns

851
00:42:10.960 --> 00:42:13.519
<v Speaker 2>it into a list that just contains the number. If

852
00:42:13.559 --> 00:42:15.639
<v Speaker 2>you rock a string, it turns it into a list

853
00:42:15.719 --> 00:42:17.960
<v Speaker 2>that contains one string. And then if you rock it again,

854
00:42:18.079 --> 00:42:21.039
<v Speaker 2>two strings, three strings, and roll will pull the element

855
00:42:21.079 --> 00:42:22.320
<v Speaker 2>off the string. And then I thought, well, hang on,

856
00:42:22.360 --> 00:42:25.039
<v Speaker 2>if you if you rock a string with a number,

857
00:42:25.880 --> 00:42:28.320
<v Speaker 2>what it does. It takes the number, it converts it

858
00:42:28.480 --> 00:42:31.119
<v Speaker 2>into the Unicode character with a corresponding code point, and

859
00:42:31.199 --> 00:42:34.480
<v Speaker 2>it appends it to the string. And so what this

860
00:42:34.679 --> 00:42:37.360
<v Speaker 2>thing gives you is it gives you a way of

861
00:42:38.239 --> 00:42:43.159
<v Speaker 2>building strings without having to actually use them, so you

862
00:42:43.239 --> 00:42:45.599
<v Speaker 2>can you can. They're called ninja strings because they're stealthy.

863
00:42:45.639 --> 00:42:48.559
<v Speaker 2>You don't see them coming. And so I'm just going

864
00:42:48.639 --> 00:42:50.840
<v Speaker 2>to look up the example because I can't remember it

865
00:42:51.000 --> 00:42:52.400
<v Speaker 2>off the top of my head. Yeah.

866
00:42:52.519 --> 00:42:55.239
<v Speaker 1>Well, while you're doing that, the Shakespearean version of rock

867
00:42:55.280 --> 00:42:56.719
<v Speaker 1>and roll might be ebb and flow.

868
00:42:57.159 --> 00:42:59.199
<v Speaker 2>Yeah, exactly, this kind of thing. And so you're like

869
00:43:00.119 --> 00:43:01.840
<v Speaker 2>that point. You know, if you wanted to add ab

870
00:43:01.960 --> 00:43:05.360
<v Speaker 2>and flow as aliases, it's a very So adding alias

871
00:43:05.440 --> 00:43:07.400
<v Speaker 2>is one. It's very easy because you just stick another

872
00:43:07.760 --> 00:43:10.079
<v Speaker 2>case in the grammar and you've done. The problem then

873
00:43:10.159 --> 00:43:12.159
<v Speaker 2>is you might have somebody out there who's used ab

874
00:43:12.320 --> 00:43:14.280
<v Speaker 2>as a variable in a program, at which point that's

875
00:43:14.280 --> 00:43:17.119
<v Speaker 2>a breaking I see. And you know, this is a

876
00:43:17.239 --> 00:43:20.519
<v Speaker 2>sort of classic problem that all programming language designers, no

877
00:43:20.599 --> 00:43:24.320
<v Speaker 2>matter how esoteric, is if you have something that wasn't

878
00:43:24.360 --> 00:43:27.679
<v Speaker 2>a keyword and now it is, well, somebody might have

879
00:43:27.840 --> 00:43:29.280
<v Speaker 2>used it before. Yeah.

880
00:43:29.280 --> 00:43:31.159
<v Speaker 1>In this case, though, you'd be creating a whole other

881
00:43:31.280 --> 00:43:35.039
<v Speaker 1>language other than Rockstar. It'd be you know, Shakespeare or something. Right,

882
00:43:35.119 --> 00:43:37.559
<v Speaker 1>So if you're writing, you're either writing in Rockstar or

883
00:43:37.639 --> 00:43:40.440
<v Speaker 1>in Shakespeare. You wouldn't be using them together.

884
00:43:40.880 --> 00:43:42.800
<v Speaker 2>It has occurred to me that there is a sort

885
00:43:42.800 --> 00:43:46.760
<v Speaker 2>of fairly natural split because the Rockstar engine's kind of

886
00:43:46.800 --> 00:43:49.360
<v Speaker 2>in two halves. There's the pausa, and the Pausa takes

887
00:43:49.400 --> 00:43:53.239
<v Speaker 2>the Rockstar program and turns it into a abstract syntax tree,

888
00:43:53.239 --> 00:43:55.800
<v Speaker 2>which is a collection of dot Net classes that refer

889
00:43:55.880 --> 00:43:58.360
<v Speaker 2>to each other. And so like program has a collection

890
00:43:58.440 --> 00:44:00.199
<v Speaker 2>of statements, and then a statement is one of the

891
00:44:00.239 --> 00:44:03.719
<v Speaker 2>following types. But in theory, you could then build a

892
00:44:03.800 --> 00:44:06.559
<v Speaker 2>completely different grammar that compiles to the same set of

893
00:44:06.639 --> 00:44:08.639
<v Speaker 2>classes and then just run it through the rock Star

894
00:44:08.760 --> 00:44:10.880
<v Speaker 2>engine the interpreter, and it would tell you what it did.

895
00:44:11.480 --> 00:44:13.760
<v Speaker 2>And so there's almost like the guts of a language

896
00:44:13.800 --> 00:44:14.920
<v Speaker 2>construction kit in here.

897
00:44:15.159 --> 00:44:16.840
<v Speaker 1>Yeah, well you're like, well, you.

898
00:44:16.880 --> 00:44:19.519
<v Speaker 2>Know, this thing maps onto that thing, and you know,

899
00:44:19.559 --> 00:44:21.079
<v Speaker 2>at that point it's a little bit fundy because it's

900
00:44:21.079 --> 00:44:24.840
<v Speaker 2>like that might actually be thinking this wasn't supposed to

901
00:44:24.880 --> 00:44:30.960
<v Speaker 2>be useful, but this accidentally invented something that has genuine

902
00:44:31.000 --> 00:44:35.280
<v Speaker 2>application as a teacher crap, that wasn't the point and

903
00:44:36.199 --> 00:44:37.800
<v Speaker 2>but yeah, and you know it, really there is this

904
00:44:37.920 --> 00:44:40.199
<v Speaker 2>intermediate representation and if you if you go on the

905
00:44:40.280 --> 00:44:42.480
<v Speaker 2>Rockstar website, you can type in any program and as

906
00:44:42.480 --> 00:44:44.599
<v Speaker 2>well as running it, you can see the past tree.

907
00:44:44.719 --> 00:44:47.440
<v Speaker 2>You can see the visualization of what your program gets

908
00:44:47.480 --> 00:44:50.360
<v Speaker 2>translated into, which has been one. You know, it's a

909
00:44:50.400 --> 00:44:53.239
<v Speaker 2>tool that I found incredibly useful when I was developing

910
00:44:53.320 --> 00:44:55.360
<v Speaker 2>the thing, and then I was like, other people might

911
00:44:55.480 --> 00:45:00.440
<v Speaker 2>find this useful too, And you know, it's very particularly

912
00:45:00.440 --> 00:45:03.079
<v Speaker 2>if you're trying to debug something where you have an

913
00:45:03.159 --> 00:45:06.039
<v Speaker 2>expression that could either be interpreted as an actual expression

914
00:45:06.079 --> 00:45:08.960
<v Speaker 2>or it's going to be interpreted as a poetic literal.

915
00:45:09.639 --> 00:45:11.639
<v Speaker 2>And you know, this means that you have something you

916
00:45:11.760 --> 00:45:15.679
<v Speaker 2>think is going to be like a logical expression. You know,

917
00:45:15.960 --> 00:45:18.400
<v Speaker 2>X is not why and you'd think, well, X is

918
00:45:18.400 --> 00:45:20.000
<v Speaker 2>not my means of why is true? X is now

919
00:45:20.039 --> 00:45:22.480
<v Speaker 2>false because it's going to do logical negation. But in

920
00:45:22.599 --> 00:45:25.199
<v Speaker 2>some circumstances X is not. Why is going to count?

921
00:45:25.280 --> 00:45:27.239
<v Speaker 2>Well not as one, two, three, and why is one?

922
00:45:27.400 --> 00:45:29.159
<v Speaker 2>So you're going to get X is now thirty one

923
00:45:30.000 --> 00:45:32.320
<v Speaker 2>and be able to see what the parsa is picking

924
00:45:32.400 --> 00:45:34.519
<v Speaker 2>up because a lot of that stuff happens at past

925
00:45:34.559 --> 00:45:37.000
<v Speaker 2>time because it's not going to change, it's it's baked in,

926
00:45:37.639 --> 00:45:40.079
<v Speaker 2>and so visualizing the pasetree for that and yeah, at

927
00:45:40.119 --> 00:45:42.400
<v Speaker 2>this point you're absolutely right. You're like, well, the grammar

928
00:45:42.480 --> 00:45:46.320
<v Speaker 2>is now decoupled from the interpreter to the extent that

929
00:45:46.400 --> 00:45:48.320
<v Speaker 2>if you wanted to, you could build a different grammar

930
00:45:48.400 --> 00:45:51.119
<v Speaker 2>on top of it and still use the same back end,

931
00:45:51.159 --> 00:45:52.000
<v Speaker 2>the same interpreters.

932
00:45:52.079 --> 00:45:54.960
<v Speaker 1>Fascinating kind of stuff on it. So, in this new

933
00:45:55.079 --> 00:45:57.840
<v Speaker 1>version for dot net, did you have any breaking changes

934
00:45:57.920 --> 00:46:00.480
<v Speaker 1>and did both of your users complain about it?

935
00:46:00.760 --> 00:46:13.159
<v Speaker 2>Or yes? And yes you should come down every shown.

936
00:46:16.920 --> 00:46:21.119
<v Speaker 2>So yes, there was a certain inevitable number of breaking changes,

937
00:46:21.639 --> 00:46:23.960
<v Speaker 2>some of which were just stuff that, like I mentioned

938
00:46:24.000 --> 00:46:25.679
<v Speaker 2>a moment ago, we had a push and pop and

939
00:46:25.800 --> 00:46:28.480
<v Speaker 2>rock and roll and actually push and pop was backwards.

940
00:46:28.599 --> 00:46:31.079
<v Speaker 2>When I baked that in pop didn't do what popping

941
00:46:31.119 --> 00:46:33.320
<v Speaker 2>a stack does, and I was like, I'm going to

942
00:46:33.360 --> 00:46:36.760
<v Speaker 2>fix that. So push and pop, you know, add an

943
00:46:36.760 --> 00:46:39.639
<v Speaker 2>element to the end and remove the final element, and

944
00:46:39.760 --> 00:46:42.360
<v Speaker 2>then rock and Roll will add elements to the end,

945
00:46:42.480 --> 00:46:44.760
<v Speaker 2>but they will remove elements from the beginning, which is

946
00:46:44.840 --> 00:46:48.239
<v Speaker 2>analogous to shift and unshift in JavaScript. So that was

947
00:46:48.320 --> 00:46:52.599
<v Speaker 2>just fixing something that was broken. And there were a

948
00:46:52.639 --> 00:46:55.000
<v Speaker 2>couple of so the there's a test suite. The really

949
00:46:55.079 --> 00:46:59.039
<v Speaker 2>nice thing is the community contributed a test suite for Rockstar.

950
00:46:59.159 --> 00:47:03.159
<v Speaker 2>One was a set of about sixty Rockstar programs, and

951
00:47:03.760 --> 00:47:06.119
<v Speaker 2>the testing here was just here's a program, and here's

952
00:47:06.119 --> 00:47:10.079
<v Speaker 2>a text file containing its output, and so whatever language

953
00:47:10.119 --> 00:47:12.039
<v Speaker 2>you're using to implement it, you're going to read this,

954
00:47:12.400 --> 00:47:14.400
<v Speaker 2>run it, and compare your output to that, and if

955
00:47:14.440 --> 00:47:18.400
<v Speaker 2>it works, then it passes. And that proved incredibly useful

956
00:47:18.480 --> 00:47:22.599
<v Speaker 2>in terms of, you know, understanding backward compatibility. And I

957
00:47:22.679 --> 00:47:24.480
<v Speaker 2>got to a point where it was one hundred percent

958
00:47:24.639 --> 00:47:26.800
<v Speaker 2>no breaking changes, and I was like, right, there are

959
00:47:26.840 --> 00:47:29.039
<v Speaker 2>now some things I'm going to break on purpose, and

960
00:47:29.239 --> 00:47:33.119
<v Speaker 2>one of them was so using is as an assignment

961
00:47:33.199 --> 00:47:36.360
<v Speaker 2>operator used to be like, if you say desire is

962
00:47:36.400 --> 00:47:38.840
<v Speaker 2>a love struck lady killer, the word is there in

963
00:47:39.000 --> 00:47:42.480
<v Speaker 2>that very specific context, would pase a love struck lady

964
00:47:42.559 --> 00:47:44.519
<v Speaker 2>killer as a as a literal, it would count the words.

965
00:47:45.159 --> 00:47:46.800
<v Speaker 2>And I wanted to be able to say. I kept

966
00:47:47.000 --> 00:47:51.679
<v Speaker 2>in my own code writing things like X is with five,

967
00:47:51.840 --> 00:47:54.280
<v Speaker 2>which is X plus equals five like incremental, but it

968
00:47:54.280 --> 00:47:56.039
<v Speaker 2>wouldn't work because it would passe with as a four

969
00:47:56.079 --> 00:47:58.719
<v Speaker 2>and get excess now you know, forty one or something.

970
00:47:59.239 --> 00:48:01.280
<v Speaker 2>So I just I broke that. I said, a poetic

971
00:48:01.360 --> 00:48:03.880
<v Speaker 2>literal can't start with a keyword. Okay, if it's a

972
00:48:03.960 --> 00:48:05.960
<v Speaker 2>keyword that can start an expression, then you're going to

973
00:48:06.039 --> 00:48:08.559
<v Speaker 2>interpret that as an American expression or a logic expression,

974
00:48:08.920 --> 00:48:10.840
<v Speaker 2>not just count the lengths of the words and.

975
00:48:11.760 --> 00:48:13.400
<v Speaker 1>Did you find poetic ways around it?

976
00:48:14.039 --> 00:48:17.000
<v Speaker 2>So what I introduced was like a so anywhere you

977
00:48:17.079 --> 00:48:19.320
<v Speaker 2>have the word like the rest of that line or

978
00:48:19.360 --> 00:48:20.880
<v Speaker 2>the rest of these statement up as far as the

979
00:48:20.960 --> 00:48:24.159
<v Speaker 2>next piece of punctuation is going to be a poetic literal.

980
00:48:24.440 --> 00:48:25.880
<v Speaker 2>So now you can use it in a lot of

981
00:48:25.920 --> 00:48:29.199
<v Speaker 2>different places. You can say, you know, if my love

982
00:48:29.360 --> 00:48:32.400
<v Speaker 2>is like a burning forest, and it's like, well, my

983
00:48:32.519 --> 00:48:35.239
<v Speaker 2>love is a variable, and like a burning forest is

984
00:48:35.320 --> 00:48:38.159
<v Speaker 2>going to give you as one burning seven forest six.

985
00:48:38.519 --> 00:48:40.920
<v Speaker 2>So that's if this is one seventy six, and so

986
00:48:41.159 --> 00:48:43.000
<v Speaker 2>if you want to you can use that. I don't know,

987
00:48:43.079 --> 00:48:45.679
<v Speaker 2>whatever ask you one seventy six is you can compare

988
00:48:45.760 --> 00:48:51.599
<v Speaker 2>to that. And there's this weird moment where you start

989
00:48:51.719 --> 00:48:57.039
<v Speaker 2>realizing that things things like that which you hadn't considered

990
00:48:57.079 --> 00:49:00.320
<v Speaker 2>that use case when you design the building blocks for it.

991
00:49:00.679 --> 00:49:04.440
<v Speaker 2>They just kind of emer And you know, we were

992
00:49:04.480 --> 00:49:06.599
<v Speaker 2>talking earlier in the in the show at the beginning,

993
00:49:06.639 --> 00:49:08.800
<v Speaker 2>you folks are talking about using machine learning to in

994
00:49:08.960 --> 00:49:11.840
<v Speaker 2>games and AI to generate that. And earlier this year

995
00:49:11.840 --> 00:49:14.440
<v Speaker 2>I played through boulders Gate three and I absolutely loved it.

996
00:49:14.519 --> 00:49:15.880
<v Speaker 2>And one of the things I loved about it is

997
00:49:15.960 --> 00:49:18.440
<v Speaker 2>that it is the kind of game that's like, yeah,

998
00:49:18.519 --> 00:49:21.559
<v Speaker 2>we're gonna the game engine is solid enough that you

999
00:49:21.679 --> 00:49:24.840
<v Speaker 2>can do stuff that the game designers did not imagine.

1000
00:49:25.280 --> 00:49:27.079
<v Speaker 2>Like you got an eight percent chance if you try

1001
00:49:27.119 --> 00:49:28.880
<v Speaker 2>to turn the god of Death into a sheep it's

1002
00:49:28.960 --> 00:49:29.480
<v Speaker 2>going to work.

1003
00:49:30.280 --> 00:49:32.599
<v Speaker 1>Now that's not a rock Star line, right there is it?

1004
00:49:36.440 --> 00:49:41.000
<v Speaker 2>It would probably work, It might compile, And you know,

1005
00:49:41.119 --> 00:49:44.599
<v Speaker 2>I love that sense that there is a foundation here

1006
00:49:44.960 --> 00:49:50.360
<v Speaker 2>that just leads to these wonderful, little you know, idiosyncrat

1007
00:49:50.480 --> 00:49:53.400
<v Speaker 2>page cases. They go oh, oh, I guess that works,

1008
00:49:53.719 --> 00:49:55.960
<v Speaker 2>and it does work, and you're like, oh, that's weird.

1009
00:49:56.440 --> 00:49:59.840
<v Speaker 1>It takes your brain in a way that regular programming

1010
00:50:00.039 --> 00:50:03.800
<v Speaker 1>languages just don't do. Like, you know, you're firing a

1011
00:50:03.840 --> 00:50:06.760
<v Speaker 1>lot of synapses when you're writing Rockstar, a lot more

1012
00:50:06.800 --> 00:50:08.400
<v Speaker 1>in a different part of your brain, I think than

1013
00:50:08.440 --> 00:50:10.000
<v Speaker 1>if you're writing C sharp for example.

1014
00:50:10.239 --> 00:50:12.880
<v Speaker 2>Yeah, and it also, you know, it decouples. It is

1015
00:50:12.960 --> 00:50:16.000
<v Speaker 2>programming for the joy of programming, because you can't solve

1016
00:50:16.039 --> 00:50:20.519
<v Speaker 2>any real problems with it, and so it absolutely reinforces

1017
00:50:20.719 --> 00:50:23.480
<v Speaker 2>the no. No, you're doing this because it is fun.

1018
00:50:23.679 --> 00:50:25.800
<v Speaker 2>You're doing this because there was a yeah, I know.

1019
00:50:25.960 --> 00:50:29.039
<v Speaker 3>It's it's such a great Kata approach, right yea, just

1020
00:50:30.000 --> 00:50:33.480
<v Speaker 3>really exercise thinking about how you'd solve something in and

1021
00:50:33.599 --> 00:50:34.679
<v Speaker 3>teaching kids.

1022
00:50:35.280 --> 00:50:38.000
<v Speaker 1>They must love it, right, I mean, can you imagine

1023
00:50:38.079 --> 00:50:41.320
<v Speaker 1>having a rock star programming class at a high school

1024
00:50:41.440 --> 00:50:43.119
<v Speaker 1>or something? Kids would flock.

1025
00:50:43.239 --> 00:50:45.679
<v Speaker 2>I know a couple of people who tried it, kids

1026
00:50:45.840 --> 00:50:50.400
<v Speaker 2>like fifteen sixteen above. They got the joke because probably

1027
00:50:50.519 --> 00:50:54.039
<v Speaker 2>their dad listen to and they're like oh, you made

1028
00:50:54.079 --> 00:50:56.199
<v Speaker 2>a programming language out of my dad's collmusic.

1029
00:50:56.280 --> 00:50:59.119
<v Speaker 1>All right, let's sealk with it his album collection.

1030
00:51:00.920 --> 00:51:03.639
<v Speaker 2>Kids younger than that, they don't really get like because

1031
00:51:03.679 --> 00:51:05.719
<v Speaker 2>a certain amount of it is this makes no sense

1032
00:51:05.880 --> 00:51:08.280
<v Speaker 2>unless it makes you laugh, right right, and it does

1033
00:51:08.519 --> 00:51:11.960
<v Speaker 2>make people laugh, you know. The acid test for Rockstar

1034
00:51:12.159 --> 00:51:14.920
<v Speaker 2>is are people still laughing at this? And they are?

1035
00:51:15.119 --> 00:51:18.400
<v Speaker 3>You know, it's very cool. So yeah, what about the

1036
00:51:18.559 --> 00:51:21.639
<v Speaker 3>error messages? Can you write clam rock error messages?

1037
00:51:22.440 --> 00:51:26.320
<v Speaker 2>So it tried. I tried very hard to emulate the

1038
00:51:26.960 --> 00:51:30.400
<v Speaker 2>JavaScript approach of you know, don't fail like if you can,

1039
00:51:30.599 --> 00:51:34.159
<v Speaker 2>if you possibly can. There's no exception throwing or handling.

1040
00:51:34.679 --> 00:51:37.679
<v Speaker 2>Everything returns something. It's just that sometimes it returns a

1041
00:51:37.800 --> 00:51:41.599
<v Speaker 2>zero or an empty string, or it returns mysterious. Getting

1042
00:51:41.639 --> 00:51:45.199
<v Speaker 2>the PASA to generate good error messages that was difficult,

1043
00:51:45.320 --> 00:51:47.480
<v Speaker 2>and that's actually still something that I'm not one hundred

1044
00:51:47.519 --> 00:51:51.519
<v Speaker 2>percent happening with because the nature of a pausing expression

1045
00:51:51.599 --> 00:51:55.320
<v Speaker 2>grammar is very much hey, check that input against all

1046
00:51:55.360 --> 00:51:58.039
<v Speaker 2>of these patterns, and if none of them match, then

1047
00:51:58.079 --> 00:52:01.159
<v Speaker 2>it can't tell you where it failed. It can just say, hey,

1048
00:52:01.199 --> 00:52:04.000
<v Speaker 2>I tried all this, and there wasn't a program, and

1049
00:52:04.079 --> 00:52:05.960
<v Speaker 2>you're like, well, where wasn't there a program? It's like

1050
00:52:06.039 --> 00:52:11.559
<v Speaker 2>there that whole thing wasn't a program, and one kind

1051
00:52:11.559 --> 00:52:13.400
<v Speaker 2>of a stretch golfer. There's something that I've been working on,

1052
00:52:13.440 --> 00:52:14.880
<v Speaker 2>but I haven't got at working yet. There is a

1053
00:52:16.199 --> 00:52:18.159
<v Speaker 2>thing called a code mirror. You know code mirror. It's

1054
00:52:18.199 --> 00:52:21.960
<v Speaker 2>the code editor that's built into web pages. And the

1055
00:52:22.239 --> 00:52:26.599
<v Speaker 2>code mirror. Syntax highlighting uses something called a laser grammar.

1056
00:52:26.719 --> 00:52:32.519
<v Speaker 2>Eliezer and laser grammar is the I've completely forgotten his name.

1057
00:52:32.639 --> 00:52:36.599
<v Speaker 2>The guy who created this basically was like, look, compiling

1058
00:52:37.360 --> 00:52:41.000
<v Speaker 2>a grammar for syntax highlighting is not the same as

1059
00:52:41.079 --> 00:52:44.639
<v Speaker 2>compiling a programming language. You are going to run because

1060
00:52:44.679 --> 00:52:46.920
<v Speaker 2>you think about syntax highlighting, like if you make a mistake,

1061
00:52:46.960 --> 00:52:48.559
<v Speaker 2>you know on the syntax high learning to be off

1062
00:52:48.599 --> 00:52:51.039
<v Speaker 2>for the whole rest of the file. You want it

1063
00:52:51.079 --> 00:52:53.280
<v Speaker 2>to recover as soon as it can. It needs to

1064
00:52:53.320 --> 00:52:57.199
<v Speaker 2>be like, well the rest didn't make sense, yeah, and

1065
00:52:57.440 --> 00:52:59.440
<v Speaker 2>so you know the laser grammar for it. And I

1066
00:52:59.559 --> 00:53:02.039
<v Speaker 2>spent a that two weeks trying to write a laser

1067
00:53:02.079 --> 00:53:04.920
<v Speaker 2>grammar so I can have syntax highlighting for Rockstar. And

1068
00:53:05.199 --> 00:53:09.039
<v Speaker 2>because the pausing expression grammar is like, try this. If

1069
00:53:09.079 --> 00:53:11.039
<v Speaker 2>that doesn't work, try this. If that doesn't work, try this,

1070
00:53:11.519 --> 00:53:14.039
<v Speaker 2>whereas the laser grammar is like try this, it works

1071
00:53:14.119 --> 00:53:16.079
<v Speaker 2>or it doesn't, we don't care. It doesn't have this

1072
00:53:16.239 --> 00:53:19.239
<v Speaker 2>notion of kind of backtracking and trying another one and

1073
00:53:19.280 --> 00:53:21.320
<v Speaker 2>backtracking trying on to And that's the point where my

1074
00:53:21.440 --> 00:53:23.960
<v Speaker 2>brain just went, now, yeah, yeah, no no no no

1075
00:53:24.039 --> 00:53:25.840
<v Speaker 2>no no no, you're tired and you're never going to

1076
00:53:25.880 --> 00:53:29.119
<v Speaker 2>figure this out right now. So I parked that until

1077
00:53:29.199 --> 00:53:32.480
<v Speaker 2>life was a little more conducive to spending six hours

1078
00:53:32.679 --> 00:53:37.119
<v Speaker 2>reading up on code grammars and stuff. And it is

1079
00:53:37.239 --> 00:53:41.400
<v Speaker 2>a I mean, it's code Mirror is a phenomenally impressive project,

1080
00:53:41.480 --> 00:53:44.280
<v Speaker 2>but it's also Codemera reversion five was like, put this

1081
00:53:44.440 --> 00:53:46.920
<v Speaker 2>JavaScript file on your website and you got syntax highlighting.

1082
00:53:47.320 --> 00:53:51.440
<v Speaker 2>Codemera reversion six is like, here are sub atomic particles.

1083
00:53:51.599 --> 00:53:53.599
<v Speaker 2>You should be able to use them to build a universe.

1084
00:53:54.320 --> 00:53:56.440
<v Speaker 2>And you're like, I don't know how to do that,

1085
00:53:56.920 --> 00:53:59.320
<v Speaker 2>and you know the builds that like, you've got to

1086
00:53:59.360 --> 00:54:01.679
<v Speaker 2>define your grammar, you got to find your syntax, you've

1087
00:54:01.679 --> 00:54:04.920
<v Speaker 2>got to find your keyword operations. Then you've got to

1088
00:54:05.000 --> 00:54:08.360
<v Speaker 2>build in a JavaScript built step that. So the editor

1089
00:54:08.440 --> 00:54:09.920
<v Speaker 2>that's on there, it is actually code mirror, but it

1090
00:54:09.960 --> 00:54:11.039
<v Speaker 2>has no syntax highlighting.

1091
00:54:11.199 --> 00:54:12.079
<v Speaker 1>It just okay.

1092
00:54:13.039 --> 00:54:14.880
<v Speaker 2>So that's something I'm either going to come back to

1093
00:54:15.039 --> 00:54:17.159
<v Speaker 2>or I'm going to nerd snipe the Internet. It's going

1094
00:54:17.199 --> 00:54:19.679
<v Speaker 2>to go on like you know, Blue Sky and be like, hey,

1095
00:54:19.840 --> 00:54:22.559
<v Speaker 2>I just discovered that code Mirror can't pass Rockstar because

1096
00:54:22.599 --> 00:54:25.320
<v Speaker 2>Rockstar is too complicated, and give it. Give it forty

1097
00:54:25.360 --> 00:54:29.320
<v Speaker 2>eight hours and somebody will be like you're wrong. I'm like, oh, yeah,

1098
00:54:29.679 --> 00:54:33.599
<v Speaker 2>thank you great, I'm willing to be wrong.

1099
00:54:33.840 --> 00:54:38.360
<v Speaker 1>Yeah, So that's something you're thinking of any other new

1100
00:54:38.440 --> 00:54:40.639
<v Speaker 1>features in the next version.

1101
00:54:40.480 --> 00:54:44.199
<v Speaker 2>You think, So, you know, the appetite has always been there.

1102
00:54:44.239 --> 00:54:46.480
<v Speaker 2>People are like, we want file system I owe, and

1103
00:54:47.320 --> 00:54:50.679
<v Speaker 2>you know the challenge there or even just a module system,

1104
00:54:50.840 --> 00:54:53.159
<v Speaker 2>like a way of having code in one file. And

1105
00:54:53.400 --> 00:54:56.599
<v Speaker 2>the best proposal that we've kind of seen there's a

1106
00:54:56.639 --> 00:54:58.719
<v Speaker 2>couple of us who bounced the stuff around on GitHub

1107
00:54:58.800 --> 00:55:02.480
<v Speaker 2>issues is that. So you know, if you open like

1108
00:55:02.559 --> 00:55:04.280
<v Speaker 2>the sleeve notes for a record, you've got.

1109
00:55:04.199 --> 00:55:08.360
<v Speaker 1>The queste a record, I'm sorry, are these things don't It's.

1110
00:55:08.239 --> 00:55:12.519
<v Speaker 2>Like you take an MP three and what you do

1111
00:55:13.119 --> 00:55:16.039
<v Speaker 2>is you you cut the MP three into a piece

1112
00:55:16.079 --> 00:55:19.760
<v Speaker 2>of wax, and when the MP three is very wobbly,

1113
00:55:19.920 --> 00:55:22.119
<v Speaker 2>you make a very wobbly cut, and when the MP

1114
00:55:22.280 --> 00:55:24.480
<v Speaker 2>three is very still, you make a very straight cut,

1115
00:55:24.880 --> 00:55:27.280
<v Speaker 2>and then you turn the wax round and round and round.

1116
00:55:27.559 --> 00:55:30.719
<v Speaker 1>That's fascinating with it. And it comes with a piece

1117
00:55:30.719 --> 00:55:32.559
<v Speaker 1>of paper obviously that you can read.

1118
00:55:32.920 --> 00:55:37.880
<v Speaker 2>Yeah, So for our younger listeners at the Apple, music

1119
00:55:38.000 --> 00:55:41.039
<v Speaker 2>used to come on on LPs, and LPs came with

1120
00:55:41.159 --> 00:55:43.559
<v Speaker 2>sleeve notes, which is where you could read about your

1121
00:55:43.599 --> 00:55:45.880
<v Speaker 2>bands because the Internet wasn't invented yet, so if you

1122
00:55:45.920 --> 00:55:49.800
<v Speaker 2>wanted to read, that was all you had. Yeah, And

1123
00:55:50.119 --> 00:55:51.679
<v Speaker 2>you know, somebody said, well you got the title and

1124
00:55:51.760 --> 00:55:54.800
<v Speaker 2>then after that you got like, you know, drums, Dylan

1125
00:55:55.559 --> 00:56:00.960
<v Speaker 2>Carl guitar, Comma synth, programming, Richard Moraccus voice, and you're like,

1126
00:56:00.960 --> 00:56:04.079
<v Speaker 2>all right, yeah too, And so you could use like

1127
00:56:04.519 --> 00:56:08.039
<v Speaker 2>the musician is the file name, and then the instrument

1128
00:56:08.159 --> 00:56:10.800
<v Speaker 2>credits are the things you want to import from it

1129
00:56:10.960 --> 00:56:14.400
<v Speaker 2>HU and you're like that that would kind of work,

1130
00:56:15.239 --> 00:56:17.239
<v Speaker 2>and then you're like, but then how do you use

1131
00:56:17.320 --> 00:56:21.840
<v Speaker 2>that within the program to be like, so, you know,

1132
00:56:22.519 --> 00:56:26.519
<v Speaker 2>Richard's guitar taking a solo might be find the guitar

1133
00:56:26.639 --> 00:56:29.639
<v Speaker 2>function which was exported by the Richard module and pass

1134
00:56:29.840 --> 00:56:33.039
<v Speaker 2>a solo into it as an argument, and and you know,

1135
00:56:33.119 --> 00:56:35.159
<v Speaker 2>none of the stuff's impossible, but there's a point where

1136
00:56:35.199 --> 00:56:37.280
<v Speaker 2>it just starts to feel so convoluted.

1137
00:56:39.079 --> 00:56:41.239
<v Speaker 1>Well, you know, I was just about to say, you know,

1138
00:56:41.320 --> 00:56:43.440
<v Speaker 1>do you ever find yourself at three am after working

1139
00:56:43.519 --> 00:56:45.559
<v Speaker 1>on this for six hours just asking yourself what the

1140
00:56:45.719 --> 00:56:46.760
<v Speaker 1>hell am I doing?

1141
00:56:50.159 --> 00:56:53.840
<v Speaker 2>Actually the worst, the point where that kicks in the

1142
00:56:53.960 --> 00:56:57.000
<v Speaker 2>highest is when I've been doing you know, the presentation

1143
00:56:57.159 --> 00:57:00.800
<v Speaker 2>talking about esoteric languages and you know that kind of stuff,

1144
00:57:01.039 --> 00:57:03.519
<v Speaker 2>and it builds up to the big fizz buzz outro

1145
00:57:03.679 --> 00:57:06.480
<v Speaker 2>with the guitar and everything, and the audience is like,

1146
00:57:06.880 --> 00:57:10.239
<v Speaker 2>he's not really good to do? This is And it's

1147
00:57:10.280 --> 00:57:12.679
<v Speaker 2>a bit of my brain that is just going you

1148
00:57:12.760 --> 00:57:16.039
<v Speaker 2>are about to sing the word fizz buzz to an

1149
00:57:16.119 --> 00:57:20.079
<v Speaker 2>audience of eight hundred Java developers. What are you doing

1150
00:57:20.159 --> 00:57:22.360
<v Speaker 2>with your life? Like? How did it get to this?

1151
00:57:23.719 --> 00:57:24.280
<v Speaker 1>So cool?

1152
00:57:24.679 --> 00:57:26.840
<v Speaker 2>And the thing is it's the word fizz buzz. I

1153
00:57:26.960 --> 00:57:29.000
<v Speaker 2>was like, if it wasn't that word, like I would

1154
00:57:29.039 --> 00:57:31.760
<v Speaker 2>be cool with this. And so what we can do

1155
00:57:31.960 --> 00:57:34.760
<v Speaker 2>now with this ninja string thing? Is. So I'm just

1156
00:57:35.039 --> 00:57:37.679
<v Speaker 2>going to give you, like about thirty seconds of lyrics.

1157
00:57:38.400 --> 00:57:42.239
<v Speaker 2>So my dream is diamond nightmares, My suffering is the sea.

1158
00:57:42.800 --> 00:57:45.920
<v Speaker 2>My scream is hollow hatred. Your love is meaningless to me.

1159
00:57:46.719 --> 00:57:49.639
<v Speaker 2>Rock my dream like a razor blade. Smile, rock my

1160
00:57:49.800 --> 00:57:52.840
<v Speaker 2>dream with your love, your love, rock my scream like

1161
00:57:52.920 --> 00:57:56.639
<v Speaker 2>a switchblade. Missile, rock my scream with your love, your love,

1162
00:57:57.920 --> 00:58:01.079
<v Speaker 2>and you take that apart, and you is meaningless to me,

1163
00:58:01.280 --> 00:58:03.960
<v Speaker 2>so meaningless to me. It gives you one twenty two

1164
00:58:04.559 --> 00:58:07.400
<v Speaker 2>in ASCI, which is the letter Z. So rock my

1165
00:58:07.480 --> 00:58:09.960
<v Speaker 2>screen with your love. Your love puts z Z on

1166
00:58:10.000 --> 00:58:12.199
<v Speaker 2>the end of a stringer building, and so that that

1167
00:58:12.360 --> 00:58:14.960
<v Speaker 2>builds fiz Bus. With that you ever actually having to

1168
00:58:15.079 --> 00:58:17.880
<v Speaker 2>say it, it's great and that kind of that that

1169
00:58:18.039 --> 00:58:20.559
<v Speaker 2>solved the problem for me because it's like this is

1170
00:58:20.719 --> 00:58:24.320
<v Speaker 2>now plausible all the way down. Like you, you could

1171
00:58:24.360 --> 00:58:26.880
<v Speaker 2>perform fiz Bus to an audience who just thought that

1172
00:58:27.039 --> 00:58:29.400
<v Speaker 2>this was you know, like we're not talking Grammy when

1173
00:58:29.760 --> 00:58:32.000
<v Speaker 2>it maybe like the B side to a meatless record,

1174
00:58:32.280 --> 00:58:34.320
<v Speaker 2>But they'd be like, yeah, all right, that works.

1175
00:58:34.880 --> 00:58:39.360
<v Speaker 1>Maybe some Italian developer will create a language based in

1176
00:58:39.559 --> 00:58:45.199
<v Speaker 1>opera lyrics like Italian opera, you know, with with completely

1177
00:58:45.280 --> 00:58:46.480
<v Speaker 1>different language.

1178
00:58:47.360 --> 00:58:50.079
<v Speaker 2>So asking about the future of it. So you know,

1179
00:58:50.119 --> 00:58:51.760
<v Speaker 2>there's there's opera that shape, there's all kinds of things

1180
00:58:51.800 --> 00:58:53.440
<v Speaker 2>you can do with the grammar. But the question I

1181
00:58:53.480 --> 00:58:55.239
<v Speaker 2>get asked more than anything else, is is there a

1182
00:58:55.360 --> 00:59:00.440
<v Speaker 2>way that you could generate music from the source. Of

1183
00:59:00.519 --> 00:59:04.599
<v Speaker 2>course there is, and at that point that's really interesting

1184
00:59:04.679 --> 00:59:07.679
<v Speaker 2>because then you'd have a piece of writing which was

1185
00:59:07.760 --> 00:59:12.320
<v Speaker 2>simultaneously a set of lyrics and a compilable program and

1186
00:59:12.840 --> 00:59:15.840
<v Speaker 2>the definition of the melody or the chords or whatever.

1187
00:59:16.000 --> 00:59:18.360
<v Speaker 2>And so that's something and you.

1188
00:59:18.400 --> 00:59:20.719
<v Speaker 1>Know that'd be tricky to write. That'd be even harder

1189
00:59:20.760 --> 00:59:22.800
<v Speaker 1>to write than just lyrics to a song, because you

1190
00:59:22.920 --> 00:59:26.000
<v Speaker 1>have to make the lyrics fit a melody. So you

1191
00:59:26.079 --> 00:59:27.880
<v Speaker 1>have a pattern, you have a constraint, you have a

1192
00:59:27.960 --> 00:59:29.440
<v Speaker 1>pattern that you have to follow.

1193
00:59:29.559 --> 00:59:32.920
<v Speaker 2>You've introduced a third constraint to it because you know,

1194
00:59:33.000 --> 00:59:34.920
<v Speaker 2>something that I played around with is, well, we'll just

1195
00:59:35.000 --> 00:59:37.159
<v Speaker 2>take the text and like anytime we see a letter

1196
00:59:37.679 --> 00:59:40.599
<v Speaker 2>that is a note on the major scale, we'll hold

1197
00:59:40.679 --> 00:59:43.320
<v Speaker 2>that note for as many letters as it takes till

1198
00:59:43.360 --> 00:59:45.559
<v Speaker 2>we get to the next one. And that gives you

1199
00:59:45.679 --> 00:59:46.199
<v Speaker 2>a melody.

1200
00:59:46.280 --> 00:59:48.159
<v Speaker 1>But it's not a musically.

1201
00:59:49.320 --> 00:59:51.559
<v Speaker 2>Well, and you're like, well, if you if you wanted

1202
00:59:51.679 --> 00:59:54.360
<v Speaker 2>to be able to write the melody that went with

1203
00:59:54.440 --> 00:59:57.159
<v Speaker 2>the lyrics. So yeah, I have a lot of ideas

1204
00:59:57.239 --> 00:59:58.960
<v Speaker 2>on that one, but nothing yet that has kind of,

1205
00:59:59.199 --> 00:59:59.960
<v Speaker 2>you know, caught fire.

1206
01:00:00.159 --> 01:00:02.519
<v Speaker 1>So you could do melodies. I mean a melody is

1207
01:00:02.760 --> 01:00:05.400
<v Speaker 1>a note and a duration, right, I mean that's really

1208
01:00:05.480 --> 01:00:08.719
<v Speaker 1>all it is. But now in musical notation you can

1209
01:00:08.800 --> 01:00:13.400
<v Speaker 1>do chords, which is three notes with multiple durations or

1210
01:00:13.480 --> 01:00:17.400
<v Speaker 1>morm notes at the same time. So it gets very complicated,

1211
01:00:18.360 --> 01:00:18.679
<v Speaker 1>it does.

1212
01:00:19.599 --> 01:00:22.119
<v Speaker 2>And uh, and there is another idea that kind of

1213
01:00:22.199 --> 01:00:25.480
<v Speaker 2>emerges from all of this, which is, could you could

1214
01:00:25.519 --> 01:00:28.440
<v Speaker 2>you write a programming language that used sheet music instead

1215
01:00:28.440 --> 01:00:31.880
<v Speaker 2>of asking as its input? Could you actually create a

1216
01:00:32.000 --> 01:00:34.679
<v Speaker 2>turin complete compiler for musical notation?

1217
01:00:35.039 --> 01:00:37.199
<v Speaker 1>So then, oh my god, I'm not going to sleep tonight.

1218
01:00:38.800 --> 01:00:40.079
<v Speaker 1>Lyrics completely.

1219
01:00:40.199 --> 01:00:41.000
<v Speaker 2>You are insane.

1220
01:00:41.440 --> 01:00:45.639
<v Speaker 1>Friend, Good lord.

1221
01:00:46.480 --> 01:00:47.719
<v Speaker 2>I have a little thing in the back of my

1222
01:00:47.760 --> 01:00:49.440
<v Speaker 2>brain that just comes up with the stuff twenty for

1223
01:00:49.599 --> 01:00:51.400
<v Speaker 2>us seven days a week. Hey, what about this?

1224
01:00:51.639 --> 01:00:52.079
<v Speaker 1>What about that?

1225
01:00:52.280 --> 01:00:52.719
<v Speaker 2>You could do this?

1226
01:00:52.920 --> 01:00:57.519
<v Speaker 1>That's so exciting, Dylan. Thanks, thanks for thanks for you know,

1227
01:00:57.840 --> 01:00:59.840
<v Speaker 1>keeping us abreast of what's going on and where can

1228
01:00:59.880 --> 01:01:00.360
<v Speaker 1>we get.

1229
01:01:00.360 --> 01:01:03.119
<v Speaker 2>Rockstar code with Rockstar dot com.

1230
01:01:03.280 --> 01:01:03.719
<v Speaker 1>Perfect.

1231
01:01:04.079 --> 01:01:06.400
<v Speaker 2>You gonna check that out and by the time the

1232
01:01:06.440 --> 01:01:08.920
<v Speaker 2>show comes out, that will be the all singing, all

1233
01:01:09.039 --> 01:01:12.400
<v Speaker 2>Dancing dot eight But you don't care because it just works.

1234
01:01:13.079 --> 01:01:15.440
<v Speaker 2>The binaries will be up on GitHub, so if you

1235
01:01:15.480 --> 01:01:18.159
<v Speaker 2>want to run it locally, that's on Linux, mac Os

1236
01:01:18.239 --> 01:01:20.320
<v Speaker 2>and Windows, or you just run it in a browser.

1237
01:01:20.840 --> 01:01:23.039
<v Speaker 2>And the whole idea is it's out there in time

1238
01:01:23.079 --> 01:01:25.639
<v Speaker 2>anyone who wants to do adventive code and Rockstar thisea.

1239
01:01:25.760 --> 01:01:28.480
<v Speaker 2>You don't have to install note js. That's my Christmas

1240
01:01:28.599 --> 01:01:31.719
<v Speaker 2>gift beautiful to all of you lovely, lovely people out there.

1241
01:01:32.000 --> 01:01:34.760
<v Speaker 1>Son, it's always a pleasure to talk to you. Maybe

1242
01:01:34.760 --> 01:01:36.039
<v Speaker 1>we'll see you in one of these so much fun

1243
01:01:36.159 --> 01:01:37.400
<v Speaker 1>conferences somewhere.

1244
01:01:37.719 --> 01:01:39.480
<v Speaker 2>Thanks so much for having me on the show. Folks,

1245
01:01:39.559 --> 01:01:40.480
<v Speaker 2>It is always a pleasure.

1246
01:01:40.519 --> 01:01:43.559
<v Speaker 1>Slowly and we'll talk to you next time on dot

1247
01:01:43.679 --> 01:01:44.360
<v Speaker 1>net rocks.

1248
01:02:04.800 --> 01:02:07.320
<v Speaker 4>Dot net Rocks is brought to you by Franklin's Net

1249
01:02:07.639 --> 01:02:11.559
<v Speaker 4>and produced by Pop Studios, a full service audio, video

1250
01:02:11.639 --> 01:02:15.679
<v Speaker 4>and post production facility located physically in New London, Connecticut,

1251
01:02:15.960 --> 01:02:20.159
<v Speaker 4>and of course in the cloud online at pwop dot com.

1252
01:02:21.000 --> 01:02:23.039
<v Speaker 4>Visit our website at d O T N E t

1253
01:02:23.360 --> 01:02:27.320
<v Speaker 4>R O c k S dot com for RSS feeds, downloads,

1254
01:02:27.519 --> 01:02:31.159
<v Speaker 4>mobile apps, comments, and access to the full archives going

1255
01:02:31.239 --> 01:02:34.639
<v Speaker 4>back to show number one, recorded in September two thousand

1256
01:02:34.639 --> 01:02:34.880
<v Speaker 4>and two.

1257
01:02:35.519 --> 01:02:37.840
<v Speaker 1>And make sure you check out our sponsors. They keep

1258
01:02:37.960 --> 01:02:41.039
<v Speaker 1>us in business. Now go write some code. See you

1259
01:02:41.159 --> 01:02:41.559
<v Speaker 1>next time.

1260
01:02:42.480 --> 01:02:46.440
<v Speaker 2>You got javans and
