1
00:00:01,080 --> 00:00:03,000
Speaker 1: How'd you like to listen to dot net rocks with

2
00:00:03,040 --> 00:00:07,879
no ads? Easy? Become a patron for just five dollars

3
00:00:07,919 --> 00:00:10,800
a month. You get access to a private RSS feed

4
00:00:10,839 --> 00:00:14,240
where all the shows have no ads. Twenty dollars a month.

5
00:00:14,279 --> 00:00:16,879
We'll get you that and a special dot net Rocks

6
00:00:16,960 --> 00:00:21,000
patron mug. Sign up now at Patreon dot dot NetRocks

7
00:00:21,120 --> 00:00:36,640
dot com. Hey, guess what it's dot net rocks. I'm

8
00:00:36,679 --> 00:00:39,520
Carl Franklin, an amateur Campbell. Well, you didn't have to

9
00:00:39,520 --> 00:00:41,640
guess because you knew because you You pushed the button

10
00:00:41,640 --> 00:00:42,640
to listen, didn't you.

11
00:00:42,679 --> 00:00:43,159
Speaker 2: There you go.

12
00:00:43,399 --> 00:00:45,600
Speaker 3: Yeah, it's just like the old way we telephones. Right

13
00:00:45,600 --> 00:00:47,079
when foleophones is gonning aft to the wall and I

14
00:00:47,079 --> 00:00:48,399
called you, I didn't have to ask you where you

15
00:00:48,479 --> 00:00:51,679
were because you answered the phone you knew where it was.

16
00:00:52,520 --> 00:00:55,439
Speaker 1: Hey, you're home. That's usually what we would say. I'm

17
00:00:55,439 --> 00:01:02,640
glad I got you. Uh wow, comf coming up or

18
00:01:02,679 --> 00:01:06,040
maybe it's already gone by. I'm not sure. We'll take

19
00:01:06,079 --> 00:01:09,159
care of that later, but in the meantime, let's roll

20
00:01:09,159 --> 00:01:19,640
the music for a better no framework awesome? All right,

21
00:01:19,680 --> 00:01:20,040
what do you got?

22
00:01:20,120 --> 00:01:20,239
Speaker 2: Well?

23
00:01:20,280 --> 00:01:22,480
Speaker 1: I think both you guys would be interested in this.

24
00:01:22,480 --> 00:01:28,799
This is Unity Technologies has an mL agents repo. The

25
00:01:28,920 --> 00:01:32,879
Unity Machine Learning Agents Toolkit is an open source project

26
00:01:32,879 --> 00:01:36,799
that enables games and simulations to serve as environments for

27
00:01:36,920 --> 00:01:42,519
training intelligent agents using deep reinforcement learning and imitation learning.

28
00:01:42,959 --> 00:01:47,760
Speaker 3: Hmm interesting, Yeah, certainly it's all been on my radar

29
00:01:47,879 --> 00:01:49,480
because I have a bunch of friends in the gaming

30
00:01:49,480 --> 00:01:51,959
industry that a lot of the generative AI technologies are

31
00:01:51,959 --> 00:01:54,920
being evaluated to make games less expensive to make.

32
00:01:55,280 --> 00:01:58,680
Speaker 1: Ah okay for building games, not necessarily for having intelligent

33
00:01:58,719 --> 00:01:59,760
agents in them.

34
00:02:00,040 --> 00:02:02,840
Speaker 3: Not actually making the game play better, but like instead

35
00:02:02,879 --> 00:02:06,040
of having to voice act every single line and plan

36
00:02:06,159 --> 00:02:09,039
every single line of dialogue out the fact that you

37
00:02:09,080 --> 00:02:12,199
can generate a voice now and you can give it

38
00:02:12,280 --> 00:02:15,159
an area to talk about and it will literally, you know,

39
00:02:15,319 --> 00:02:18,800
just generate to you know, spoken word for you speaks

40
00:02:18,800 --> 00:02:22,080
to game experiences being better where you know, there's not

41
00:02:22,199 --> 00:02:25,639
a fixed path through all of the words anymore. They

42
00:02:25,639 --> 00:02:27,840
could say even more diverse things and you could go

43
00:02:28,080 --> 00:02:32,479
create far more words effectively, you know, imagine your behavior

44
00:02:32,479 --> 00:02:35,879
towards an NPC actually changes the way that NPC speaks

45
00:02:35,919 --> 00:02:38,240
to you, even if they communicate the same facts.

46
00:02:38,080 --> 00:02:42,639
Speaker 1: And the hallucinations add bonus entertainment in a fantasy world that.

47
00:02:42,599 --> 00:02:45,479
Speaker 3: Would be a feature in a game, not a feature

48
00:02:45,520 --> 00:02:49,199
in real life. But yes, exactly right. But tier one

49
00:02:49,319 --> 00:02:51,759
video games to the billion dollar games, of which is

50
00:02:51,800 --> 00:02:55,560
maybe ten a year, cost a couple hundred million to make,

51
00:02:56,520 --> 00:03:01,159
and so you can't make more. It's very high risk intolerance.

52
00:03:01,240 --> 00:03:04,080
So the idea that we'd reduce the cost of game creation,

53
00:03:04,520 --> 00:03:07,199
democracize some of this technology, it's pretty compelling.

54
00:03:07,280 --> 00:03:10,919
Speaker 1: Well, Richard, before we get into the message that you

55
00:03:10,919 --> 00:03:14,479
want to read, let's talk about what happened in nineteen

56
00:03:14,599 --> 00:03:16,479
twenty four twenty four.

57
00:03:16,560 --> 00:03:19,719
Speaker 2: This is Oh, you got any favorite highlights for nineteen

58
00:03:19,759 --> 00:03:20,240
twenty four?

59
00:03:20,439 --> 00:03:24,360
Speaker 1: Yeah, so this is episode nineteen twenty four, and Dylan

60
00:03:24,400 --> 00:03:27,840
you can chime in here too. As we're getting further

61
00:03:27,879 --> 00:03:29,919
and further up in history, I thought, you know, let's

62
00:03:29,960 --> 00:03:32,479
highlight some of the things that happened that year. Some

63
00:03:32,560 --> 00:03:34,879
of them may or may not be relevant to what's

64
00:03:34,919 --> 00:03:35,520
going on today.

65
00:03:37,520 --> 00:03:40,479
Speaker 2: In nineteen twenty three, I mentioned the beer hall pushed right.

66
00:03:40,360 --> 00:03:42,919
Speaker 1: That's right, So there are consequences for Adolf Hitler in

67
00:03:42,960 --> 00:03:43,840
twenty four and.

68
00:03:43,879 --> 00:03:46,800
Speaker 3: Twenty four is when his trial is and he's quote,

69
00:03:47,039 --> 00:03:49,680
you know, imprisoned for five years, but he's out in

70
00:03:49,800 --> 00:03:50,759
nine months.

71
00:03:51,120 --> 00:03:53,879
Speaker 1: Out in nine months. Yeah, that's right. Yeah, right's mind

72
00:03:54,000 --> 00:03:56,599
camp while he's at it. Yeah, so that must have

73
00:03:56,680 --> 00:03:59,759
really made him mad and that may have contributed to

74
00:03:59,840 --> 00:04:03,800
his whatever. Okay. So January twenty fifth, the first Winter

75
00:04:03,879 --> 00:04:09,560
Olympics nineteen twenty four Winter Olympics open in Shawnee, Chemnois

76
00:04:10,520 --> 00:04:13,759
in the French Alps. Sorry French people, I do not

77
00:04:13,879 --> 00:04:14,479
speak French.

78
00:04:14,599 --> 00:04:18,920
Speaker 2: Chemony. It's a tremendous apport, ah because billionaires use it

79
00:04:19,000 --> 00:04:20,959
to fly in ghostkiing for a day and then fly

80
00:04:21,000 --> 00:04:25,519
out again. And it's one of those strips that you

81
00:04:25,720 --> 00:04:27,560
kind of there's a suddin point where you kind of

82
00:04:27,600 --> 00:04:29,360
need to fall off the end and get up enough

83
00:04:29,439 --> 00:04:30,920
sp that you can pull up at the other side

84
00:04:30,920 --> 00:04:33,120
of that nice It is true the walk.

85
00:04:33,480 --> 00:04:37,120
Speaker 1: Yeah, and that was the voice of Dylan Beattie, who

86
00:04:37,199 --> 00:04:39,959
does interesting things with computer's code, comedy, music, and video,

87
00:04:40,040 --> 00:04:42,639
then travels all over the world and tells people about it. Hello, Okay,

88
00:04:42,680 --> 00:04:44,319
so I got his buy out out of the way.

89
00:04:45,040 --> 00:04:48,759
January twenty six, Petrograd, which is Saint Petersburg, is renamed

90
00:04:48,839 --> 00:04:52,879
Leningrad and it'll revert to Saint Petersburg in nineteen ninety one.

91
00:04:53,680 --> 00:04:57,839
February fifth, gmt A radio time signals broadcast for the

92
00:04:57,879 --> 00:05:01,240
first time from the Royal Greenwich observ Cool nod to

93
00:05:01,319 --> 00:05:04,720
Richard there, that's a good one, yeah. February fourteenth, the

94
00:05:04,800 --> 00:05:08,920
Computing Tabulating Recording Company CTR, based in the US state

95
00:05:08,920 --> 00:05:13,959
of New York, is renamed to IBM IBM. March twenty fourth,

96
00:05:14,040 --> 00:05:17,279
Jean Sibelius or Jean Sabelius conducts the world premiere of

97
00:05:17,360 --> 00:05:21,199
his symphony Number seven in Stockholm. March twenty fifth, the

98
00:05:21,240 --> 00:05:25,319
Second Hellenic Republic is proclaimed in Greece. April first is

99
00:05:25,360 --> 00:05:28,399
when Hitler was sentenced to five years in Landesburg prison

100
00:05:28,519 --> 00:05:33,959
for his participation in the Beer Hall. Butch April sixth

101
00:05:34,000 --> 00:05:37,800
Italian general election nineteen twenty four, Fascists win the elections

102
00:05:37,839 --> 00:05:43,000
in Italy with a two thirds majority. April seventeen, Metro

103
00:05:43,240 --> 00:05:46,439
Pictures Corporation, Goldwyn Pictures and Louis B. Mayer Productions are

104
00:05:46,439 --> 00:05:51,360
merged to become MGM. May thirtieth, Italian socialist leader Jacomo

105
00:05:51,560 --> 00:05:56,480
Mettier Mettioti, matt Tiati. I'm going with Mattiati speaks out

106
00:05:56,480 --> 00:05:59,319
against fascism. A few days later, he's kidnapped and murdered

107
00:05:59,360 --> 00:06:03,399
in Rome. September nineth through eleventh, the kahlhat and riots

108
00:06:03,399 --> 00:06:07,120
breakout in India. October tewod the Geneva Protocol is adopted

109
00:06:07,120 --> 00:06:09,680
by the League of Nations Assembly as a means to

110
00:06:09,759 --> 00:06:14,879
strengthen the League, but later fails to be ratified. November tenth,

111
00:06:14,920 --> 00:06:17,600
the trial one hundred and forty nine begins in Estonia,

112
00:06:17,680 --> 00:06:20,160
eventually resulting in the conviction of one hundred and twenty

113
00:06:20,199 --> 00:06:26,480
nine communists, including several members of the Reche cow. I

114
00:06:26,519 --> 00:06:28,000
don't know how to say that, but.

115
00:06:27,959 --> 00:06:29,639
Speaker 3: You're also talking about this is the time of the

116
00:06:29,680 --> 00:06:32,560
emergence of the Soviet Union, right, Yeah, that's right. Tendency

117
00:06:32,560 --> 00:06:33,600
of communism YEP.

118
00:06:34,360 --> 00:06:37,360
Speaker 1: December twenty in Germany Hainlf Hitler's release from the prison.

119
00:06:38,040 --> 00:06:42,439
December twenty fourth, Albania becomes republic. In December thirty, American

120
00:06:42,480 --> 00:06:47,680
astronomer Edwin Hubble announces that Andromeda, previously believed to be

121
00:06:47,720 --> 00:06:51,759
a nebula, is actually another galaxy, and that the Milky

122
00:06:51,800 --> 00:06:54,959
Way is only one of many such galaxies in the universe.

123
00:06:55,399 --> 00:06:56,560
Speaker 2: Sound that long ago, is it?

124
00:06:57,040 --> 00:06:57,319
Speaker 1: Yeah?

125
00:06:57,360 --> 00:07:01,199
Speaker 3: I would add one more four is actually the beginning

126
00:07:01,480 --> 00:07:03,720
of the civil war in China that will lead to

127
00:07:03,759 --> 00:07:07,160
the Chinese Communist Revolution. Wow, although they don't really They

128
00:07:07,160 --> 00:07:09,879
say the war started in twenty seven, but Kaichek is

129
00:07:09,920 --> 00:07:13,879
grabbing cities like stuff is up before Mao actually kicks

130
00:07:13,920 --> 00:07:18,439
off the march. It was an interesting year. Two ways

131
00:07:18,480 --> 00:07:18,839
about it.

132
00:07:18,959 --> 00:07:22,360
Speaker 2: Yeah, so you mentioned that is the IBM became IBM.

133
00:07:23,040 --> 00:07:27,360
You know, IBM has averaged four patents a day since then. Wow?

134
00:07:27,519 --> 00:07:30,800
They Yeah. If you average out the number of patents

135
00:07:30,800 --> 00:07:34,240
awarded to IBM engineers over the last century, it's something

136
00:07:34,279 --> 00:07:36,920
like one hundred and fifty hundred years, which is about

137
00:07:36,959 --> 00:07:40,879
four point one patents per day, sustained for one hundred years.

138
00:07:40,360 --> 00:07:44,759
Speaker 1: And in the last ten years they've all been fonts.

139
00:07:46,879 --> 00:07:48,759
Speaker 2: IBM has the largest gone to computer in the world

140
00:07:48,800 --> 00:07:51,120
the moment. It's called the IBM System two.

141
00:07:52,040 --> 00:07:54,600
Speaker 3: There's only one of them, and it's the largest cryo

142
00:07:54,720 --> 00:07:55,639
cooler on the planet.

143
00:07:55,839 --> 00:07:56,120
Speaker 2: Nice.

144
00:07:56,240 --> 00:07:58,399
Speaker 1: Nothing beats you in a blab from the Jetsons, though,

145
00:08:03,879 --> 00:08:08,199
lab Shall I read a comment? Yes? Please? Who's talking

146
00:08:08,199 --> 00:08:08,639
to us? Switch?

147
00:08:08,720 --> 00:08:11,040
Speaker 3: I'll grab a comment. I've jumped into the wayback machine

148
00:08:11,079 --> 00:08:13,680
here and grabbed a comment off the show twelve o three.

149
00:08:14,800 --> 00:08:17,959
So that's from twenty fifteen when we talked about programming

