WEBVTT
1
00:00:01.080 --> 00:00:03.000
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
There you go.
12
00:00:43.399 --> 00:00:45.600
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
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
Well?
23
00:01:20.280 --> 00:01:22.480
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
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
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
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
And the hallucinations add bonus entertainment in a fantasy world that.
47
00:02:42.599 --> 00:02:45.479
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
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
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
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
In nineteen twenty three, I mentioned the beer hall pushed right.
66
00:03:40.360 --> 00:03:42.919
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
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
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
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
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
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
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
Sound that long ago, is it?
124
00:06:57.040 --> 00:06:57.319
Yeah?
125
00:06:57.360 --> 00:07:01.199
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
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
And in the last ten years they've all been fonts.
139
00:07:46.879 --> 00:07:48.759
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
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
Nice.
144
00:07:56.240 --> 00:07:58.399
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
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
From nine years ago.
157
00:08:35.480 --> 00:08:39.000
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
That's how I taught myself.
173
00:09:22.080 --> 00:09:24.720
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Are you saying you don't like Linux and are the majority?
272
00:13:30.440 --> 00:13:34.679
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
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
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
Because they always ask for rock Star developers.
289
00:14:24.240 --> 00:14:26.200
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
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
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
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
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
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
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
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
Right, I remember this story.
406
00:20:21.319 --> 00:20:24.599
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
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
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
Get the chat right.
439
00:21:50.279 --> 00:21:52.160
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
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
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
Yeah, yeah, exactly.
480
00:23:42.319 --> 00:23:45.920
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
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
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
You know.
541
00:26:39.000 --> 00:26:41.920
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
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
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
You are stuff.
575
00:28:17.599 --> 00:28:20.839
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
Now, yeah, it's really great.
578
00:28:24.279 --> 00:28:26.759
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
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
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
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
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
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
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
Or IBM machine, but the IBM machine.
701
00:34:57.400 --> 00:34:59.880
Yeah again, an IBM business machine. Where are you getting that?
702
00:35:00.000 --> 00:35:00.079
Oh?
703
00:35:00.199 --> 00:35:06.760
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
In this part.
721
00:35:54.239 --> 00:35:57.519
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
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
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
Of the language.
745
00:36:54.920 --> 00:36:56.920
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
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
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
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
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
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
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
Yeah, well you're like, well, you.
898
00:44:16.880 --> 00:44:19.519
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
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
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
Did you find poetic ways around it?
976
00:48:14.039 --> 00:48:17.000
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
Now that's not a rock Star line, right there is it?
1004
00:49:36.440 --> 00:49:41.000
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
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
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
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
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
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
All right, let's sealk with it his album collection.
1030
00:51:00.920 --> 00:51:03.639
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
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
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
It just okay.
1092
00:54:13.039 --> 00:54:14.880
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
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
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
The queste a record, I'm sorry, are these things don't It's.
1110
00:55:08.239 --> 00:55:12.519
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
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
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
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
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
So cool?
1152
00:57:24.679 --> 00:57:26.840
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
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
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
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
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
But it's not a musically.
1201
00:59:49.320 --> 00:59:51.559
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
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
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
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
You are insane.
1220
01:00:41.440 --> 01:00:45.639
Friend, Good lord.
1221
01:00:46.480 --> 01:00:47.719
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
What about that?
1225
01:00:52.280 --> 01:00:52.719
You could do this?
1226
01:00:52.920 --> 01:00:57.519
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
Rockstar code with Rockstar dot com.
1230
01:01:03.280 --> 01:01:03.719
Perfect.
1231
01:01:04.079 --> 01:01:06.400
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
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
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
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
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
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
You got javans and
1
00:00:01.080 --> 00:00:03.000
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
There you go.
12
00:00:43.399 --> 00:00:45.600
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
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
Well?
23
00:01:20.280 --> 00:01:22.480
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
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
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
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
And the hallucinations add bonus entertainment in a fantasy world that.
47
00:02:42.599 --> 00:02:45.479
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
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
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
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
In nineteen twenty three, I mentioned the beer hall pushed right.
66
00:03:40.360 --> 00:03:42.919
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
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
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
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
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
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
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
Sound that long ago, is it?
124
00:06:57.040 --> 00:06:57.319
Yeah?
125
00:06:57.360 --> 00:07:01.199
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
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
And in the last ten years they've all been fonts.
139
00:07:46.879 --> 00:07:48.759
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
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
Nice.
144
00:07:56.240 --> 00:07:58.399
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
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
From nine years ago.
157
00:08:35.480 --> 00:08:39.000
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
That's how I taught myself.
173
00:09:22.080 --> 00:09:24.720
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Are you saying you don't like Linux and are the majority?
272
00:13:30.440 --> 00:13:34.679
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
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
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
Because they always ask for rock Star developers.
289
00:14:24.240 --> 00:14:26.200
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
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
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
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
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
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
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
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
Right, I remember this story.
406
00:20:21.319 --> 00:20:24.599
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
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
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
Get the chat right.
439
00:21:50.279 --> 00:21:52.160
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
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
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
Yeah, yeah, exactly.
480
00:23:42.319 --> 00:23:45.920
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
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
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
You know.
541
00:26:39.000 --> 00:26:41.920
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
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
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
You are stuff.
575
00:28:17.599 --> 00:28:20.839
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
Now, yeah, it's really great.
578
00:28:24.279 --> 00:28:26.759
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
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
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
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
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
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
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
Or IBM machine, but the IBM machine.
701
00:34:57.400 --> 00:34:59.880
Yeah again, an IBM business machine. Where are you getting that?
702
00:35:00.000 --> 00:35:00.079
Oh?
703
00:35:00.199 --> 00:35:06.760
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
In this part.
721
00:35:54.239 --> 00:35:57.519
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
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
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
Of the language.
745
00:36:54.920 --> 00:36:56.920
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
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
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
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
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
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
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
Yeah, well you're like, well, you.
898
00:44:16.880 --> 00:44:19.519
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
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
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
Did you find poetic ways around it?
976
00:48:14.039 --> 00:48:17.000
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
Now that's not a rock Star line, right there is it?
1004
00:49:36.440 --> 00:49:41.000
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
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
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
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
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
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
All right, let's sealk with it his album collection.
1030
00:51:00.920 --> 00:51:03.639
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
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
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
It just okay.
1092
00:54:13.039 --> 00:54:14.880
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
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
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
The queste a record, I'm sorry, are these things don't It's.
1110
00:55:08.239 --> 00:55:12.519
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
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
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
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
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
So cool?
1152
00:57:24.679 --> 00:57:26.840
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
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
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
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
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
But it's not a musically.
1201
00:59:49.320 --> 00:59:51.559
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
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
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
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
You are insane.
1220
01:00:41.440 --> 01:00:45.639
Friend, Good lord.
1221
01:00:46.480 --> 01:00:47.719
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
What about that?
1225
01:00:52.280 --> 01:00:52.719
You could do this?
1226
01:00:52.920 --> 01:00:57.519
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
Rockstar code with Rockstar dot com.
1230
01:01:03.280 --> 01:01:03.719
Perfect.
1231
01:01:04.079 --> 01:01:06.400
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
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
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
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
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
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
You got javans and