150
00:08:18,079 --> 00:08:20,519
in Go Wow, because I know we're going to have

151
00:08:20,560 --> 00:08:24,680
some conversations in a language with Mike ben Sickel generated

152
00:08:24,680 --> 00:08:27,079
a ton of comments lots of people. It should you know,

153
00:08:27,800 --> 00:08:30,759
back in twenty fifteen, polyglot was already hit. But you

154
00:08:30,800 --> 00:08:33,919
know it's now it's just mainstream. And Aaron has this

155
00:08:33,960 --> 00:08:35,200
great comment, admittedly.

156
00:08:34,799 --> 00:08:35,480
Speaker 1: From nine years ago.

157
00:08:35,480 --> 00:08:39,000
Speaker 3: He said, being passively familiar with many languages and toolkits

158
00:08:39,039 --> 00:08:42,120
provide some value. Commonalities start to jump out at you,

159
00:08:42,159 --> 00:08:44,360
and you can start to develop an understanding of concepts

160
00:08:44,600 --> 00:08:49,200
that transcend a specific language. That said, actually, quote getting

161
00:08:49,240 --> 00:08:51,320
things done does demand a good amount of attention to

162
00:08:51,320 --> 00:08:54,039
a single framework long enough to become effective in it.

163
00:08:54,679 --> 00:08:57,000
The most effective way I know to learn a language

164
00:08:57,039 --> 00:09:00,159
more deeply is to switch from I'm learning X to

165
00:09:00,440 --> 00:09:04,840
I'm trying to get Z done. Go make something right right.

166
00:09:05,039 --> 00:09:07,399
In other words, set out to solve a specific problem

167
00:09:07,440 --> 00:09:10,120
right a small program, contribute to an open source solution.

168
00:09:10,840 --> 00:09:13,519
The quote fear of missing out that people often have

169
00:09:13,600 --> 00:09:16,600
jumping from language language is much suppressed by trying to

170
00:09:16,639 --> 00:09:19,120
get something specific done, especially if you go contribute to

171
00:09:19,159 --> 00:09:20,080
an existing project.

172
00:09:20,159 --> 00:09:21,639
Speaker 1: That's how I taught myself.

173
00:09:22,080 --> 00:09:24,720
Speaker 3: Yeah, yeah, for sure, make something. But I also like

174
00:09:24,759 --> 00:09:28,159
this contribute to open source because if you can get

175
00:09:28,159 --> 00:09:32,080
through a pr in a new language from somebody else

176
00:09:32,120 --> 00:09:35,799
who uses the language meaningfully, like, that's a confirmation you've

177
00:09:35,879 --> 00:09:38,759
learned some things, you're doing it well enough to make

178
00:09:38,799 --> 00:09:39,519
a contribution.

179
00:09:39,600 --> 00:09:42,639
Speaker 1: I always try to make those projects just out of

180
00:09:42,720 --> 00:09:45,440
what I think I can do, just outside the box

181
00:09:45,480 --> 00:09:47,919
of what I think my ability is.

182
00:09:48,159 --> 00:09:52,639
Speaker 2: There's an interesting parallel, like, as I'm sure call, you've

183
00:09:52,639 --> 00:09:54,200
also had folks come up to you like, how do

184
00:09:54,200 --> 00:09:56,080
you learn to play the guitar? I want to learn

185
00:09:56,080 --> 00:09:58,320
a play an instrument. It's like you come like learning

186
00:09:58,320 --> 00:10:00,320
a plan instrument. You start now and you I'll still

187
00:10:00,320 --> 00:10:02,240
be learning when you die. Yeah, but you could learn

188
00:10:02,320 --> 00:10:04,480
to play a song. What's your favorite song? Like like

189
00:10:04,519 --> 00:10:06,480
pick us? Okay, maybe not that one, Maybe pick something

190
00:10:06,480 --> 00:10:08,559
a little easier, a little simpler, but go hook on

191
00:10:08,600 --> 00:10:11,200
the water for a reason, right, And like by the

192
00:10:11,240 --> 00:10:12,440
end of the week, you'll be able to play Smoke

193
00:10:12,480 --> 00:10:14,919
on the Water. Congratulations, Now you're a guitar player. Just

194
00:10:14,919 --> 00:10:17,399
one with a limited repertoire. Yeah, and then you'll learn

195
00:10:17,399 --> 00:10:19,840
another song, another song, another song, and eventually the pieces

196
00:10:19,879 --> 00:10:21,879
start to click and the theory starts to make sense.

197
00:10:22,080 --> 00:10:24,200
Speaker 1: My favorite interaction is and I'm playing the gig and

198
00:10:24,240 --> 00:10:27,080
somebody comes up and says, hey, wow, how long have

199
00:10:27,120 --> 00:10:34,519
you been playing it? Him about forty minutes?

200
00:10:35,919 --> 00:10:38,120
Speaker 3: So, Aaron, thank you so much for your comment, and

201
00:10:38,159 --> 00:10:39,919
a copy of music Koba is on its way to you.

202
00:10:39,960 --> 00:10:41,720
And if you'd like a copy of music Koby, write

203
00:10:41,720 --> 00:10:43,759
a comment on the website at dot net rocks dot

204
00:10:43,799 --> 00:10:46,120
com or on the facebooks. You publish every show there,

205
00:10:46,120 --> 00:10:47,519
and you be comment there and ever reading the show.

206
00:10:47,519 --> 00:10:49,039
We'll send you a copy of music go by.

207
00:10:49,200 --> 00:10:51,919
Speaker 1: And you can follow us on ex Twitter if you like.

208
00:10:51,960 --> 00:10:54,000
We're still there and we've been there for years. But

209
00:10:54,480 --> 00:10:56,720
the cool kids are now hanging out at mastadon. I'm

210
00:10:56,799 --> 00:10:59,399
Carl Franklin at tech hub dot Social and.

211
00:10:59,360 --> 00:11:02,960
Speaker 2: I'm Ridge Campbell the Social. But the really cool kids

212
00:11:03,000 --> 00:11:04,840
are all on Blue Sky now because that's the latest

213
00:11:04,840 --> 00:11:08,440
wave of migration. Was seeing. Yeah, this has been pretty

214
00:11:08,480 --> 00:11:09,159
good right now.

215
00:11:09,480 --> 00:11:11,279
Speaker 3: I got a whole bunch of followers there all of

216
00:11:11,320 --> 00:11:14,000
a sudden, Yeah, yeah, Blue Sky is cool.

217
00:11:14,039 --> 00:11:16,480
Speaker 1: It's very much well, the web interface is very much

218
00:11:16,519 --> 00:11:18,919
like Twitter. Yeah, and that's the kind of what.

219
00:11:19,120 --> 00:11:22,000
Speaker 2: Is Jack Dorsey after all. The big thing that's happened

220
00:11:22,039 --> 00:11:25,480
recently is that they haven't thing called starter packs, so

221
00:11:25,600 --> 00:11:27,600
you can go on and this I think is just

222
00:11:27,639 --> 00:11:30,039
a great feature. Like if you're organizing a conference and

223
00:11:30,080 --> 00:11:32,559
all your speakers are on Blue Sky, you can give

224
00:11:32,600 --> 00:11:34,639
people a starter pack. You like to click one button

225
00:11:34,679 --> 00:11:36,679
and you're going to follow everyone who's speaking, right, that's

226
00:11:36,679 --> 00:11:38,519
pretty good. And so a couple of folks started putting

227
00:11:38,559 --> 00:11:40,799
together like this is the AI starter pack, this is

228
00:11:40,919 --> 00:11:43,600
the you know, three D gaming starter pack. This is

229
00:11:44,240 --> 00:11:46,519
and so you're like, where will all these followers come from?

230
00:11:46,600 --> 00:11:48,720
And then you're like, oh, oh, I'm in a starter pack?

231
00:11:48,720 --> 00:11:51,120
All right? Yeah, and you know it's I was talking

232
00:11:51,120 --> 00:11:53,000
with Rendle about it earlier. It kind of feels like

233
00:11:53,080 --> 00:11:55,279
Blue Sky has got a little better, and the kind

234
00:11:55,279 --> 00:11:56,960
of gets it's a little worse and then better and

235
00:11:56,960 --> 00:11:58,799
then worse, and it's like waves coming up the beach,

236
00:11:59,120 --> 00:12:02,200
but the tide is definitely coming up, and it's getting

237
00:12:02,399 --> 00:12:04,600
closer and closer to hitting what feels like a sort

238
00:12:04,600 --> 00:12:05,799
of critical mass.

239
00:12:06,159 --> 00:12:11,240
Speaker 1: Yeah, yeah, I have my Blue Sky's social account. I

240
00:12:11,320 --> 00:12:13,519
have one hundred and ninety five followers, so not a

241
00:12:13,519 --> 00:12:16,399
whole bunch, but I do post there. I'm at Carl

242
00:12:16,399 --> 00:12:20,759
Franklin dot b sky dot social in case anybody cares.

243
00:12:20,919 --> 00:12:22,679
Speaker 2: So the other thing I really like about the way

244
00:12:22,679 --> 00:12:24,759
Blue Sky is set up is that your handles your domain,

245
00:12:25,360 --> 00:12:26,799
so or if you want to set it up, it

246
00:12:26,840 --> 00:12:29,759
can be. And so if you're you know, I'm dylanbet

247
00:12:29,840 --> 00:12:32,080
dot net, because I'm dylanbet dot net and I have

248
00:12:32,120 --> 00:12:34,000
the DNS and I control the domain, so that's how

249
00:12:34,039 --> 00:12:35,559
you know it's me. So none of those kind of

250
00:12:35,679 --> 00:12:39,000
blue tick verification, right, and you know, like the sort

251
00:12:39,000 --> 00:12:42,480
of big newspapers. If you've got at Washingtonpost dot com,

252
00:12:42,519 --> 00:12:45,200
then that's it. You're the Washington Post. You don't need

253
00:12:45,240 --> 00:12:48,399
blue check marks and stuff. And you can because if

254
00:12:48,440 --> 00:12:50,639
you control the DNS, you can sort of sub delegate it,

255
00:12:50,759 --> 00:12:52,919
so you could have like, you know, Richard dot dot

256
00:12:52,960 --> 00:12:55,320
net rocks and Carl dot dot net rocks, and the

257
00:12:55,360 --> 00:12:57,559
whole mechanism filters down. I'm a big fan of anything

258
00:12:57,559 --> 00:13:00,600
that uses DNS in interesting ways because it's such a

259
00:13:00,639 --> 00:13:03,399
flexible and powerful system that I think has really stood

260
00:13:03,440 --> 00:13:04,080
the test of time.

261
00:13:04,159 --> 00:13:06,600
Speaker 1: So well, we're also making it sound like mere mortals

262
00:13:06,639 --> 00:13:08,440
won't be able to use it, but that's not true.

263
00:13:08,440 --> 00:13:09,600
It's very easy, isn't it.

264
00:13:09,679 --> 00:13:12,519
Speaker 2: Yeah, Yeah, it's that Lenark. If you just want to

265
00:13:12,519 --> 00:13:13,960
sign up, you just sign up and hey, now you're

266
00:13:13,960 --> 00:13:16,360
reading and writing and you don't need like mast it on.

267
00:13:16,960 --> 00:13:18,759
You know. I love what they tried to do with it,

268
00:13:18,960 --> 00:13:21,440
but it feels like Linux. It feels like the people

269
00:13:21,440 --> 00:13:23,440
who get it don't see the problem, and the people

270
00:13:23,440 --> 00:13:25,080
who don't get it, I'm never going to get it.

271
00:13:25,159 --> 00:13:29,279
Speaker 3: Are you saying you don't like Linux and are the majority?

272
00:13:30,440 --> 00:13:34,679
Speaker 2: Linux is a wonderful cloud server operating system and I

273
00:13:34,759 --> 00:13:37,679
will never use it to edit video? Put it that way.

274
00:13:38,080 --> 00:13:41,600
Speaker 1: Ah, good right, Okay, got concern there for a minute.

275
00:13:41,799 --> 00:13:43,840
All right, dyl we're here to talk about to catch

276
00:13:43,919 --> 00:13:47,679
up with you first of all, and talk about some

277
00:13:47,759 --> 00:13:50,279
new things that are happening in your language, rock star.

278
00:13:50,440 --> 00:13:53,200
Why don't you, yeah fill us in on how that

279
00:13:53,320 --> 00:13:55,600
came to be and bring us back a little bit.

280
00:13:55,639 --> 00:13:57,200
Speaker 2: So well, I was trying to figure out what it was.

281
00:13:57,200 --> 00:13:58,799
I can't remember, but I was on the show a

282
00:13:58,799 --> 00:14:03,440
few years back talking about Rockstar, which is a tweet

283
00:14:03,519 --> 00:14:06,200
that turned into a spec that turned into a so

284
00:14:06,320 --> 00:14:12,200
the joke tweet it was, yeah, it's a joke, prank literally, Yeah.

285
00:14:13,720 --> 00:14:16,159
It was a tweet from I think it was Pulster Vell,

286
00:14:16,399 --> 00:14:18,440
the Octopus deploy guy, just saying, hey, you're had a

287
00:14:18,440 --> 00:14:21,440
confused recruiter. Someone should make a language called Rockstar.

288
00:14:21,320 --> 00:14:23,799
Speaker 1: Because they always ask for rock Star developers.

289
00:14:24,240 --> 00:14:26,200
Speaker 2: Yeah, and there was this whole trope of we need

290
00:14:26,200 --> 00:14:29,279
to hire Rockstar developers and we're looking for and you know,

291
00:14:29,679 --> 00:14:31,279
and one of the nice things is that that has

292
00:14:31,399 --> 00:14:33,960
that has gone down a little bit because it and

293
00:14:34,000 --> 00:14:38,720
I think, yeah, yes to you, well, you know me

294
00:14:38,799 --> 00:14:40,759
and all of the other people who have leaned in

295
00:14:40,840 --> 00:14:43,440
on the joke and kind of got with it. And

296
00:14:43,840 --> 00:14:48,039
so this it started out as a parody specification, just

297
00:14:48,080 --> 00:14:49,840
a kind of you know, tongue in cheek piece of

298
00:14:49,840 --> 00:14:53,360
technical writing about like you know, it was one markdown

299
00:14:53,399 --> 00:14:56,759
file on a GitHub po And what I've done is

300
00:14:56,799 --> 00:14:59,960
I tried to take as many cliches from rock and metal,

301
00:15:00,159 --> 00:15:04,120
heavy metal, soft rock and yeah, and see, you know,

302
00:15:04,279 --> 00:15:08,080
is there enough formulaic consistency that you can derive a

303
00:15:08,120 --> 00:15:12,120
grammar from it? And it got it kind of got

304
00:15:12,159 --> 00:15:17,799
too far, too fast for me to give up. Hilarious,

305
00:15:18,360 --> 00:15:20,320
I said to folks before you know that. It was

306
00:15:20,399 --> 00:15:24,559
the three factors behind taking the joke too far. I

307
00:15:24,600 --> 00:15:26,600
had Internet, I had alcohol, and there was no one

308
00:15:26,600 --> 00:15:31,320
that stop it. I was I was meeting friends in

309
00:15:31,360 --> 00:15:33,840
a bar and they were like, I'm like, I wonder

310
00:15:33,879 --> 00:15:39,399
if you could and you know, to stop you. Yeah,

311
00:15:39,679 --> 00:15:42,200
you'd be amazed how much of the fun side of

312
00:15:42,240 --> 00:15:47,039
the web is attributable to those three fures. And so this,

313
00:15:47,320 --> 00:15:49,559
you know, it turned into like a parody spec with

314
00:15:50,919 --> 00:15:53,159
you know, things like you want to write a function,

315
00:15:53,759 --> 00:15:56,080
like you know, most languages, you have the function declaration

316
00:15:56,159 --> 00:15:58,200
and the return type, and then you have some brackets

317
00:15:58,240 --> 00:16:01,320
around the parameter types. And so it's like, well then

318
00:16:01,360 --> 00:16:04,000
you say, well, this function like modulus takes a number

319
00:16:04,039 --> 00:16:06,440
and a divisor, and you're like, all right, well and

320
00:16:06,519 --> 00:16:09,679
we'll use takes a this and that. That's function syntex.

321
00:16:10,120 --> 00:16:14,960
So my function takes first argument and second argument and

322
00:16:15,320 --> 00:16:17,000
you know all kind of thing like variable names with

323
00:16:17,039 --> 00:16:18,919
spaces in them, which is easy to do when you're

324
00:16:18,919 --> 00:16:20,840
designing a language in a bar as a joke, right,

325
00:16:21,240 --> 00:16:24,039
and oh well, we're going to have you know, my variable,

326
00:16:24,159 --> 00:16:27,840
your variable the variable. And you know that the idea

327
00:16:27,919 --> 00:16:31,519
that came from from Crockford, from Douglas Crockford talking about

328
00:16:31,519 --> 00:16:34,639
the whole people arguing about pascal case, camel case, kebab case,

329
00:16:34,639 --> 00:16:37,399
snake case change, and he's like, we want spaces. We

330
00:16:37,559 --> 00:16:40,320
all want the same thing. These are stupid arguments. So

331
00:16:40,559 --> 00:16:44,279
I'm like, he's absolutely right. You know, we want to

332
00:16:44,320 --> 00:16:46,840
be able to have a variable called, you know, customer

333
00:16:46,919 --> 00:16:49,840
account category because that's what it is. And if you're

334
00:16:49,879 --> 00:16:53,759
writing documentation, you don't use pascal camel case and and

335
00:16:54,159 --> 00:16:56,000
so you know, I came up with this this spec

336
00:16:56,039 --> 00:16:58,480
which had kind of just enough structure to write a

337
00:16:58,639 --> 00:17:03,519
joke fizz buzz so you do rockstar interviews, And then

338
00:17:03,960 --> 00:17:05,640
I stuck it on the internet and I went to bed,

339
00:17:05,880 --> 00:17:06,599
and do.

340
00:17:06,640 --> 00:17:09,119
Speaker 1: You remember any of that? Because it's really a poem,

341
00:17:09,240 --> 00:17:09,559
isn't it.

342
00:17:10,160 --> 00:17:14,519
Speaker 2: So desire is a love struck lady killer is how

343
00:17:14,880 --> 00:17:21,400
you initialize a variable to one hundred Because one of

344
00:17:21,440 --> 00:17:23,640
the ideas I had very early on is you want

345
00:17:23,640 --> 00:17:26,079
to be able to write numbers by using the lengths

346
00:17:26,119 --> 00:17:30,079
of words, right, which is you know, I love anything

347
00:17:30,200 --> 00:17:32,559
that has two different meanings depending how you look at it.

348
00:17:32,720 --> 00:17:35,720
I love you know, kind of optical illusions in art

349
00:17:35,799 --> 00:17:37,480
and that kind of thing. And I thought, well, if

350
00:17:37,519 --> 00:17:40,599
you take the length of the word, that's a decimal digit.

351
00:17:40,759 --> 00:17:43,079
So love struck is a ten letter word, so that's

352
00:17:43,119 --> 00:17:45,400
a zero, and lady killer is a ten letter word,

353
00:17:45,480 --> 00:17:48,119
so that's a zero. So a love struck lady killer

354
00:17:48,240 --> 00:17:52,559
is one zero zero, so that's one hundred. And of

355
00:17:52,640 --> 00:17:54,279
course that means you can pick any words you want,

356
00:17:54,480 --> 00:17:59,079
so you can actually write code that rhymes and and

357
00:18:01,039 --> 00:18:03,359
so you kind of throw these ideas together. And then

358
00:18:03,440 --> 00:18:05,640
what happened next is that the Internet found it and

359
00:18:05,720 --> 00:18:09,519
they liked it, and people started filing issues on the

360
00:18:09,559 --> 00:18:13,119
get repo with the spec because and some of them

361
00:18:13,160 --> 00:18:15,240
were just jokes like, hey, the number system should go

362
00:18:15,319 --> 00:18:18,160
up to eleven, like happen It's like hah, yeah, no,

363
00:18:18,400 --> 00:18:19,920
but yeah, I get the joke, but no, we're not

364
00:18:20,079 --> 00:18:23,519
right that, And some of them were genuinely people saying, hey,

365
00:18:23,599 --> 00:18:26,400
well what should happen here? I like, there's undefined behavior,

366
00:18:26,440 --> 00:18:29,039
and the specification. I'm like, of course, there is a joke,

367
00:18:29,640 --> 00:18:33,480
why do you care? And people implemented it. There are

368
00:18:33,599 --> 00:18:36,759
a couple of people built Rockstar interpreters, someone built a

369
00:18:36,839 --> 00:18:41,920
Scarlar interpreter, someone built a rock Star Python transpiler, and

370
00:18:42,119 --> 00:18:44,440
all this is within like a week of this this

371
00:18:44,559 --> 00:18:45,640
first draft coming out.

372
00:18:46,160 --> 00:18:51,720
Speaker 3: And so suddenly you've got an obligation because yes, you know,

373
00:18:53,119 --> 00:18:55,079
not enough alcohol, not enough.

374
00:18:56,359 --> 00:18:58,599
Speaker 1: If you had a little more alcohol, then it would

375
00:18:58,640 --> 00:19:00,359
have been more obvious that it was a joke.

376
00:19:01,000 --> 00:19:03,720
Speaker 2: It was in Sydney, Australia, and they they cut you

377
00:19:03,839 --> 00:19:05,640
off there if they think you've had too much. So

378
00:19:05,720 --> 00:19:08,839
they're almost incubating the conditions for these kind of wonderful,

379
00:19:08,960 --> 00:19:10,119
terrible things to happen, you.

380
00:19:10,160 --> 00:19:12,519
Speaker 1: Know, So we can blame that bar wherever it was,

381
00:19:12,680 --> 00:19:16,640
or that hotel bar, probably the Baxter. Yeah, therefore, now

382
00:19:16,720 --> 00:19:19,759
the Baxter was later in the evening. I definitely remember

383
00:19:19,839 --> 00:19:23,240
that that the Evening progressed to the Baxter. If you've

384
00:19:23,279 --> 00:19:26,119
never been to Sydney, Australia, folks, the Baxter in is

385
00:19:26,200 --> 00:19:29,119
this wonderful whiskey bar. And the first time someone takes

386
00:19:29,160 --> 00:19:31,200
you there, they you will think they are taking you there.

387
00:19:31,119 --> 00:19:33,079
Speaker 2: To kill you and dispose of you. You're going down

388
00:19:33,119 --> 00:19:36,039
an all, down an alley, down a flight of stairs,

389
00:19:36,200 --> 00:19:39,039
and you bang on an iron door and then behind

390
00:19:39,039 --> 00:19:41,359
it there is this little speakeasy. It's a one. Wow,

391
00:19:41,480 --> 00:19:43,240
it's about one of the best collustions of whiskey on

392
00:19:43,279 --> 00:19:47,039
the planet. Yeah, it is. It's it's phenomenal. And so

393
00:19:47,119 --> 00:19:49,440
and you know, this kind of became a recurring theme

394
00:19:49,519 --> 00:19:52,160
of like, oh wow, if I'd known people were going

395
00:19:52,200 --> 00:19:54,880
to do that, that I would have I would have.

396
00:19:55,920 --> 00:19:58,599
And so that there's there's about a week of you know,

397
00:19:58,720 --> 00:20:00,200
a lot of it to activity, and then and it

398
00:20:00,319 --> 00:20:02,319
dies away like it made hack and use, it made Reddit,

399
00:20:02,759 --> 00:20:05,200
it got write ups in a like Boing boying and things,

400
00:20:06,039 --> 00:20:07,519
and then it kind of goes away and then it

401
00:20:07,880 --> 00:20:09,880
makes read it again a couple of months later, and

402
00:20:09,920 --> 00:20:12,599
there's another influx of activity, and then it kind of

403
00:20:12,680 --> 00:20:17,440
dies away. And then Carnegie Mellon University used it in

404
00:20:17,599 --> 00:20:19,920
there Capture the Flag competition.

405
00:20:19,680 --> 00:20:21,160
Speaker 1: Right, I remember this story.

406
00:20:21,319 --> 00:20:24,599
Speaker 2: Oh no, and that had like that that was in

407
00:20:24,720 --> 00:20:28,079
twenty twenty, and that had like thirty nine thousand people.

408
00:20:28,759 --> 00:20:30,799
And of course every time it happens, there's a bunch

409
00:20:30,880 --> 00:20:33,599
of you know, mostly sort of younger developers, because a

410
00:20:33,640 --> 00:20:35,799
lot of this stuff is sort of undergraduate fresh air

411
00:20:35,880 --> 00:20:38,200
level going, hey, how does Rockstar work? How does this work?

412
00:20:38,200 --> 00:20:40,079
How does that work? And there's a voice in the

413
00:20:40,119 --> 00:20:42,680
back of my head going, Carnegie Mellon was looking at

414
00:20:42,759 --> 00:20:47,400
my joke. Oh yeah, you know, and so it kind

415
00:20:47,440 --> 00:20:51,279
of it never it's never been big enough to be important,

416
00:20:51,400 --> 00:20:54,599
but it's also never gone away. And there's this little

417
00:20:54,880 --> 00:20:57,759
community of people out there on the web who clearly

418
00:20:57,960 --> 00:21:01,319
they really enjoy playing with it, and that one of

419
00:21:01,480 --> 00:21:03,880
the things that really blew my mind is there is

420
00:21:04,000 --> 00:21:07,000
a you know, a double digit number of people out

421
00:21:07,039 --> 00:21:09,039
there in the world right now who Rockstar is the

422
00:21:09,160 --> 00:21:11,960
only programming language they have ever learnt. That is insane

423
00:21:12,839 --> 00:21:16,519
because it has no baggage, it doesn't have any of

424
00:21:16,680 --> 00:21:19,119
the kind of technical It's like you type it into

425
00:21:19,200 --> 00:21:21,160
a web page and you click go and if it works,

426
00:21:21,400 --> 00:21:25,160
it works, and like you know, and this is a pattern,

427
00:21:25,240 --> 00:21:28,279
you know, the same like Python has online interpreters, you

428
00:21:28,359 --> 00:21:30,440
know dot net. They've been working really hard to get

429
00:21:30,559 --> 00:21:33,319
rid of all that boiler plate, which scares people who

430
00:21:33,359 --> 00:21:34,200
don't know what they're looking at it.

431
00:21:34,240 --> 00:21:36,319
Speaker 1: But you're not going to have academics breathing down your

432
00:21:36,400 --> 00:21:38,960
next saying no, that is the wrong way to write

433
00:21:39,359 --> 00:21:39,839
rock Star.

434
00:21:40,079 --> 00:21:42,440
Speaker 2: Well it's you know, one of the things that we'll

435
00:21:42,480 --> 00:21:45,759
talk about in the show is I stopped asking kind

436
00:21:45,799 --> 00:21:48,559
of you know, language experts for help because a lot

437
00:21:48,599 --> 00:21:49,440
of them just don't.

438
00:21:49,279 --> 00:21:50,200
Speaker 1: Get the chat right.

439
00:21:50,279 --> 00:21:52,160
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
you don't understand it has to be lyrics. If it's

441
00:21:54,319 --> 00:21:57,079
not lyrics, and they're like, well, you just use parentheses.

442
00:21:57,160 --> 00:21:59,920
I'm like saying parentheses and they're like, well, why would

443
00:21:59,920 --> 00:22:03,160
you sing a language. I'm like, the choke the job,

444
00:22:04,559 --> 00:22:04,720
you know.

445
00:22:08,039 --> 00:22:11,960
Speaker 1: And I remember you actually performed a rock Star program

446
00:22:12,880 --> 00:22:15,079
with your band at somewhere.

447
00:22:15,640 --> 00:22:20,240
Speaker 2: Yeah, so so so fizz buzz in in rock Star

448
00:22:20,720 --> 00:22:23,279
became the sort of canonical touch point. And I did

449
00:22:23,319 --> 00:22:25,240
that at the end of a talk I did at

450
00:22:25,359 --> 00:22:29,079
NBC London in twenty twenty, right before the lockdown started,

451
00:22:30,000 --> 00:22:33,000
and that talk got like millions of you Tube and

452
00:22:33,279 --> 00:22:35,079
you know, and Covid can take a lot of the

453
00:22:35,119 --> 00:22:37,480
credit for that because a lot of people were stuck

454
00:22:37,480 --> 00:22:40,200
at home with nothing to do. But clearly it's kind

455
00:22:40,240 --> 00:22:42,240
of struck a chord and people like, we like this,

456
00:22:42,400 --> 00:22:44,000
and they were sending it around and you know, I

457
00:22:44,240 --> 00:22:46,200
got I got a bunch of speaking gigs off from

458
00:22:46,200 --> 00:22:47,880
people who just seen that one video. They're like, we

459
00:22:47,960 --> 00:22:49,920
need to book this guy to come and do our conference.

460
00:22:50,799 --> 00:22:51,880
And of course a lot of one like you got

461
00:22:51,960 --> 00:22:53,640
to bring the guitar, you do the rock Star bit

462
00:22:53,960 --> 00:22:57,440
and so yeah, so that kind of and it just,

463
00:22:57,920 --> 00:23:00,240
you know, sort of bubbled along. Now, one of the

464
00:23:00,319 --> 00:23:05,319
things that always bothered me was the implementations. You know,

465
00:23:05,400 --> 00:23:07,400
with all due respect to the people who did them,

466
00:23:07,440 --> 00:23:09,839
it's a phenomenal piece of you know engineering to build

467
00:23:09,880 --> 00:23:12,759
this interpreter for an esoteric language in like forty eight hours.

468
00:23:13,799 --> 00:23:15,799
But the people who are curious are not the same

469
00:23:15,839 --> 00:23:18,480
people as the people who know how to runs color right,

470
00:23:18,720 --> 00:23:20,960
And I care about the people who are curious because

471
00:23:20,960 --> 00:23:24,000
I think curiosity is you know, wonderful quality that should

472
00:23:24,000 --> 00:23:27,759
be encouraged and nurtured. And so started twenty twenty, I

473
00:23:28,079 --> 00:23:30,720
sat down and built a Rockstar interpreter in JavaScript so

474
00:23:30,720 --> 00:23:33,920
I could run it in a browser. Because I decided

475
00:23:33,960 --> 00:23:35,559
early on, i'd I want to do this on you know,

476
00:23:35,640 --> 00:23:37,759
a zero or Google Cloud, because I don't ever want

477
00:23:37,839 --> 00:23:39,960
to wake up to a five thousand dollars bill. You

478
00:23:40,000 --> 00:23:40,680
don't need a bill.

479
00:23:40,920 --> 00:23:42,000
Speaker 1: Yeah, yeah, exactly.

480
00:23:42,319 --> 00:23:45,920
Speaker 2: Yeah, because Rockstar made hack and News and everyone jumped

481
00:23:45,960 --> 00:23:48,359
on it, or because you know, I there's an infinite

482
00:23:48,480 --> 00:23:51,039
loop somewhere that I was paying every time it ticks,

483
00:23:52,200 --> 00:23:53,960
and so it had to be client side. There's a

484
00:23:54,039 --> 00:23:56,519
lyric for an infinite loop in there somewhere, you knows,

485
00:23:59,000 --> 00:24:01,880
oh easily. So one of the things that I did

486
00:24:01,920 --> 00:24:05,480
in Rockstar Version one is a blank line ended a block.

487
00:24:05,599 --> 00:24:07,160
So if you had like a loop or a function

488
00:24:07,400 --> 00:24:10,119
or a you know, an if statement, a blank line

489
00:24:10,200 --> 00:24:12,519
mark the end, which meant if you had an if

490
00:24:12,599 --> 00:24:14,920
that was inside a loop that was inside a function,

491
00:24:15,079 --> 00:24:17,359
you needed three blank lines to end all of them,

492
00:24:18,160 --> 00:24:21,519
which became very very hard to troubleshoot because it wasn't

493
00:24:21,519 --> 00:24:24,119
always obvious. You know, one is obvious, Two is you know,

494
00:24:24,519 --> 00:24:26,440
is that three or four or five? I honestly can't

495
00:24:26,480 --> 00:24:28,759
see it. And so a lot of folks out there

496
00:24:28,799 --> 00:24:31,880
they started in to make it easy to track, and

497
00:24:31,920 --> 00:24:35,359
I'm like, no, no, it looks like Python. That's the point, right,

498
00:24:35,960 --> 00:24:38,759
And so one of the one of the features that

499
00:24:39,079 --> 00:24:41,720
I put in. So so let's uh, actually, let's let's

500
00:24:41,759 --> 00:24:43,559
bring things up to speed. So this ticks along for

501
00:24:43,599 --> 00:24:45,640
about five years and it's built in JavaScript and it

502
00:24:45,720 --> 00:24:48,599
runs on the web, and every once in a while

503
00:24:48,640 --> 00:24:50,880
there's a little something just kind of you know, hits

504
00:24:50,960 --> 00:24:53,720
me and makes me think. And last year somebody did

505
00:24:53,759 --> 00:24:56,680
an advent of code in it. They solved every day

506
00:24:56,720 --> 00:25:01,119
of advent of code in Rockstar has no IO, You've

507
00:25:01,119 --> 00:25:03,480
got standard in Standard out, doesn't have file system, doesn't

508
00:25:03,480 --> 00:25:06,119
have a network, which is partly on purpose, because I

509
00:25:06,119 --> 00:25:08,680
don't ever want somebody to, you know, start a job

510
00:25:09,119 --> 00:25:13,160
and be like, oh, well, the no viruses in Rockstar,

511
00:25:13,559 --> 00:25:16,279
or you know, worse than that. The because I believe

512
00:25:16,400 --> 00:25:19,799
that this could happen is somebody's like, yeah, the previous

513
00:25:19,960 --> 00:25:23,200
developer wrote the whole system in Rockstar and they've left now.

514
00:25:23,680 --> 00:25:28,359
Speaker 1: And the new guy, the new guy rock he doesn't

515
00:25:28,440 --> 00:25:29,279
understand any of it.

516
00:25:30,480 --> 00:25:32,559
Speaker 2: But if you don't have no file system and no network,

517
00:25:32,599 --> 00:25:34,839
then there's how limit to how much damage you how

518
00:25:34,920 --> 00:25:36,720
much trouble can you really go? But advent to code

519
00:25:36,799 --> 00:25:38,839
is brilliant because it's standard in Standard out and that's it.

520
00:25:39,000 --> 00:25:41,319
That's all you need. And so the kind of and

521
00:25:41,400 --> 00:25:43,799
somebody did the whole thing, and I was like, if

522
00:25:43,920 --> 00:25:46,640
people are going to put that many hours into the joke.

523
00:25:46,839 --> 00:25:50,640
They deserve a better implementation of the joke. And the

524
00:25:50,759 --> 00:25:52,799
other thing that happened at the end of last year,

525
00:25:52,880 --> 00:25:57,119
so Rand November twenty twenty three was dotnor eight and

526
00:25:57,279 --> 00:26:01,640
dotnor eight finally gave us a native ahead of time compilation.

527
00:26:02,400 --> 00:26:04,759
And this was always a deal breaker for me, is

528
00:26:04,799 --> 00:26:07,400
because having to install the dot net framework. I'm like,

529
00:26:07,519 --> 00:26:09,839
that is if you want to learn dot net whatever,

530
00:26:09,839 --> 00:26:11,599
but if you just want to play with Rockstar, I

531
00:26:11,599 --> 00:26:14,160
don't want you having to install dot net that because

532
00:26:14,240 --> 00:26:17,279
that is too much downloading and everything. And then this

533
00:26:17,400 --> 00:26:20,200
thing came along and I'm like, wow, so this, you know,

534
00:26:20,319 --> 00:26:22,240
you can do the ahead of time compilation. There's a

535
00:26:22,319 --> 00:26:26,039
thing called il stripping, which takes a Dotnet program, runs

536
00:26:26,079 --> 00:26:29,119
it or builds it, links it against the entire run

537
00:26:29,240 --> 00:26:32,480
time with certain caveats. You can't use reflection, you can't

538
00:26:32,559 --> 00:26:36,519
use type introspection, you can't use you know, dynamic assembly instatiation.

539
00:26:37,119 --> 00:26:38,720
But we're not doing any of those things.

540
00:26:38,799 --> 00:26:38,920
Speaker 1: You know.

541
00:26:39,000 --> 00:26:41,920
Speaker 2: It's a PASA and an interpreter. It's it's the code

542
00:26:42,000 --> 00:26:45,680
for it is relatively kind of clean, I guess is

543
00:26:45,960 --> 00:26:48,440
a good word for it. It's not doing anything too gnally.

544
00:26:48,519 --> 00:26:50,640
Speaker 1: So you end up with an EXC that anybody can

545
00:26:50,680 --> 00:26:52,759
download and run on Windows or.

546
00:26:53,079 --> 00:26:54,720
Speaker 2: And so yeah, you end up with with an XC

547
00:26:54,880 --> 00:26:56,519
and this is this is the fun part as well,

548
00:26:56,599 --> 00:27:00,759
because GitHub actions now has native runners for Windows and Chirk,

549
00:27:01,400 --> 00:27:03,799
so you can write code and c sharp, you can

550
00:27:03,839 --> 00:27:06,160
deploy it to gethub and as long as you wire

551
00:27:06,200 --> 00:27:10,000
everything up properly, you end up with a mac OS

552
00:27:10,359 --> 00:27:13,119
native executable that doesn't need a run time. So it's

553
00:27:13,319 --> 00:27:16,400
just it's like about a six megabyte binary that is

554
00:27:16,480 --> 00:27:19,720
a rockstar interpreter and as a six meg one for Linux.

555
00:27:20,000 --> 00:27:22,119
Actually the Mac one's a little bigger. It's four for Windows,

556
00:27:22,119 --> 00:27:24,440
four for len it's about six megs for Mac. And

557
00:27:24,559 --> 00:27:26,680
that to me was like this is time, like if

558
00:27:26,759 --> 00:27:29,000
dot net can do this, now is the time to

559
00:27:29,519 --> 00:27:32,599
see what would be involved in kind of porting the

560
00:27:32,640 --> 00:27:37,759
whole thing. And so the first kind of potential brick

561
00:27:37,839 --> 00:27:40,519
wall there was, okay, well what about the web sure?

562
00:27:40,680 --> 00:27:43,960
And now the interesting thing something that I've seen time

563
00:27:44,039 --> 00:27:46,480
and time again is so dot net will compile to

564
00:27:46,519 --> 00:27:50,359
web assembly, and the I think misunderstanding a lot of

565
00:27:50,359 --> 00:27:52,799
people have and I think, you know, Microsoft could have

566
00:27:52,880 --> 00:27:56,519
done more to avoid this is people think dot net

567
00:27:56,559 --> 00:27:59,559
plus web assembly means Blazer. Yeah right, and you're like, no,

568
00:28:00,279 --> 00:28:04,960
dot net plus web assembly runs browser enables Blazer. That's

569
00:28:05,039 --> 00:28:07,400
not Blazer's built on top of that. If you want to,

570
00:28:07,559 --> 00:28:10,720
you can compile sea sharp into a web assembly binary

571
00:28:10,839 --> 00:28:13,680
that you then bootstrap in a browser and you can

572
00:28:13,839 --> 00:28:16,480
run code natively in web assembly and you don't need

573
00:28:16,519 --> 00:28:16,920
the Blazer.

574
00:28:16,960 --> 00:28:17,519
Speaker 1: You are stuff.

575
00:28:17,599 --> 00:28:20,839
Speaker 2: None of that interaction happens and the JAS interrupt that

576
00:28:21,000 --> 00:28:22,519
exists in dot net.

577
00:28:22,599 --> 00:28:24,160
Speaker 1: Now, yeah, it's really great.

578
00:28:24,279 --> 00:28:26,759
Speaker 2: It just blew me away, Like I kept getting to

579
00:28:26,839 --> 00:28:29,559
this point thinking can I do that? And you know

580
00:28:29,680 --> 00:28:33,119
it's things like so the way that the Rockstar Web

581
00:28:33,240 --> 00:28:36,240
interpreter works now and by the time the show comes out,

582
00:28:36,279 --> 00:28:39,319
this will be on code with Rockstar dot com because

583
00:28:39,400 --> 00:28:41,400
the next week is going to get flipped over. It's

584
00:28:41,400 --> 00:28:43,319
been on running on beta for a couple of months

585
00:28:43,359 --> 00:28:45,240
now and folks, I think have kicked out most of

586
00:28:45,279 --> 00:28:47,319
the bugs on it. So if you've got a code

587
00:28:47,359 --> 00:28:50,200
with Rockstar dot Com, there will be an interpreter. You

588
00:28:50,279 --> 00:28:52,519
type code and you click run and it runs, and

589
00:28:52,640 --> 00:28:56,119
it's running sea sharp code built into web assembly and

590
00:28:56,240 --> 00:28:58,240
it's doing it in a background. So it's a JavaScript

591
00:28:58,319 --> 00:29:00,759
worker process because that way, if you're an infinite loop,

592
00:29:00,759 --> 00:29:04,480
it doesn't freeze the browser window. So we got JavaScript

593
00:29:04,559 --> 00:29:06,960
in the browser talking to JavaScript, and a worker which

594
00:29:07,039 --> 00:29:10,480
is instantiating the web assembly runtime loading the dot net.

595
00:29:10,960 --> 00:29:14,079
You know the runtime that the CLR web assembly version

596
00:29:14,119 --> 00:29:17,119
of that right flying in the Rockstar code interpreter on

597
00:29:17,240 --> 00:29:19,480
top of that, and then buried under all these levels.

598
00:29:19,519 --> 00:29:22,039
Someone wants to say hello World, and you're like, well,

599
00:29:22,039 --> 00:29:25,680
where is the hello world? Co and the js interrupt

600
00:29:25,720 --> 00:29:28,240
team who built the web assembly support for c sharp

601
00:29:28,279 --> 00:29:30,559
are like, well, yeah, you can inject a function. You

602
00:29:30,640 --> 00:29:33,839
give us a function signature, and we will take the

603
00:29:34,319 --> 00:29:37,000
JavaScript function which puts hellow world on a web page

604
00:29:37,079 --> 00:29:39,119
and we will wire that all the way through these

605
00:29:39,200 --> 00:29:42,400
levels of abstraction so that you can wire that into

606
00:29:42,480 --> 00:29:45,240
the environment, the input output mapping of the environment when

607
00:29:45,279 --> 00:29:48,359
your interpreter is running. And when I found that, I

608
00:29:48,519 --> 00:29:53,200
was just like, this is amazing. This is like and

609
00:29:53,279 --> 00:29:56,720
you're thinking, how many things, you know, let the browser

610
00:29:56,799 --> 00:29:58,640
do what the browser is good at. The browser is

611
00:29:58,680 --> 00:30:01,920
going to do fonts and color and typography and buttons

612
00:30:01,960 --> 00:30:02,960
and clicking on stuff.

613
00:30:03,039 --> 00:30:06,039
Speaker 1: And then ninety percent of those fonts came from IBM.

614
00:30:06,319 --> 00:30:06,880
Just remember that.

615
00:30:13,000 --> 00:30:20,000
Speaker 2: To joke people, to joke, that's a callback. And you know,

616
00:30:20,119 --> 00:30:22,599
this to me was just like, it was really really

617
00:30:22,680 --> 00:30:25,640
exciting being able to use c sharp to do the

618
00:30:25,720 --> 00:30:28,400
heavy lifting. And of course there's always that point. I

619
00:30:28,519 --> 00:30:30,359
don't know if I'm sure you folks experienced the same thing.

620
00:30:30,400 --> 00:30:31,640
You make a little list in your head of the

621
00:30:31,680 --> 00:30:33,119
bits of it you think are going to be difficult,

622
00:30:33,519 --> 00:30:36,079
and you do those first, and you validate the approach.

623
00:30:36,119 --> 00:30:38,160
You're like, is this actually impossible? If we can prove

624
00:30:38,200 --> 00:30:41,039
it's not impossible. And at that point I do what

625
00:30:41,119 --> 00:30:43,079
I think a lot of developers do, which is like, well,

626
00:30:43,079 --> 00:30:45,559
I've proved it's not impossible, therefore it's going to be easy, yeah,

627
00:30:45,759 --> 00:30:49,839
because you know, and it turns out it's not actually easy.

628
00:30:50,319 --> 00:30:54,240
It's it's just not impossible, right, And so the what

629
00:30:54,359 --> 00:30:56,039
I thought was going to be a probably a long

630
00:30:56,079 --> 00:30:59,200
weekend and probably about five or six weeks of working

631
00:30:59,240 --> 00:31:03,119
on this thing. But it's good fun. And you know

632
00:31:03,240 --> 00:31:06,039
the number of wonderful things that exist in dot net now.

633
00:31:06,839 --> 00:31:09,759
So there's a fantastic book Crafting Interpreters by a guy

634
00:31:09,839 --> 00:31:13,559
called Robert Meistrom and it's a great book about how

635
00:31:13,559 --> 00:31:16,519
to design a programming language. Fantastic reading. And there's a

636
00:31:16,559 --> 00:31:17,880
couple of things in it that I'm looking at and

637
00:31:17,920 --> 00:31:20,440
a going the thing he's doing here to avoid it

638
00:31:20,559 --> 00:31:23,359
being slow. That's not slow in dot net anyway, right, So,

639
00:31:23,839 --> 00:31:27,079
like you know, switching on a switch expressions inside and

640
00:31:27,200 --> 00:31:31,000
using pattern matching and stuff kind of alleviates the need

641
00:31:31,079 --> 00:31:33,039
for the visitor pattern, which is one of the things

642
00:31:33,119 --> 00:31:36,079
I used to get away from big switch statements, because

643
00:31:36,119 --> 00:31:39,079
the compiler knows where to root the execution flow based

644
00:31:39,119 --> 00:31:41,119
on the types that are available at run time. And

645
00:31:41,599 --> 00:31:45,559
that kind of thing made it just this compelling proposition

646
00:31:46,079 --> 00:31:48,440
let's do this, and let's do it right, all.

647
00:31:48,400 --> 00:31:50,440
Speaker 1: Right, And there's more coming up with Dylan Beattie and

648
00:31:50,559 --> 00:31:55,799
Rockstar after these very important messages stick around. Did you

649
00:31:55,960 --> 00:31:58,880
know you can easily migrate asp net web apps to

650
00:31:59,039 --> 00:32:03,599
Windows containers on Aws. Use the app to Container tool

651
00:32:03,920 --> 00:32:08,400
to containerize your iis websites and deploy to AWS managed

652
00:32:08,440 --> 00:32:13,319
container services with or without Kubernetes. Find out more about

653
00:32:13,359 --> 00:32:17,720
app to Container at AWS dot Amazon dot Com, slash

654
00:32:17,759 --> 00:32:23,039
dot net, slash Modernize. Hey Carl, here, today we're spotlighting

655
00:32:23,079 --> 00:32:26,599
a tool that's turning heads in the tech community. Ygun's

656
00:32:26,759 --> 00:32:31,599
AI error resolution brings you smart AI powered insights directly

657
00:32:31,680 --> 00:32:36,400
into your development workflow. This feature doesn't just identify errors,

658
00:32:36,759 --> 00:32:40,720
it suggests how to fix them quickly and efficiently in seconds.

659
00:32:41,319 --> 00:32:44,640
If you're ready for a deeper dive into smarter debugging,

660
00:32:45,160 --> 00:32:47,720
you won't want to miss what raygun has to offer.

661
00:32:48,440 --> 00:32:52,039
Visit raygun dot com slash dot net rocks that's ygun,

662
00:32:52,440 --> 00:32:55,559
r A y g U n dot com slash do

663
00:32:55,720 --> 00:32:57,720
O t n E t r O c k s

664
00:32:58,240 --> 00:33:01,039
for your free fourteen day trial to explore the way

665
00:33:01,200 --> 00:33:07,119
raygun is revolutionizing debugging. And we're back. It's dot in

666
00:33:07,119 --> 00:33:09,720
a rocks. I'm Carl Franklin, my friend Richard Campbell Hey,

667
00:33:10,160 --> 00:33:14,200
and our friend Dylan Beattie, super genius who wrote a

668
00:33:15,519 --> 00:33:18,440
programming language as a joke, and now he it's like

669
00:33:18,559 --> 00:33:20,680
stepping in a pile of dog poo. He can't get

670
00:33:20,720 --> 00:33:24,200
it off his shoe and every but even worse, all

671
00:33:24,279 --> 00:33:26,680
the dogs are coming around sniffing at it, asking him

672
00:33:26,759 --> 00:33:29,359
to improve the quality. I don't know what that means,

673
00:33:29,480 --> 00:33:31,599
but it kind of I kind of thought it would

674
00:33:31,640 --> 00:33:33,200
work before it came out of my mouth.

675
00:33:33,640 --> 00:33:37,640
Speaker 2: Mister Carl Franklin, our chief Medical Office site, his finest

676
00:33:38,720 --> 00:33:43,000
quite so.

677
00:33:43,799 --> 00:33:46,319
Speaker 1: So dot net eight turns out to be the point

678
00:33:46,400 --> 00:33:49,000
at which you say, dot neck got awesome. Now I

679
00:33:49,079 --> 00:33:50,640
can do what I want to do, and it can

680
00:33:50,759 --> 00:33:54,880
run everywhere and pretty much maybe we should talk a

681
00:33:54,960 --> 00:33:58,240
little bit about the internals of how it actually works

682
00:33:58,279 --> 00:34:01,680
through the grammar and the parser and the interpreting the interpreter.

683
00:34:02,160 --> 00:34:04,880
Speaker 2: So you know something that I've been very acutely aware

684
00:34:04,960 --> 00:34:07,200
of throughout the whole process. There are people out there

685
00:34:07,240 --> 00:34:09,480
who are way smarter than me. And I know this

686
00:34:09,880 --> 00:34:13,199
because there are certain elements of this where like the

687
00:34:13,480 --> 00:34:17,639
JS interrupt thing I just mentioned, I understand how that work,

688
00:34:17,679 --> 00:34:19,880
I understand how to use it, I understand the problem

689
00:34:19,920 --> 00:34:23,360
it solves, and I can appreciate the solution how they

690
00:34:23,480 --> 00:34:26,199
got that thing to work. I have no idea. You know,

691
00:34:26,320 --> 00:34:28,599
there is clearly there is a level of genius far

692
00:34:28,719 --> 00:34:32,440
beyond anything that you know I would have done on this.

693
00:34:32,920 --> 00:34:34,920
And you know, I'm in awe and respect of the

694
00:34:35,000 --> 00:34:37,079
people who made those because with that stuff, none of

695
00:34:37,119 --> 00:34:39,920
this will work. And one of those is there's a

696
00:34:39,960 --> 00:34:43,760
thing of the pausing expression grammar and or a PEG

697
00:34:43,920 --> 00:34:46,119
grammar they call them. But then you've got redundant acronyms

698
00:34:46,440 --> 00:34:50,000
like machine. So yeah, like ATM machines where you put

699
00:34:50,000 --> 00:34:51,920
your pin number in the ATM machine.

700
00:34:51,679 --> 00:34:55,119
Speaker 1: Or IBM machine, but the IBM machine.

701
00:34:57,400 --> 00:34:59,880
Speaker 2: Yeah again, an IBM business machine. Where are you getting that?

702
00:35:00,000 --> 00:35:00,079
Speaker 1: Oh?

703
00:35:00,199 --> 00:35:06,760
Speaker 2: Internationally, you know, But basically, you know the expression grammar

704
00:35:07,199 --> 00:35:12,280
is ah, you build a set of matching expressions regular

705
00:35:12,360 --> 00:35:15,360
expression syntax or something very very similar to that, and

706
00:35:15,639 --> 00:35:17,920
you feed your source code into that. So one of

707
00:35:17,960 --> 00:35:21,559
the really fun things about building a programming language interpreter

708
00:35:22,320 --> 00:35:26,480
is you have the language you designed, and you have

709
00:35:26,679 --> 00:35:30,679
the language that you're building it in. And so when

710
00:35:30,719 --> 00:35:32,960
you find a bug, you're like, Okay, where's is it.

711
00:35:33,199 --> 00:35:34,920
It could be a bug in my rock Star code,

712
00:35:35,400 --> 00:35:36,800
or it could be a bug in the thing that

713
00:35:36,920 --> 00:35:38,599
passes the rock Star code, or it could be a

714
00:35:38,639 --> 00:35:41,119
bug in the thing that then runs the interprets the

715
00:35:41,119 --> 00:35:45,800
abstract syntax tree. And so you're constantly trying to find,

716
00:35:45,920 --> 00:35:48,119
you know, where are the abstraction points in this where

717
00:35:48,159 --> 00:35:50,960
you can stick in a debugger or something and go right,

718
00:35:51,039 --> 00:35:52,679
If it's good as far as here, then I know

719
00:35:52,800 --> 00:35:53,480
it's not a bug.

720
00:35:53,599 --> 00:35:54,199
Speaker 1: In this part.

721
00:35:54,239 --> 00:35:57,519
Speaker 2: It's a bug in that part and the pausing expression

722
00:35:57,559 --> 00:36:00,079
grammar as a guy called John John Getson has a

723
00:36:00,159 --> 00:36:02,719
library called Pegasus, which is up on new get and

724
00:36:03,719 --> 00:36:06,599
this is basically the you write your peg grammar for

725
00:36:06,639 --> 00:36:09,119
the language you're building, which is like, what's a program?

726
00:36:09,199 --> 00:36:12,280
Will a program is a set of blocks, or it's empty.

727
00:36:12,719 --> 00:36:15,440
So the shortest possible program is nothing, it's white space

728
00:36:15,480 --> 00:36:18,480
followed by under file, which is valid. Or it's a

729
00:36:18,519 --> 00:36:21,480
block followed by a program, which could be the empty program,

730
00:36:21,599 --> 00:36:22,960
so it's just one block, or it could be a

731
00:36:23,039 --> 00:36:25,639
block followed by a program, which is a block followed

732
00:36:25,639 --> 00:36:27,280
by a program, which is a block followed by a

733
00:36:27,320 --> 00:36:28,960
program which is the empty one. So you got four.

734
00:36:29,400 --> 00:36:31,480
And I love that. I love the elegance of kind

735
00:36:31,519 --> 00:36:33,400
of the self yeah, self reference.

736
00:36:33,519 --> 00:36:35,400
Speaker 1: I know if you heard that the burdens were flying

737
00:36:35,440 --> 00:36:37,480
over around my head in a circle.

738
00:36:39,599 --> 00:36:41,519
Speaker 2: And then what's a block? Well, a block is either

739
00:36:41,559 --> 00:36:43,920
a statement followed by an end of statement, or it's

740
00:36:43,960 --> 00:36:46,880
a statement followed by a block, all right, And what's

741
00:36:46,920 --> 00:36:48,880
a statement? And then you're like, well, a statement is

742
00:36:49,039 --> 00:36:52,599
input output arithmetic par as this read that you know,

743
00:36:52,679 --> 00:36:54,559
the actual the guts.

744
00:36:54,280 --> 00:36:54,920
Speaker 1: Of the language.

745
00:36:54,920 --> 00:36:56,920
Speaker 2: That's where it kind of widens out, and then you

746
00:36:57,000 --> 00:36:59,519
get down to what are the expressions, and the expressions

747
00:36:59,559 --> 00:37:02,199
are operators and values, and what are the values, And

748
00:37:02,239 --> 00:37:03,719
that's where you get down to the type system. You

749
00:37:03,760 --> 00:37:05,199
can have a string, you can have the number, you

750
00:37:05,280 --> 00:37:07,840
can have a boolean. And the type system in Rockstar

751
00:37:07,880 --> 00:37:10,000
is straight out of JavaScript, just because it you know,

752
00:37:10,360 --> 00:37:13,159
it's one I think makes sense, so no types. Very

753
00:37:13,199 --> 00:37:16,760
early on it kind of has types. It's got some

754
00:37:16,920 --> 00:37:18,920
really interesting type coercion because one of the one of

755
00:37:18,960 --> 00:37:22,400
the things that JavaScript always frustrated me with is, you know,

756
00:37:22,440 --> 00:37:25,199
it's really idiosyncratic, like, you know, you can add a

757
00:37:25,239 --> 00:37:27,280
string to a number, but you can't subtract a string

758
00:37:27,360 --> 00:37:30,480
from home. And I'm like, well, if you can add

759
00:37:30,519 --> 00:37:33,559
the string, surely there are scenarios where subtracting the string

760
00:37:33,679 --> 00:37:36,400
makes sense. So I decided, you know, the Rockstar two

761
00:37:36,400 --> 00:37:39,639
point zero, everything would return something like there's no nan,

762
00:37:39,719 --> 00:37:43,039
there's no so divide by zero gives you infinity because

763
00:37:43,079 --> 00:37:49,079
that sounds like rock and roll, and something like we

764
00:37:49,119 --> 00:37:51,559
don't have we don't have not a number. It's got mysterious,

765
00:37:51,719 --> 00:37:55,039
Like mysterious is the value you get but other things

766
00:37:55,079 --> 00:37:57,280
like you subtract a string from another string, it's gonna

767
00:37:57,679 --> 00:37:59,760
like if you subtract rock from Rockstar, you're going to

768
00:37:59,800 --> 00:38:02,519
get because it's going to take the rockout because obviously

769
00:38:02,599 --> 00:38:05,519
that makes sense. And like Rockstar divided by R it

770
00:38:05,559 --> 00:38:07,239
gives you two because there's two rs in the words.

771
00:38:07,880 --> 00:38:12,039
So string division is defined, string multiplication is defined. And

772
00:38:13,400 --> 00:38:15,280
so you got all these these kind of ideas and

773
00:38:15,360 --> 00:38:17,320
you're like, right, first, you got to design the syntax,

774
00:38:17,760 --> 00:38:19,599
and some of it is syntax you design, and other

775
00:38:19,679 --> 00:38:21,360
stuff is like, well, I've got these types and I

776
00:38:21,440 --> 00:38:23,480
have this operator now, but I haven't figured out what

777
00:38:23,559 --> 00:38:27,320
happens if you mash them together. And I figured out

778
00:38:27,400 --> 00:38:29,840
very early on. So there's a wonderful tool called Endcrunch,

779
00:38:29,880 --> 00:38:32,239
which is a continuous test runner for dot net that

780
00:38:32,599 --> 00:38:34,880
I love dearly. I use it. It's on Writer as

781
00:38:34,920 --> 00:38:36,639
well now but it's still Windows only. But for a

782
00:38:36,679 --> 00:38:38,559
long time it was just a visual studio plug in

783
00:38:39,000 --> 00:38:40,719
and it just sits there. It runs all your tests,

784
00:38:41,039 --> 00:38:44,079
and I figured out very early on how to get

785
00:38:44,239 --> 00:38:47,119
that to report the line and the rock Star program

786
00:38:47,199 --> 00:38:50,639
where the test had failed. But I think the developer

787
00:38:50,679 --> 00:38:53,280
remco molderus like, hey, how do you know when a

788
00:38:53,360 --> 00:38:55,360
test fails? How do you know what line to link to?

789
00:38:56,039 --> 00:38:59,079
And it was like, it's just we use a regular

790
00:38:59,119 --> 00:39:02,360
expression to pass the output from the dot netcompiler. And

791
00:39:02,440 --> 00:39:04,679
I'm like, so if I can emit a line of

792
00:39:04,760 --> 00:39:09,599
output that matches the exact error this space at space

793
00:39:10,440 --> 00:39:14,440
file name colon, line number, comma, And he's like, try it,

794
00:39:14,519 --> 00:39:16,440
and see I tried it and it worked. So now

795
00:39:16,519 --> 00:39:18,360
I have a test runner that I can click and

796
00:39:18,400 --> 00:39:20,360
I can jump to a line in a Rockstar program

797
00:39:20,679 --> 00:39:23,039
where the test failed. So now you can start using

798
00:39:23,119 --> 00:39:26,000
Rockstar to write the tests. And that's at that point

799
00:39:26,039 --> 00:39:27,159
I'm like, well, if you can use them to right

800
00:39:27,199 --> 00:39:29,800
the tests, I can also use a test runner to

801
00:39:29,880 --> 00:39:34,719
validate the documentation. And so the code with rockstar dot

802
00:39:34,800 --> 00:39:38,199
com website, all of the examples in it are actual

803
00:39:38,320 --> 00:39:42,039
Rockstar programs that are tested as part of building the solution.

804
00:39:42,800 --> 00:39:45,400
But then the website's built in Jackiel, so it runs

805
00:39:45,440 --> 00:39:47,960
on GitHub pages and there's a little custom Ruby plug

806
00:39:48,079 --> 00:39:51,239
in that takes each snippet of code and turns it

807
00:39:51,400 --> 00:39:53,719
into an one you can actually run right there on

808
00:39:53,800 --> 00:39:57,880
the page by clicking a button. So every single kind

809
00:39:57,880 --> 00:40:01,679
of scenario, every test case, every operates to the examples.

810
00:40:01,719 --> 00:40:03,360
How do you do a raise, how do you do loops?

811
00:40:03,400 --> 00:40:05,039
How do you do input? How do you do output?

812
00:40:06,000 --> 00:40:08,719
The docs get unit tested as part of building the

813
00:40:08,760 --> 00:40:11,880
whole thing, which has only caused a couple of headaches

814
00:40:11,880 --> 00:40:14,559
because it doesn't using symbolic linking, which causes problems with

815
00:40:14,639 --> 00:40:18,800
cross platform builds, which you know is a is a headache.

816
00:40:19,639 --> 00:40:21,719
Speaker 1: I have a question, Go for it. I hate to

817
00:40:21,800 --> 00:40:24,159
interrupt it. As you're talking about this, I can't help

818
00:40:24,199 --> 00:40:28,440
but think that you beyond rockstar, you may have invented

819
00:40:28,480 --> 00:40:32,079
a new type of language paradigm where you could use

820
00:40:32,199 --> 00:40:37,360
the language in any kind of genre of writing, for

821
00:40:37,519 --> 00:40:43,480
example Shakespeare. What's stopping anybody from taking your the basis

822
00:40:43,599 --> 00:40:47,320
of your you know, your language and turning it using

823
00:40:47,559 --> 00:40:50,079
Shakespearean language to write code?

824
00:40:50,119 --> 00:40:54,400
Speaker 2: And so that's that's actually a really interesting question because

825
00:40:55,440 --> 00:40:57,960
I think at this point, so generally, you know, part

826
00:40:58,000 --> 00:41:01,360
of the problem is how do you take the lexical

827
00:41:01,400 --> 00:41:05,880
structure of natural, lyrical sounding English and turn that into

828
00:41:05,920 --> 00:41:08,880
something you can use to write programs? And that part

829
00:41:08,920 --> 00:41:11,280
of it does lend itself to a lot of flexibility

830
00:41:11,320 --> 00:41:13,239
and One of the things that I baked into Rockstar

831
00:41:13,320 --> 00:41:16,280
early on is aliases. So there's a lot of things

832
00:41:16,320 --> 00:41:18,800
where there are three or four different keywords that compile

833
00:41:18,920 --> 00:41:21,400
to the same instruction. They mean the same thing. So

834
00:41:21,719 --> 00:41:24,559
we got like print tallow world, but also you can shout,

835
00:41:24,639 --> 00:41:28,800
you can scream, you can whisper how world. Otherwise it's

836
00:41:28,840 --> 00:41:32,199
just print, print, print, print, print, you know. And so

837
00:41:32,360 --> 00:41:34,960
the minimalist rock Star looks a little bit like Python,

838
00:41:35,320 --> 00:41:38,079
and idiomatic Rockstar has all the kind of fancy edges

839
00:41:38,159 --> 00:41:42,079
and frills and stuff on it. And so the next

840
00:41:42,159 --> 00:41:45,639
part then is choosing the keyword that you're going to

841
00:41:45,760 --> 00:41:48,639
use for built in operations, so you know, like a

842
00:41:48,800 --> 00:41:52,119
natural or many programming languages have stack operators which are

843
00:41:52,119 --> 00:41:54,360
pushing pop, and everyone's like, you push it on the stack,

844
00:41:54,400 --> 00:41:56,199
you pop it off the stack. And I was like,

845
00:41:56,239 --> 00:41:58,000
all right, well push and pop is in there. But

846
00:41:58,159 --> 00:42:00,280
I'm also going to have rock and roll absolutely, so

847
00:42:00,639 --> 00:42:03,199
you can you can rock something. And then you're like, well,

848
00:42:03,199 --> 00:42:04,800
if we got this rock up right, what happens if

849
00:42:04,840 --> 00:42:07,960
you rock something that isn't a isn't a list, and

850
00:42:08,480 --> 00:42:10,920
so rock will if you rock a number, it turns

851
00:42:10,960 --> 00:42:13,519
it into a list that just contains the number. If

852
00:42:13,559 --> 00:42:15,639
you rock a string, it turns it into a list

853
00:42:15,719 --> 00:42:17,960
that contains one string. And then if you rock it again,

854
00:42:18,079 --> 00:42:21,039
two strings, three strings, and roll will pull the element

855
00:42:21,079 --> 00:42:22,320
off the string. And then I thought, well, hang on,

856
00:42:22,360 --> 00:42:25,039
if you if you rock a string with a number,

857
00:42:25,880 --> 00:42:28,320
what it does. It takes the number, it converts it

858
00:42:28,480 --> 00:42:31,119
into the Unicode character with a corresponding code point, and

859
00:42:31,199 --> 00:42:34,480
it appends it to the string. And so what this

860
00:42:34,679 --> 00:42:37,360
thing gives you is it gives you a way of

861
00:42:38,239 --> 00:42:43,159
building strings without having to actually use them, so you

862
00:42:43,239 --> 00:42:45,599
can you can. They're called ninja strings because they're stealthy.

863
00:42:45,639 --> 00:42:48,559
You don't see them coming. And so I'm just going

864
00:42:48,639 --> 00:42:50,840
to look up the example because I can't remember it

865
00:42:51,000 --> 00:42:52,400
off the top of my head. Yeah.

866
00:42:52,519 --> 00:42:55,239
Speaker 1: Well, while you're doing that, the Shakespearean version of rock

867
00:42:55,280 --> 00:42:56,719
and roll might be ebb and flow.

868
00:42:57,159 --> 00:42:59,199
Speaker 2: Yeah, exactly, this kind of thing. And so you're like

869
00:43:00,119 --> 00:43:01,840
that point. You know, if you wanted to add ab

870
00:43:01,960 --> 00:43:05,360
and flow as aliases, it's a very So adding alias

871
00:43:05,440 --> 00:43:07,400
is one. It's very easy because you just stick another

872
00:43:07,760 --> 00:43:10,079
case in the grammar and you've done. The problem then

873
00:43:10,159 --> 00:43:12,159
is you might have somebody out there who's used ab

874
00:43:12,320 --> 00:43:14,280
as a variable in a program, at which point that's

875
00:43:14,280 --> 00:43:17,119
a breaking I see. And you know, this is a

876
00:43:17,239 --> 00:43:20,519
sort of classic problem that all programming language designers, no

877
00:43:20,599 --> 00:43:24,320
matter how esoteric, is if you have something that wasn't

878
00:43:24,360 --> 00:43:27,679
a keyword and now it is, well, somebody might have

879
00:43:27,840 --> 00:43:29,280
used it before. Yeah.

880
00:43:29,280 --> 00:43:31,159
Speaker 1: In this case, though, you'd be creating a whole other

881
00:43:31,280 --> 00:43:35,039
language other than Rockstar. It'd be you know, Shakespeare or something. Right,

882
00:43:35,119 --> 00:43:37,559
So if you're writing, you're either writing in Rockstar or

883
00:43:37,639 --> 00:43:40,440
in Shakespeare. You wouldn't be using them together.

884
00:43:40,880 --> 00:43:42,800
Speaker 2: It has occurred to me that there is a sort

885
00:43:42,800 --> 00:43:46,760
of fairly natural split because the Rockstar engine's kind of

886
00:43:46,800 --> 00:43:49,360
in two halves. There's the pausa, and the Pausa takes

887
00:43:49,400 --> 00:43:53,239
the Rockstar program and turns it into a abstract syntax tree,

888
00:43:53,239 --> 00:43:55,800
which is a collection of dot Net classes that refer

889
00:43:55,880 --> 00:43:58,360
to each other. And so like program has a collection

890
00:43:58,440 --> 00:44:00,199
of statements, and then a statement is one of the

891
00:44:00,239 --> 00:44:03,719
following types. But in theory, you could then build a

892
00:44:03,800 --> 00:44:06,559
completely different grammar that compiles to the same set of

893
00:44:06,639 --> 00:44:08,639
classes and then just run it through the rock Star

894
00:44:08,760 --> 00:44:10,880
engine the interpreter, and it would tell you what it did.

895
00:44:11,480 --> 00:44:13,760
And so there's almost like the guts of a language

896
00:44:13,800 --> 00:44:14,920
construction kit in here.

897
00:44:15,159 --> 00:44:16,840
Speaker 1: Yeah, well you're like, well, you.

898
00:44:16,880 --> 00:44:19,519
Speaker 2: Know, this thing maps onto that thing, and you know,

899
00:44:19,559 --> 00:44:21,079
at that point it's a little bit fundy because it's

900
00:44:21,079 --> 00:44:24,840
like that might actually be thinking this wasn't supposed to

901
00:44:24,880 --> 00:44:30,960
be useful, but this accidentally invented something that has genuine

902
00:44:31,000 --> 00:44:35,280
application as a teacher crap, that wasn't the point and

903
00:44:36,199 --> 00:44:37,800
but yeah, and you know it, really there is this

904
00:44:37,920 --> 00:44:40,199
intermediate representation and if you if you go on the

905
00:44:40,280 --> 00:44:42,480
Rockstar website, you can type in any program and as

906
00:44:42,480 --> 00:44:44,599
well as running it, you can see the past tree.

907
00:44:44,719 --> 00:44:47,440
You can see the visualization of what your program gets

908
00:44:47,480 --> 00:44:50,360
translated into, which has been one. You know, it's a

909
00:44:50,400 --> 00:44:53,239
tool that I found incredibly useful when I was developing

910
00:44:53,320 --> 00:44:55,360
the thing, and then I was like, other people might

911
00:44:55,480 --> 00:45:00,440
find this useful too, And you know, it's very particularly

912
00:45:00,440 --> 00:45:03,079
if you're trying to debug something where you have an

913
00:45:03,159 --> 00:45:06,039
expression that could either be interpreted as an actual expression

914
00:45:06,079 --> 00:45:08,960
or it's going to be interpreted as a poetic literal.

915
00:45:09,639 --> 00:45:11,639
And you know, this means that you have something you

916
00:45:11,760 --> 00:45:15,679
think is going to be like a logical expression. You know,

917
00:45:15,960 --> 00:45:18,400
X is not why and you'd think, well, X is

918
00:45:18,400 --> 00:45:20,000
not my means of why is true? X is now

919
00:45:20,039 --> 00:45:22,480
false because it's going to do logical negation. But in

920
00:45:22,599 --> 00:45:25,199
some circumstances X is not. Why is going to count?

921
00:45:25,280 --> 00:45:27,239
Well not as one, two, three, and why is one?

922
00:45:27,400 --> 00:45:29,159
So you're going to get X is now thirty one

923
00:45:30,000 --> 00:45:32,320
and be able to see what the parsa is picking

924
00:45:32,400 --> 00:45:34,519
up because a lot of that stuff happens at past

925
00:45:34,559 --> 00:45:37,000
time because it's not going to change, it's it's baked in,

926
00:45:37,639 --> 00:45:40,079
and so visualizing the pasetree for that and yeah, at

927
00:45:40,119 --> 00:45:42,400
this point you're absolutely right. You're like, well, the grammar

928
00:45:42,480 --> 00:45:46,320
is now decoupled from the interpreter to the extent that

929
00:45:46,400 --> 00:45:48,320
if you wanted to, you could build a different grammar

930
00:45:48,400 --> 00:45:51,119
on top of it and still use the same back end,

931
00:45:51,159 --> 00:45:52,000
the same interpreters.

932
00:45:52,079 --> 00:45:54,960
Speaker 1: Fascinating kind of stuff on it. So, in this new

933
00:45:55,079 --> 00:45:57,840
version for dot net, did you have any breaking changes

934
00:45:57,920 --> 00:46:00,480
and did both of your users complain about it?

935
00:46:00,760 --> 00:46:13,159
Speaker 2: Or yes? And yes you should come down every shown.

936
00:46:16,920 --> 00:46:21,119
So yes, there was a certain inevitable number of breaking changes,

937
00:46:21,639 --> 00:46:23,960
some of which were just stuff that, like I mentioned

938
00:46:24,000 --> 00:46:25,679
a moment ago, we had a push and pop and

939
00:46:25,800 --> 00:46:28,480
rock and roll and actually push and pop was backwards.

940
00:46:28,599 --> 00:46:31,079
When I baked that in pop didn't do what popping

941
00:46:31,119 --> 00:46:33,320
a stack does, and I was like, I'm going to

942
00:46:33,360 --> 00:46:36,760
fix that. So push and pop, you know, add an

943
00:46:36,760 --> 00:46:39,639
element to the end and remove the final element, and

944
00:46:39,760 --> 00:46:42,360
then rock and Roll will add elements to the end,

945
00:46:42,480 --> 00:46:44,760
but they will remove elements from the beginning, which is

946
00:46:44,840 --> 00:46:48,239
analogous to shift and unshift in JavaScript. So that was

947
00:46:48,320 --> 00:46:52,599
just fixing something that was broken. And there were a

948
00:46:52,639 --> 00:46:55,000
couple of so the there's a test suite. The really

949
00:46:55,079 --> 00:46:59,039
nice thing is the community contributed a test suite for Rockstar.

950
00:46:59,159 --> 00:47:03,159
One was a set of about sixty Rockstar programs, and

951
00:47:03,760 --> 00:47:06,119
the testing here was just here's a program, and here's

952
00:47:06,119 --> 00:47:10,079
a text file containing its output, and so whatever language

953
00:47:10,119 --> 00:47:12,039
you're using to implement it, you're going to read this,

954
00:47:12,400 --> 00:47:14,400
run it, and compare your output to that, and if

955
00:47:14,440 --> 00:47:18,400
it works, then it passes. And that proved incredibly useful

956
00:47:18,480 --> 00:47:22,599
in terms of, you know, understanding backward compatibility. And I

957
00:47:22,679 --> 00:47:24,480
got to a point where it was one hundred percent

958
00:47:24,639 --> 00:47:26,800
no breaking changes, and I was like, right, there are

959
00:47:26,840 --> 00:47:29,039
now some things I'm going to break on purpose, and

960
00:47:29,239 --> 00:47:33,119
one of them was so using is as an assignment

961
00:47:33,199 --> 00:47:36,360
operator used to be like, if you say desire is

962
00:47:36,400 --> 00:47:38,840
a love struck lady killer, the word is there in

963
00:47:39,000 --> 00:47:42,480
that very specific context, would pase a love struck lady

964
00:47:42,559 --> 00:47:44,519
killer as a as a literal, it would count the words.

965
00:47:45,159 --> 00:47:46,800
And I wanted to be able to say. I kept

966
00:47:47,000 --> 00:47:51,679
in my own code writing things like X is with five,

967
00:47:51,840 --> 00:47:54,280
which is X plus equals five like incremental, but it

968
00:47:54,280 --> 00:47:56,039
wouldn't work because it would passe with as a four

969
00:47:56,079 --> 00:47:58,719
and get excess now you know, forty one or something.

970
00:47:59,239 --> 00:48:01,280
So I just I broke that. I said, a poetic

971
00:48:01,360 --> 00:48:03,880
literal can't start with a keyword. Okay, if it's a

972
00:48:03,960 --> 00:48:05,960
keyword that can start an expression, then you're going to

973
00:48:06,039 --> 00:48:08,559
interpret that as an American expression or a logic expression,

974
00:48:08,920 --> 00:48:10,840
not just count the lengths of the words and.

975
00:48:11,760 --> 00:48:13,400
Speaker 1: Did you find poetic ways around it?

976
00:48:14,039 --> 00:48:17,000
Speaker 2: So what I introduced was like a so anywhere you

977
00:48:17,079 --> 00:48:19,320
have the word like the rest of that line or

978
00:48:19,360 --> 00:48:20,880
the rest of these statement up as far as the

979
00:48:20,960 --> 00:48:24,159
next piece of punctuation is going to be a poetic literal.

980
00:48:24,440 --> 00:48:25,880
So now you can use it in a lot of

981
00:48:25,920 --> 00:48:29,199
different places. You can say, you know, if my love

982
00:48:29,360 --> 00:48:32,400
is like a burning forest, and it's like, well, my

983
00:48:32,519 --> 00:48:35,239
love is a variable, and like a burning forest is

984
00:48:35,320 --> 00:48:38,159
going to give you as one burning seven forest six.

985
00:48:38,519 --> 00:48:40,920
So that's if this is one seventy six, and so

986
00:48:41,159 --> 00:48:43,000
if you want to you can use that. I don't know,

987
00:48:43,079 --> 00:48:45,679
whatever ask you one seventy six is you can compare

988
00:48:45,760 --> 00:48:51,599
to that. And there's this weird moment where you start

989
00:48:51,719 --> 00:48:57,039
realizing that things things like that which you hadn't considered

990
00:48:57,079 --> 00:49:00,320
that use case when you design the building blocks for it.

991
00:49:00,679 --> 00:49:04,440
They just kind of emer And you know, we were

992
00:49:04,480 --> 00:49:06,599
talking earlier in the in the show at the beginning,

993
00:49:06,639 --> 00:49:08,800
you folks are talking about using machine learning to in

994
00:49:08,960 --> 00:49:11,840
games and AI to generate that. And earlier this year

995
00:49:11,840 --> 00:49:14,440
I played through boulders Gate three and I absolutely loved it.

996
00:49:14,519 --> 00:49:15,880
And one of the things I loved about it is

997
00:49:15,960 --> 00:49:18,440
that it is the kind of game that's like, yeah,

998
00:49:18,519 --> 00:49:21,559
we're gonna the game engine is solid enough that you

999
00:49:21,679 --> 00:49:24,840
can do stuff that the game designers did not imagine.

1000
00:49:25,280 --> 00:49:27,079
Like you got an eight percent chance if you try

1001
00:49:27,119 --> 00:49:28,880
to turn the god of Death into a sheep it's

1002
00:49:28,960 --> 00:49:29,480
going to work.

1003
00:49:30,280 --> 00:49:32,599
Speaker 1: Now that's not a rock Star line, right there is it?

1004
00:49:36,440 --> 00:49:41,000
Speaker 2: It would probably work, It might compile, And you know,

1005
00:49:41,119 --> 00:49:44,599
I love that sense that there is a foundation here

1006
00:49:44,960 --> 00:49:50,360
that just leads to these wonderful, little you know, idiosyncrat

1007
00:49:50,480 --> 00:49:53,400
page cases. They go oh, oh, I guess that works,

1008
00:49:53,719 --> 00:49:55,960
and it does work, and you're like, oh, that's weird.

1009
00:49:56,440 --> 00:49:59,840
Speaker 1: It takes your brain in a way that regular programming

1010
00:50:00,039 --> 00:50:03,800
languages just don't do. Like, you know, you're firing a

1011
00:50:03,840 --> 00:50:06,760
lot of synapses when you're writing Rockstar, a lot more

1012
00:50:06,800 --> 00:50:08,400
in a different part of your brain, I think than

1013
00:50:08,440 --> 00:50:10,000
if you're writing C sharp for example.

1014
00:50:10,239 --> 00:50:12,880
Speaker 2: Yeah, and it also, you know, it decouples. It is

1015
00:50:12,960 --> 00:50:16,000
programming for the joy of programming, because you can't solve

1016
00:50:16,039 --> 00:50:20,519
any real problems with it, and so it absolutely reinforces

1017
00:50:20,719 --> 00:50:23,480
the no. No, you're doing this because it is fun.

1018
00:50:23,679 --> 00:50:25,800
You're doing this because there was a yeah, I know.

1019
00:50:25,960 --> 00:50:29,039
Speaker 3: It's it's such a great Kata approach, right yea, just

1020
00:50:30,000 --> 00:50:33,480
really exercise thinking about how you'd solve something in and

1021
00:50:33,599 --> 00:50:34,679
teaching kids.

1022
00:50:35,280 --> 00:50:38,000
Speaker 1: They must love it, right, I mean, can you imagine

1023
00:50:38,079 --> 00:50:41,320
having a rock star programming class at a high school

1024
00:50:41,440 --> 00:50:43,119
or something? Kids would flock.

1025
00:50:43,239 --> 00:50:45,679
Speaker 2: I know a couple of people who tried it, kids

1026
00:50:45,840 --> 00:50:50,400
like fifteen sixteen above. They got the joke because probably

1027
00:50:50,519 --> 00:50:54,039
their dad listen to and they're like oh, you made

1028
00:50:54,079 --> 00:50:56,199
a programming language out of my dad's collmusic.

1029
00:50:56,280 --> 00:50:59,119
Speaker 1: All right, let's sealk with it his album collection.

1030
00:51:00,920 --> 00:51:03,639
Speaker 2: Kids younger than that, they don't really get like because

1031
00:51:03,679 --> 00:51:05,719
a certain amount of it is this makes no sense

1032
00:51:05,880 --> 00:51:08,280
unless it makes you laugh, right right, and it does

1033
00:51:08,519 --> 00:51:11,960
make people laugh, you know. The acid test for Rockstar

1034
00:51:12,159 --> 00:51:14,920
is are people still laughing at this? And they are?

1035
00:51:15,119 --> 00:51:18,400
Speaker 3: You know, it's very cool. So yeah, what about the

1036
00:51:18,559 --> 00:51:21,639
error messages? Can you write clam rock error messages?

1037
00:51:22,440 --> 00:51:26,320
Speaker 2: So it tried. I tried very hard to emulate the

1038
00:51:26,960 --> 00:51:30,400
JavaScript approach of you know, don't fail like if you can,

1039
00:51:30,599 --> 00:51:34,159
if you possibly can. There's no exception throwing or handling.

1040
00:51:34,679 --> 00:51:37,679
Everything returns something. It's just that sometimes it returns a

1041
00:51:37,800 --> 00:51:41,599
zero or an empty string, or it returns mysterious. Getting

1042
00:51:41,639 --> 00:51:45,199
the PASA to generate good error messages that was difficult,

1043
00:51:45,320 --> 00:51:47,480
and that's actually still something that I'm not one hundred

1044
00:51:47,519 --> 00:51:51,519
percent happening with because the nature of a pausing expression

1045
00:51:51,599 --> 00:51:55,320
grammar is very much hey, check that input against all

1046
00:51:55,360 --> 00:51:58,039
of these patterns, and if none of them match, then

1047
00:51:58,079 --> 00:52:01,159
it can't tell you where it failed. It can just say, hey,

1048
00:52:01,199 --> 00:52:04,000
I tried all this, and there wasn't a program, and

1049
00:52:04,079 --> 00:52:05,960
you're like, well, where wasn't there a program? It's like

1050
00:52:06,039 --> 00:52:11,559
there that whole thing wasn't a program, and one kind

1051
00:52:11,559 --> 00:52:13,400
of a stretch golfer. There's something that I've been working on,

1052
00:52:13,440 --> 00:52:14,880
but I haven't got at working yet. There is a

1053
00:52:16,199 --> 00:52:18,159
thing called a code mirror. You know code mirror. It's

1054
00:52:18,199 --> 00:52:21,960
the code editor that's built into web pages. And the

1055
00:52:22,239 --> 00:52:26,599
code mirror. Syntax highlighting uses something called a laser grammar.

1056
00:52:26,719 --> 00:52:32,519
Eliezer and laser grammar is the I've completely forgotten his name.

1057
00:52:32,639 --> 00:52:36,599
The guy who created this basically was like, look, compiling

1058
00:52:37,360 --> 00:52:41,000
a grammar for syntax highlighting is not the same as

1059
00:52:41,079 --> 00:52:44,639
compiling a programming language. You are going to run because

1060
00:52:44,679 --> 00:52:46,920
you think about syntax highlighting, like if you make a mistake,

1061
00:52:46,960 --> 00:52:48,559
you know on the syntax high learning to be off

1062
00:52:48,599 --> 00:52:51,039
for the whole rest of the file. You want it

1063
00:52:51,079 --> 00:52:53,280
to recover as soon as it can. It needs to

1064
00:52:53,320 --> 00:52:57,199
be like, well the rest didn't make sense, yeah, and

1065
00:52:57,440 --> 00:52:59,440
so you know the laser grammar for it. And I

1066
00:52:59,559 --> 00:53:02,039
spent a that two weeks trying to write a laser

1067
00:53:02,079 --> 00:53:04,920
grammar so I can have syntax highlighting for Rockstar. And

1068
00:53:05,199 --> 00:53:09,039
because the pausing expression grammar is like, try this. If

1069
00:53:09,079 --> 00:53:11,039
that doesn't work, try this. If that doesn't work, try this,

1070
00:53:11,519 --> 00:53:14,039
whereas the laser grammar is like try this, it works

1071
00:53:14,119 --> 00:53:16,079
or it doesn't, we don't care. It doesn't have this

1072
00:53:16,239 --> 00:53:19,239
notion of kind of backtracking and trying another one and

1073
00:53:19,280 --> 00:53:21,320
backtracking trying on to And that's the point where my

1074
00:53:21,440 --> 00:53:23,960
brain just went, now, yeah, yeah, no no no no

1075
00:53:24,039 --> 00:53:25,840
no no no, you're tired and you're never going to

1076
00:53:25,880 --> 00:53:29,119
figure this out right now. So I parked that until

1077
00:53:29,199 --> 00:53:32,480
life was a little more conducive to spending six hours

1078
00:53:32,679 --> 00:53:37,119
reading up on code grammars and stuff. And it is

1079
00:53:37,239 --> 00:53:41,400
a I mean, it's code Mirror is a phenomenally impressive project,

1080
00:53:41,480 --> 00:53:44,280
but it's also Codemera reversion five was like, put this

1081
00:53:44,440 --> 00:53:46,920
JavaScript file on your website and you got syntax highlighting.

1082
00:53:47,320 --> 00:53:51,440
Codemera reversion six is like, here are sub atomic particles.

1083
00:53:51,599 --> 00:53:53,599
You should be able to use them to build a universe.

1084
00:53:54,320 --> 00:53:56,440
And you're like, I don't know how to do that,

1085
00:53:56,920 --> 00:53:59,320
and you know the builds that like, you've got to

1086
00:53:59,360 --> 00:54:01,679
define your grammar, you got to find your syntax, you've

1087
00:54:01,679 --> 00:54:04,920
got to find your keyword operations. Then you've got to

1088
00:54:05,000 --> 00:54:08,360
build in a JavaScript built step that. So the editor

1089
00:54:08,440 --> 00:54:09,920
that's on there, it is actually code mirror, but it

1090
00:54:09,960 --> 00:54:11,039
has no syntax highlighting.

1091
00:54:11,199 --> 00:54:12,079
Speaker 1: It just okay.

1092
00:54:13,039 --> 00:54:14,880
Speaker 2: So that's something I'm either going to come back to

1093
00:54:15,039 --> 00:54:17,159
or I'm going to nerd snipe the Internet. It's going

1094
00:54:17,199 --> 00:54:19,679
to go on like you know, Blue Sky and be like, hey,

1095
00:54:19,840 --> 00:54:22,559
I just discovered that code Mirror can't pass Rockstar because

1096
00:54:22,599 --> 00:54:25,320
Rockstar is too complicated, and give it. Give it forty

1097
00:54:25,360 --> 00:54:29,320
eight hours and somebody will be like you're wrong. I'm like, oh, yeah,

1098
00:54:29,679 --> 00:54:33,599
thank you great, I'm willing to be wrong.

1099
00:54:33,840 --> 00:54:38,360
Speaker 1: Yeah, So that's something you're thinking of any other new

1100
00:54:38,440 --> 00:54:40,639
features in the next version.

1101
00:54:40,480 --> 00:54:44,199
Speaker 2: You think, So, you know, the appetite has always been there.

1102
00:54:44,239 --> 00:54:46,480
People are like, we want file system I owe, and

1103
00:54:47,320 --> 00:54:50,679
you know the challenge there or even just a module system,

1104
00:54:50,840 --> 00:54:53,159
like a way of having code in one file. And

1105
00:54:53,400 --> 00:54:56,599
the best proposal that we've kind of seen there's a

1106
00:54:56,639 --> 00:54:58,719
couple of us who bounced the stuff around on GitHub

1107
00:54:58,800 --> 00:55:02,480
issues is that. So you know, if you open like

1108
00:55:02,559 --> 00:55:04,280
the sleeve notes for a record, you've got.

1109
00:55:04,199 --> 00:55:08,360
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
Speaker 2: Like you take an MP three and what you do

1111
00:55:13,119 --> 00:55:16,039
is you you cut the MP three into a piece

1112
00:55:16,079 --> 00:55:19,760
of wax, and when the MP three is very wobbly,

1113
00:55:19,920 --> 00:55:22,119
you make a very wobbly cut, and when the MP

1114
00:55:22,280 --> 00:55:24,480
three is very still, you make a very straight cut,

1115
00:55:24,880 --> 00:55:27,280
and then you turn the wax round and round and round.

1116
00:55:27,559 --> 00:55:30,719
Speaker 1: That's fascinating with it. And it comes with a piece

1117
00:55:30,719 --> 00:55:32,559
of paper obviously that you can read.

1118
00:55:32,920 --> 00:55:37,880
Speaker 2: Yeah, So for our younger listeners at the Apple, music

1119
00:55:38,000 --> 00:55:41,039
used to come on on LPs, and LPs came with

1120
00:55:41,159 --> 00:55:43,559
sleeve notes, which is where you could read about your

1121
00:55:43,599 --> 00:55:45,880
bands because the Internet wasn't invented yet, so if you

1122
00:55:45,920 --> 00:55:49,800
wanted to read, that was all you had. Yeah, And

1123
00:55:50,119 --> 00:55:51,679
you know, somebody said, well you got the title and

1124
00:55:51,760 --> 00:55:54,800
then after that you got like, you know, drums, Dylan

1125
00:55:55,559 --> 00:56:00,960
Carl guitar, Comma synth, programming, Richard Moraccus voice, and you're like,

1126
00:56:00,960 --> 00:56:04,079
all right, yeah too, And so you could use like

1127
00:56:04,519 --> 00:56:08,039
the musician is the file name, and then the instrument

1128
00:56:08,159 --> 00:56:10,800
credits are the things you want to import from it

1129
00:56:10,960 --> 00:56:14,400
HU and you're like that that would kind of work,

1130
00:56:15,239 --> 00:56:17,239
and then you're like, but then how do you use

1131
00:56:17,320 --> 00:56:21,840
that within the program to be like, so, you know,

1132
00:56:22,519 --> 00:56:26,519
Richard's guitar taking a solo might be find the guitar

1133
00:56:26,639 --> 00:56:29,639
function which was exported by the Richard module and pass

1134
00:56:29,840 --> 00:56:33,039
a solo into it as an argument, and and you know,

1135
00:56:33,119 --> 00:56:35,159
none of the stuff's impossible, but there's a point where

1136
00:56:35,199 --> 00:56:37,280
it just starts to feel so convoluted.

1137
00:56:39,079 --> 00:56:41,239
Speaker 1: Well, you know, I was just about to say, you know,

1138
00:56:41,320 --> 00:56:43,440
do you ever find yourself at three am after working

1139
00:56:43,519 --> 00:56:45,559
on this for six hours just asking yourself what the

1140
00:56:45,719 --> 00:56:46,760
hell am I doing?

1141
00:56:50,159 --> 00:56:53,840
Speaker 2: Actually the worst, the point where that kicks in the

1142
00:56:53,960 --> 00:56:57,000
highest is when I've been doing you know, the presentation

1143
00:56:57,159 --> 00:57:00,800
talking about esoteric languages and you know that kind of stuff,

1144
00:57:01,039 --> 00:57:03,519
and it builds up to the big fizz buzz outro

1145
00:57:03,679 --> 00:57:06,480
with the guitar and everything, and the audience is like,

1146
00:57:06,880 --> 00:57:10,239
he's not really good to do? This is And it's

1147
00:57:10,280 --> 00:57:12,679
a bit of my brain that is just going you

1148
00:57:12,760 --> 00:57:16,039
are about to sing the word fizz buzz to an

1149
00:57:16,119 --> 00:57:20,079
audience of eight hundred Java developers. What are you doing

1150
00:57:20,159 --> 00:57:22,360
with your life? Like? How did it get to this?

1151
00:57:23,719 --> 00:57:24,280
Speaker 1: So cool?

1152
00:57:24,679 --> 00:57:26,840
Speaker 2: And the thing is it's the word fizz buzz. I

1153
00:57:26,960 --> 00:57:29,000
was like, if it wasn't that word, like I would

1154
00:57:29,039 --> 00:57:31,760
be cool with this. And so what we can do

1155
00:57:31,960 --> 00:57:34,760
now with this ninja string thing? Is. So I'm just

1156
00:57:35,039 --> 00:57:37,679
going to give you, like about thirty seconds of lyrics.

1157
00:57:38,400 --> 00:57:42,239
So my dream is diamond nightmares, My suffering is the sea.

1158
00:57:42,800 --> 00:57:45,920
My scream is hollow hatred. Your love is meaningless to me.

1159
00:57:46,719 --> 00:57:49,639
Rock my dream like a razor blade. Smile, rock my

1160
00:57:49,800 --> 00:57:52,840
dream with your love, your love, rock my scream like

1161
00:57:52,920 --> 00:57:56,639
a switchblade. Missile, rock my scream with your love, your love,

1162
00:57:57,920 --> 00:58:01,079
and you take that apart, and you is meaningless to me,

1163
00:58:01,280 --> 00:58:03,960
so meaningless to me. It gives you one twenty two

1164
00:58:04,559 --> 00:58:07,400
in ASCI, which is the letter Z. So rock my

1165
00:58:07,480 --> 00:58:09,960
screen with your love. Your love puts z Z on

1166
00:58:10,000 --> 00:58:12,199
the end of a stringer building, and so that that

1167
00:58:12,360 --> 00:58:14,960
builds fiz Bus. With that you ever actually having to

1168
00:58:15,079 --> 00:58:17,880
say it, it's great and that kind of that that

1169
00:58:18,039 --> 00:58:20,559
solved the problem for me because it's like this is

1170
00:58:20,719 --> 00:58:24,320
now plausible all the way down. Like you, you could

1171
00:58:24,360 --> 00:58:26,880
perform fiz Bus to an audience who just thought that

1172
00:58:27,039 --> 00:58:29,400
this was you know, like we're not talking Grammy when

1173
00:58:29,760 --> 00:58:32,000
it maybe like the B side to a meatless record,

1174
00:58:32,280 --> 00:58:34,320
But they'd be like, yeah, all right, that works.

1175
00:58:34,880 --> 00:58:39,360
Speaker 1: Maybe some Italian developer will create a language based in

1176
00:58:39,559 --> 00:58:45,199
opera lyrics like Italian opera, you know, with with completely

1177
00:58:45,280 --> 00:58:46,480
different language.

1178
00:58:47,360 --> 00:58:50,079
Speaker 2: So asking about the future of it. So you know,

1179
00:58:50,119 --> 00:58:51,760
there's there's opera that shape, there's all kinds of things

1180
00:58:51,800 --> 00:58:53,440
you can do with the grammar. But the question I

1181
00:58:53,480 --> 00:58:55,239
get asked more than anything else, is is there a

1182
00:58:55,360 --> 00:59:00,440
way that you could generate music from the source. Of

1183
00:59:00,519 --> 00:59:04,599
course there is, and at that point that's really interesting

1184
00:59:04,679 --> 00:59:07,679
because then you'd have a piece of writing which was

1185
00:59:07,760 --> 00:59:12,320
simultaneously a set of lyrics and a compilable program and

1186
00:59:12,840 --> 00:59:15,840
the definition of the melody or the chords or whatever.

1187
00:59:16,000 --> 00:59:18,360
And so that's something and you.

1188
00:59:18,400 --> 00:59:20,719
Speaker 1: Know that'd be tricky to write. That'd be even harder

1189
00:59:20,760 --> 00:59:22,800
to write than just lyrics to a song, because you

1190
00:59:22,920 --> 00:59:26,000
have to make the lyrics fit a melody. So you

1191
00:59:26,079 --> 00:59:27,880
have a pattern, you have a constraint, you have a

1192
00:59:27,960 --> 00:59:29,440
pattern that you have to follow.

1193
00:59:29,559 --> 00:59:32,920
Speaker 2: You've introduced a third constraint to it because you know,

1194
00:59:33,000 --> 00:59:34,920
something that I played around with is, well, we'll just

1195
00:59:35,000 --> 00:59:37,159
take the text and like anytime we see a letter

1196
00:59:37,679 --> 00:59:40,599
that is a note on the major scale, we'll hold

1197
00:59:40,679 --> 00:59:43,320
that note for as many letters as it takes till

1198
00:59:43,360 --> 00:59:45,559
we get to the next one. And that gives you

1199
00:59:45,679 --> 00:59:46,199
a melody.

1200
00:59:46,280 --> 00:59:48,159
Speaker 1: But it's not a musically.

1201
00:59:49,320 --> 00:59:51,559
Speaker 2: Well, and you're like, well, if you if you wanted

1202
00:59:51,679 --> 00:59:54,360
to be able to write the melody that went with

1203
00:59:54,440 --> 00:59:57,159
the lyrics. So yeah, I have a lot of ideas

1204
00:59:57,239 --> 00:59:58,960
on that one, but nothing yet that has kind of,

1205
00:59:59,199 --> 00:59:59,960
you know, caught fire.

1206
01:00:00,159 --> 01:00:02,519
Speaker 1: So you could do melodies. I mean a melody is

1207
01:00:02,760 --> 01:00:05,400
a note and a duration, right, I mean that's really

1208
01:00:05,480 --> 01:00:08,719
all it is. But now in musical notation you can

1209
01:00:08,800 --> 01:00:13,400
do chords, which is three notes with multiple durations or

1210
01:00:13,480 --> 01:00:17,400
morm notes at the same time. So it gets very complicated,

1211
01:00:18,360 --> 01:00:18,679
it does.

1212
01:00:19,599 --> 01:00:22,119
Speaker 2: And uh, and there is another idea that kind of

1213
01:00:22,199 --> 01:00:25,480
emerges from all of this, which is, could you could

1214
01:00:25,519 --> 01:00:28,440
you write a programming language that used sheet music instead

1215
01:00:28,440 --> 01:00:31,880
of asking as its input? Could you actually create a

1216
01:00:32,000 --> 01:00:34,679
turin complete compiler for musical notation?

1217
01:00:35,039 --> 01:00:37,199
Speaker 1: So then, oh my god, I'm not going to sleep tonight.

1218
01:00:38,800 --> 01:00:40,079
Lyrics completely.

1219
01:00:40,199 --> 01:00:41,000
Speaker 2: You are insane.

1220
01:00:41,440 --> 01:00:45,639
Speaker 1: Friend, Good lord.

1221
01:00:46,480 --> 01:00:47,719
Speaker 2: I have a little thing in the back of my

1222
01:00:47,760 --> 01:00:49,440
brain that just comes up with the stuff twenty for

1223
01:00:49,599 --> 01:00:51,400
us seven days a week. Hey, what about this?

1224
01:00:51,639 --> 01:00:52,079
Speaker 1: What about that?

1225
01:00:52,280 --> 01:00:52,719
Speaker 2: You could do this?

1226
01:00:52,920 --> 01:00:57,519
Speaker 1: That's so exciting, Dylan. Thanks, thanks for thanks for you know,

1227
01:00:57,840 --> 01:00:59,840
keeping us abreast of what's going on and where can

1228
01:00:59,880 --> 01:01:00,360
we get.

1229
01:01:00,360 --> 01:01:03,119
Speaker 2: Rockstar code with Rockstar dot com.

1230
01:01:03,280 --> 01:01:03,719
Speaker 1: Perfect.

1231
01:01:04,079 --> 01:01:06,400
Speaker 2: You gonna check that out and by the time the

1232
01:01:06,440 --> 01:01:08,920
show comes out, that will be the all singing, all

1233
01:01:09,039 --> 01:01:12,400
Dancing dot eight But you don't care because it just works.

1234
01:01:13,079 --> 01:01:15,440
The binaries will be up on GitHub, so if you

1235
01:01:15,480 --> 01:01:18,159
want to run it locally, that's on Linux, mac Os

1236
01:01:18,239 --> 01:01:20,320
and Windows, or you just run it in a browser.

1237
01:01:20,840 --> 01:01:23,039
And the whole idea is it's out there in time

1238
01:01:23,079 --> 01:01:25,639
anyone who wants to do adventive code and Rockstar thisea.

1239
01:01:25,760 --> 01:01:28,480
You don't have to install note js. That's my Christmas

1240
01:01:28,599 --> 01:01:31,719
gift beautiful to all of you lovely, lovely people out there.

1241
01:01:32,000 --> 01:01:34,760
Speaker 1: Son, it's always a pleasure to talk to you. Maybe

1242
01:01:34,760 --> 01:01:36,039
we'll see you in one of these so much fun

1243
01:01:36,159 --> 01:01:37,400
conferences somewhere.

1244
01:01:37,719 --> 01:01:39,480
Speaker 2: Thanks so much for having me on the show. Folks,

1245
01:01:39,559 --> 01:01:40,480
It is always a pleasure.

1246
01:01:40,519 --> 01:01:43,559
Speaker 1: Slowly and we'll talk to you next time on dot

1247
01:01:43,679 --> 01:01:44,360
net rocks.

1248
01:02:04,800 --> 01:02:07,320
Speaker 4: Dot net Rocks is brought to you by Franklin's Net

1249
01:02:07,639 --> 01:02:11,559
and produced by Pop Studios, a full service audio, video

1250
01:02:11,639 --> 01:02:15,679
and post production facility located physically in New London, Connecticut,

1251
01:02:15,960 --> 01:02:20,159
and of course in the cloud online at pwop dot com.

1252
01:02:21,000 --> 01:02:23,039
Visit our website at d O T N E t

1253
01:02:23,360 --> 01:02:27,320
R O c k S dot com for RSS feeds, downloads,

1254
01:02:27,519 --> 01:02:31,159
mobile apps, comments, and access to the full archives going

1255
01:02:31,239 --> 01:02:34,639
back to show number one, recorded in September two thousand

1256
01:02:34,639 --> 01:02:34,880
and two.

1257
01:02:35,519 --> 01:02:37,840
Speaker 1: And make sure you check out our sponsors. They keep

1258
01:02:37,960 --> 01:02:41,039
us in business. Now go write some code. See you

1259
01:02:41,159 --> 01:02:41,559
next time.

1260
01:02:42,480 --> 01:02:46,440
Speaker 2: You got javans and

