Speaker 1: How'd you like to listen to dot net rocks with
no ads? Easy? Become a patron for just five dollars
a month. You get access to a private RSS feed
where all the shows have no ads. Twenty dollars a month.
We'll get you that and a special dot net Rocks
patron mug. Sign up now at Patreon dot dot NetRocks
dot com. Hey, guess what it's dot net rocks. I'm
Carl Franklin, an amateur Campbell. Well, you didn't have to
guess because you knew because you You pushed the button
to listen, didn't you.
Speaker 2: There you go.
Speaker 3: Yeah, it's just like the old way we telephones. Right
when foleophones is gonning aft to the wall and I
called you, I didn't have to ask you where you
were because you answered the phone you knew where it was.
Speaker 1: Hey, you're home. That's usually what we would say. I'm
glad I got you. Uh wow, comf coming up or
maybe it's already gone by. I'm not sure. We'll take
care of that later, but in the meantime, let's roll
the music for a better no framework awesome? All right,
what do you got?
Speaker 2: Well?
Speaker 1: I think both you guys would be interested in this.
This is Unity Technologies has an mL agents repo. The
Unity Machine Learning Agents Toolkit is an open source project
that enables games and simulations to serve as environments for
training intelligent agents using deep reinforcement learning and imitation learning.
Speaker 3: Hmm interesting, Yeah, certainly it's all been on my radar
because I have a bunch of friends in the gaming
industry that a lot of the generative AI technologies are
being evaluated to make games less expensive to make.
Speaker 1: Ah okay for building games, not necessarily for having intelligent
agents in them.
Speaker 3: Not actually making the game play better, but like instead
of having to voice act every single line and plan
every single line of dialogue out the fact that you
can generate a voice now and you can give it
an area to talk about and it will literally, you know,
just generate to you know, spoken word for you speaks
to game experiences being better where you know, there's not
a fixed path through all of the words anymore. They
could say even more diverse things and you could go
create far more words effectively, you know, imagine your behavior
towards an NPC actually changes the way that NPC speaks
to you, even if they communicate the same facts.
Speaker 1: And the hallucinations add bonus entertainment in a fantasy world that.
Speaker 3: Would be a feature in a game, not a feature
in real life. But yes, exactly right. But tier one
video games to the billion dollar games, of which is
maybe ten a year, cost a couple hundred million to make,
and so you can't make more. It's very high risk intolerance.
So the idea that we'd reduce the cost of game creation,
democracize some of this technology, it's pretty compelling.
Speaker 1: Well, Richard, before we get into the message that you
want to read, let's talk about what happened in nineteen
twenty four twenty four.
Speaker 2: This is Oh, you got any favorite highlights for nineteen
twenty four?
Speaker 1: Yeah, so this is episode nineteen twenty four, and Dylan
you can chime in here too. As we're getting further
and further up in history, I thought, you know, let's
highlight some of the things that happened that year. Some
of them may or may not be relevant to what's
going on today.
Speaker 2: In nineteen twenty three, I mentioned the beer hall pushed right.
Speaker 1: That's right, So there are consequences for Adolf Hitler in
twenty four and.
Speaker 3: Twenty four is when his trial is and he's quote,
you know, imprisoned for five years, but he's out in
nine months.
Speaker 1: Out in nine months. Yeah, that's right. Yeah, right's mind
camp while he's at it. Yeah, so that must have
really made him mad and that may have contributed to
his whatever. Okay. So January twenty fifth, the first Winter
Olympics nineteen twenty four Winter Olympics open in Shawnee, Chemnois
in the French Alps. Sorry French people, I do not
speak French.
Speaker 2: Chemony. It's a tremendous apport, ah because billionaires use it
to fly in ghostkiing for a day and then fly
out again. And it's one of those strips that you
kind of there's a suddin point where you kind of
need to fall off the end and get up enough
sp that you can pull up at the other side
of that nice It is true the walk.
Speaker 1: Yeah, and that was the voice of Dylan Beattie, who
does interesting things with computer's code, comedy, music, and video,
then travels all over the world and tells people about it. Hello, Okay,
so I got his buy out out of the way.
January twenty six, Petrograd, which is Saint Petersburg, is renamed
Leningrad and it'll revert to Saint Petersburg in nineteen ninety one.
February fifth, gmt A radio time signals broadcast for the
first time from the Royal Greenwich observ Cool nod to
Richard there, that's a good one, yeah. February fourteenth, the
Computing Tabulating Recording Company CTR, based in the US state
of New York, is renamed to IBM IBM. March twenty fourth,
Jean Sibelius or Jean Sabelius conducts the world premiere of
his symphony Number seven in Stockholm. March twenty fifth, the
Second Hellenic Republic is proclaimed in Greece. April first is
when Hitler was sentenced to five years in Landesburg prison
for his participation in the Beer Hall. Butch April sixth
Italian general election nineteen twenty four, Fascists win the elections
in Italy with a two thirds majority. April seventeen, Metro
Pictures Corporation, Goldwyn Pictures and Louis B. Mayer Productions are
merged to become MGM. May thirtieth, Italian socialist leader Jacomo
Mettier Mettioti, matt Tiati. I'm going with Mattiati speaks out
against fascism. A few days later, he's kidnapped and murdered
in Rome. September nineth through eleventh, the kahlhat and riots
breakout in India. October tewod the Geneva Protocol is adopted
by the League of Nations Assembly as a means to
strengthen the League, but later fails to be ratified. November tenth,
the trial one hundred and forty nine begins in Estonia,
eventually resulting in the conviction of one hundred and twenty
nine communists, including several members of the Reche cow. I
don't know how to say that, but.
Speaker 3: You're also talking about this is the time of the
emergence of the Soviet Union, right, Yeah, that's right. Tendency
of communism YEP.
Speaker 1: December twenty in Germany Hainlf Hitler's release from the prison.
December twenty fourth, Albania becomes republic. In December thirty, American
astronomer Edwin Hubble announces that Andromeda, previously believed to be
a nebula, is actually another galaxy, and that the Milky
Way is only one of many such galaxies in the universe.
Speaker 2: Sound that long ago, is it?
Speaker 1: Yeah?
Speaker 3: I would add one more four is actually the beginning
of the civil war in China that will lead to
the Chinese Communist Revolution. Wow, although they don't really They
say the war started in twenty seven, but Kaichek is
grabbing cities like stuff is up before Mao actually kicks
off the march. It was an interesting year. Two ways
about it.
Speaker 2: Yeah, so you mentioned that is the IBM became IBM.
You know, IBM has averaged four patents a day since then. Wow?
They Yeah. If you average out the number of patents
awarded to IBM engineers over the last century, it's something
like one hundred and fifty hundred years, which is about
four point one patents per day, sustained for one hundred years.
Speaker 1: And in the last ten years they've all been fonts.
Speaker 2: IBM has the largest gone to computer in the world
the moment. It's called the IBM System two.
Speaker 3: There's only one of them, and it's the largest cryo
cooler on the planet.
Speaker 2: Nice.
Speaker 1: Nothing beats you in a blab from the Jetsons, though,
lab Shall I read a comment? Yes? Please? Who's talking
to us? Switch?
Speaker 3: I'll grab a comment. I've jumped into the wayback machine
here and grabbed a comment off the show twelve o three.
So that's from twenty fifteen when we talked about programming
in Go Wow, because I know we're going to have
some conversations in a language with Mike ben Sickel generated
a ton of comments lots of people. It should you know,
back in twenty fifteen, polyglot was already hit. But you
know it's now it's just mainstream. And Aaron has this
great comment, admittedly.
Speaker 1: From nine years ago.
Speaker 3: He said, being passively familiar with many languages and toolkits
provide some value. Commonalities start to jump out at you,
and you can start to develop an understanding of concepts
that transcend a specific language. That said, actually, quote getting
things done does demand a good amount of attention to
a single framework long enough to become effective in it.
The most effective way I know to learn a language
more deeply is to switch from I'm learning X to
I'm trying to get Z done. Go make something right right.
In other words, set out to solve a specific problem
right a small program, contribute to an open source solution.
The quote fear of missing out that people often have
jumping from language language is much suppressed by trying to
get something specific done, especially if you go contribute to
an existing project.
Speaker 1: That's how I taught myself.
Speaker 3: Yeah, yeah, for sure, make something. But I also like
this contribute to open source because if you can get
through a pr in a new language from somebody else
who uses the language meaningfully, like, that's a confirmation you've
learned some things, you're doing it well enough to make
a contribution.
Speaker 1: I always try to make those projects just out of
what I think I can do, just outside the box
of what I think my ability is.
Speaker 2: There's an interesting parallel, like, as I'm sure call, you've
also had folks come up to you like, how do
you learn to play the guitar? I want to learn
a play an instrument. It's like you come like learning
a plan instrument. You start now and you I'll still
be learning when you die. Yeah, but you could learn
to play a song. What's your favorite song? Like like
pick us? Okay, maybe not that one, Maybe pick something
a little easier, a little simpler, but go hook on
the water for a reason, right, And like by the
end of the week, you'll be able to play Smoke
on the Water. Congratulations, Now you're a guitar player. Just
one with a limited repertoire. Yeah, and then you'll learn
another song, another song, another song, and eventually the pieces
start to click and the theory starts to make sense.
Speaker 1: My favorite interaction is and I'm playing the gig and
somebody comes up and says, hey, wow, how long have
you been playing it? Him about forty minutes?
Speaker 3: So, Aaron, thank you so much for your comment, and
a copy of music Koba is on its way to you.
And if you'd like a copy of music Koby, write
a comment on the website at dot net rocks dot
com or on the facebooks. You publish every show there,
and you be comment there and ever reading the show.
We'll send you a copy of music go by.
Speaker 1: And you can follow us on ex Twitter if you like.
We're still there and we've been there for years. But
the cool kids are now hanging out at mastadon. I'm
Carl Franklin at tech hub dot Social and.
Speaker 2: I'm Ridge Campbell the Social. But the really cool kids
are all on Blue Sky now because that's the latest
wave of migration. Was seeing. Yeah, this has been pretty
good right now.
Speaker 3: I got a whole bunch of followers there all of
a sudden, Yeah, yeah, Blue Sky is cool.
Speaker 1: It's very much well, the web interface is very much
like Twitter. Yeah, and that's the kind of what.
Speaker 2: Is Jack Dorsey after all. The big thing that's happened
recently is that they haven't thing called starter packs, so
you can go on and this I think is just
a great feature. Like if you're organizing a conference and
all your speakers are on Blue Sky, you can give
people a starter pack. You like to click one button
and you're going to follow everyone who's speaking, right, that's
pretty good. And so a couple of folks started putting
together like this is the AI starter pack, this is
the you know, three D gaming starter pack. This is
and so you're like, where will all these followers come from?
And then you're like, oh, oh, I'm in a starter pack?
All right? Yeah, and you know it's I was talking
with Rendle about it earlier. It kind of feels like
Blue Sky has got a little better, and the kind
of gets it's a little worse and then better and
then worse, and it's like waves coming up the beach,
but the tide is definitely coming up, and it's getting
closer and closer to hitting what feels like a sort
of critical mass.
Speaker 1: Yeah, yeah, I have my Blue Sky's social account. I
have one hundred and ninety five followers, so not a
whole bunch, but I do post there. I'm at Carl
Franklin dot b sky dot social in case anybody cares.
Speaker 2: So the other thing I really like about the way
Blue Sky is set up is that your handles your domain,
so or if you want to set it up, it
can be. And so if you're you know, I'm dylanbet
dot net, because I'm dylanbet dot net and I have
the DNS and I control the domain, so that's how
you know it's me. So none of those kind of
blue tick verification, right, and you know, like the sort
of big newspapers. If you've got at Washingtonpost dot com,
then that's it. You're the Washington Post. You don't need
blue check marks and stuff. And you can because if
you control the DNS, you can sort of sub delegate it,
so you could have like, you know, Richard dot dot
net rocks and Carl dot dot net rocks, and the
whole mechanism filters down. I'm a big fan of anything
that uses DNS in interesting ways because it's such a
flexible and powerful system that I think has really stood
the test of time.
Speaker 1: So well, we're also making it sound like mere mortals
won't be able to use it, but that's not true.
It's very easy, isn't it.
Speaker 2: Yeah, Yeah, it's that Lenark. If you just want to
sign up, you just sign up and hey, now you're
reading and writing and you don't need like mast it on.
You know. I love what they tried to do with it,
but it feels like Linux. It feels like the people
who get it don't see the problem, and the people
who don't get it, I'm never going to get it.
Speaker 3: Are you saying you don't like Linux and are the majority?
Speaker 2: Linux is a wonderful cloud server operating system and I
will never use it to edit video? Put it that way.
Speaker 1: Ah, good right, Okay, got concern there for a minute.
All right, dyl we're here to talk about to catch
up with you first of all, and talk about some
new things that are happening in your language, rock star.
Why don't you, yeah fill us in on how that
came to be and bring us back a little bit.
Speaker 2: So well, I was trying to figure out what it was.
I can't remember, but I was on the show a
few years back talking about Rockstar, which is a tweet
that turned into a spec that turned into a so
the joke tweet it was, yeah, it's a joke, prank literally, Yeah.
It was a tweet from I think it was Pulster Vell,
the Octopus deploy guy, just saying, hey, you're had a
confused recruiter. Someone should make a language called Rockstar.
Speaker 1: Because they always ask for rock Star developers.
Speaker 2: Yeah, and there was this whole trope of we need
to hire Rockstar developers and we're looking for and you know,
and one of the nice things is that that has
that has gone down a little bit because it and
I think, yeah, yes to you, well, you know me
and all of the other people who have leaned in
on the joke and kind of got with it. And
so this it started out as a parody specification, just
a kind of you know, tongue in cheek piece of
technical writing about like you know, it was one markdown
file on a GitHub po And what I've done is
I tried to take as many cliches from rock and metal,
heavy metal, soft rock and yeah, and see, you know,
is there enough formulaic consistency that you can derive a
grammar from it? And it got it kind of got
too far, too fast for me to give up. Hilarious,
I said to folks before you know that. It was
the three factors behind taking the joke too far. I
had Internet, I had alcohol, and there was no one
that stop it. I was I was meeting friends in
a bar and they were like, I'm like, I wonder
if you could and you know, to stop you. Yeah,
you'd be amazed how much of the fun side of
the web is attributable to those three fures. And so this,
you know, it turned into like a parody spec with
you know, things like you want to write a function,
like you know, most languages, you have the function declaration
and the return type, and then you have some brackets
around the parameter types. And so it's like, well then
you say, well, this function like modulus takes a number
and a divisor, and you're like, all right, well and
we'll use takes a this and that. That's function syntex.
So my function takes first argument and second argument and
you know all kind of thing like variable names with
spaces in them, which is easy to do when you're
designing a language in a bar as a joke, right,
and oh well, we're going to have you know, my variable,
your variable the variable. And you know that the idea
that came from from Crockford, from Douglas Crockford talking about
the whole people arguing about pascal case, camel case, kebab case,
snake case change, and he's like, we want spaces. We
all want the same thing. These are stupid arguments. So
I'm like, he's absolutely right. You know, we want to
be able to have a variable called, you know, customer
account category because that's what it is. And if you're
writing documentation, you don't use pascal camel case and and
so you know, I came up with this this spec
which had kind of just enough structure to write a
joke fizz buzz so you do rockstar interviews, And then
I stuck it on the internet and I went to bed,
and do.
Speaker 1: You remember any of that? Because it's really a poem,
isn't it.
Speaker 2: So desire is a love struck lady killer is how
you initialize a variable to one hundred Because one of
the ideas I had very early on is you want
to be able to write numbers by using the lengths
of words, right, which is you know, I love anything
that has two different meanings depending how you look at it.
I love you know, kind of optical illusions in art
and that kind of thing. And I thought, well, if
you take the length of the word, that's a decimal digit.
So love struck is a ten letter word, so that's
a zero, and lady killer is a ten letter word,
so that's a zero. So a love struck lady killer
is one zero zero, so that's one hundred. And of
course that means you can pick any words you want,
so you can actually write code that rhymes and and
so you kind of throw these ideas together. And then
what happened next is that the Internet found it and
they liked it, and people started filing issues on the
get repo with the spec because and some of them
were just jokes like, hey, the number system should go
up to eleven, like happen It's like hah, yeah, no,
but yeah, I get the joke, but no, we're not
right that, And some of them were genuinely people saying, hey,
well what should happen here? I like, there's undefined behavior,
and the specification. I'm like, of course, there is a joke,
why do you care? And people implemented it. There are
a couple of people built Rockstar interpreters, someone built a
Scarlar interpreter, someone built a rock Star Python transpiler, and
all this is within like a week of this this
first draft coming out.
Speaker 3: And so suddenly you've got an obligation because yes, you know,
not enough alcohol, not enough.
Speaker 1: If you had a little more alcohol, then it would
have been more obvious that it was a joke.
Speaker 2: It was in Sydney, Australia, and they they cut you
off there if they think you've had too much. So
they're almost incubating the conditions for these kind of wonderful,
terrible things to happen, you.
Speaker 1: Know, So we can blame that bar wherever it was,
or that hotel bar, probably the Baxter. Yeah, therefore, now
the Baxter was later in the evening. I definitely remember
that that the Evening progressed to the Baxter. If you've
never been to Sydney, Australia, folks, the Baxter in is
this wonderful whiskey bar. And the first time someone takes
you there, they you will think they are taking you there.
Speaker 2: To kill you and dispose of you. You're going down
an all, down an alley, down a flight of stairs,
and you bang on an iron door and then behind
it there is this little speakeasy. It's a one. Wow,
it's about one of the best collustions of whiskey on
the planet. Yeah, it is. It's it's phenomenal. And so
and you know, this kind of became a recurring theme
of like, oh wow, if I'd known people were going
to do that, that I would have I would have.
And so that there's there's about a week of you know,
a lot of it to activity, and then and it
dies away like it made hack and use, it made Reddit,
it got write ups in a like Boing boying and things,
and then it kind of goes away and then it
makes read it again a couple of months later, and
there's another influx of activity, and then it kind of
dies away. And then Carnegie Mellon University used it in
there Capture the Flag competition.
Speaker 1: Right, I remember this story.
Speaker 2: Oh no, and that had like that that was in
twenty twenty, and that had like thirty nine thousand people.
And of course every time it happens, there's a bunch
of you know, mostly sort of younger developers, because a
lot of this stuff is sort of undergraduate fresh air
level going, hey, how does Rockstar work? How does this work?
How does that work? And there's a voice in the
back of my head going, Carnegie Mellon was looking at
my joke. Oh yeah, you know, and so it kind
of it never it's never been big enough to be important,
but it's also never gone away. And there's this little
community of people out there on the web who clearly
they really enjoy playing with it, and that one of
the things that really blew my mind is there is
a you know, a double digit number of people out
there in the world right now who Rockstar is the
only programming language they have ever learnt. That is insane
because it has no baggage, it doesn't have any of
the kind of technical It's like you type it into
a web page and you click go and if it works,
it works, and like you know, and this is a pattern,
you know, the same like Python has online interpreters, you
know dot net. They've been working really hard to get
rid of all that boiler plate, which scares people who
don't know what they're looking at it.
Speaker 1: But you're not going to have academics breathing down your
next saying no, that is the wrong way to write
rock Star.
Speaker 2: Well it's you know, one of the things that we'll
talk about in the show is I stopped asking kind
of you know, language experts for help because a lot
of them just don't.
Speaker 1: Get the chat right.
Speaker 2: They're like, well, you shouldn't do that. I'm like, no, no,
you don't understand it has to be lyrics. If it's
not lyrics, and they're like, well, you just use parentheses.
I'm like saying parentheses and they're like, well, why would
you sing a language. I'm like, the choke the job,
you know.
Speaker 1: And I remember you actually performed a rock Star program
with your band at somewhere.
Speaker 2: Yeah, so so so fizz buzz in in rock Star
became the sort of canonical touch point. And I did
that at the end of a talk I did at
NBC London in twenty twenty, right before the lockdown started,
and that talk got like millions of you Tube and
you know, and Covid can take a lot of the
credit for that because a lot of people were stuck
at home with nothing to do. But clearly it's kind
of struck a chord and people like, we like this,
and they were sending it around and you know, I
got I got a bunch of speaking gigs off from
people who just seen that one video. They're like, we
need to book this guy to come and do our conference.
And of course a lot of one like you got
to bring the guitar, you do the rock Star bit
and so yeah, so that kind of and it just,
you know, sort of bubbled along. Now, one of the
things that always bothered me was the implementations. You know,
with all due respect to the people who did them,
it's a phenomenal piece of you know engineering to build
this interpreter for an esoteric language in like forty eight hours.
But the people who are curious are not the same
people as the people who know how to runs color right,
And I care about the people who are curious because
I think curiosity is you know, wonderful quality that should
be encouraged and nurtured. And so started twenty twenty, I
sat down and built a Rockstar interpreter in JavaScript so
I could run it in a browser. Because I decided
early on, i'd I want to do this on you know,
a zero or Google Cloud, because I don't ever want
to wake up to a five thousand dollars bill. You
don't need a bill.
Speaker 1: Yeah, yeah, exactly.
Speaker 2: Yeah, because Rockstar made hack and News and everyone jumped
on it, or because you know, I there's an infinite
loop somewhere that I was paying every time it ticks,
and so it had to be client side. There's a
lyric for an infinite loop in there somewhere, you knows,
oh easily. So one of the things that I did
in Rockstar Version one is a blank line ended a block.
So if you had like a loop or a function
or a you know, an if statement, a blank line
mark the end, which meant if you had an if
that was inside a loop that was inside a function,
you needed three blank lines to end all of them,
which became very very hard to troubleshoot because it wasn't
always obvious. You know, one is obvious, Two is you know,
is that three or four or five? I honestly can't
see it. And so a lot of folks out there
they started in to make it easy to track, and
I'm like, no, no, it looks like Python. That's the point, right,
And so one of the one of the features that
I put in. So so let's uh, actually, let's let's
bring things up to speed. So this ticks along for
about five years and it's built in JavaScript and it
runs on the web, and every once in a while
there's a little something just kind of you know, hits
me and makes me think. And last year somebody did
an advent of code in it. They solved every day
of advent of code in Rockstar has no IO, You've
got standard in Standard out, doesn't have file system, doesn't
have a network, which is partly on purpose, because I
don't ever want somebody to, you know, start a job
and be like, oh, well, the no viruses in Rockstar,
or you know, worse than that. The because I believe
that this could happen is somebody's like, yeah, the previous
developer wrote the whole system in Rockstar and they've left now.
Speaker 1: And the new guy, the new guy rock he doesn't
understand any of it.
Speaker 2: But if you don't have no file system and no network,
then there's how limit to how much damage you how
much trouble can you really go? But advent to code
is brilliant because it's standard in Standard out and that's it.
That's all you need. And so the kind of and
somebody did the whole thing, and I was like, if
people are going to put that many hours into the joke.
They deserve a better implementation of the joke. And the
other thing that happened at the end of last year,
so Rand November twenty twenty three was dotnor eight and
dotnor eight finally gave us a native ahead of time compilation.
And this was always a deal breaker for me, is
because having to install the dot net framework. I'm like,
that is if you want to learn dot net whatever,
but if you just want to play with Rockstar, I
don't want you having to install dot net that because
that is too much downloading and everything. And then this
thing came along and I'm like, wow, so this, you know,
you can do the ahead of time compilation. There's a
thing called il stripping, which takes a Dotnet program, runs
it or builds it, links it against the entire run
time with certain caveats. You can't use reflection, you can't
use type introspection, you can't use you know, dynamic assembly instatiation.
But we're not doing any of those things.
Speaker 1: You know.
Speaker 2: It's a PASA and an interpreter. It's it's the code
for it is relatively kind of clean, I guess is
a good word for it. It's not doing anything too gnally.
Speaker 1: So you end up with an EXC that anybody can
download and run on Windows or.
Speaker 2: And so yeah, you end up with with an XC
and this is this is the fun part as well,
because GitHub actions now has native runners for Windows and Chirk,
so you can write code and c sharp, you can
deploy it to gethub and as long as you wire
everything up properly, you end up with a mac OS
native executable that doesn't need a run time. So it's
just it's like about a six megabyte binary that is
a rockstar interpreter and as a six meg one for Linux.
Actually the Mac one's a little bigger. It's four for Windows,
four for len it's about six megs for Mac. And
that to me was like this is time, like if
dot net can do this, now is the time to
see what would be involved in kind of porting the
whole thing. And so the first kind of potential brick
wall there was, okay, well what about the web sure?
And now the interesting thing something that I've seen time
and time again is so dot net will compile to
web assembly, and the I think misunderstanding a lot of
people have and I think, you know, Microsoft could have
done more to avoid this is people think dot net
plus web assembly means Blazer. Yeah right, and you're like, no,
dot net plus web assembly runs browser enables Blazer. That's
not Blazer's built on top of that. If you want to,
you can compile sea sharp into a web assembly binary
that you then bootstrap in a browser and you can
run code natively in web assembly and you don't need
the Blazer.
Speaker 1: You are stuff.
Speaker 2: None of that interaction happens and the JAS interrupt that
exists in dot net.
Speaker 1: Now, yeah, it's really great.
Speaker 2: It just blew me away, Like I kept getting to
this point thinking can I do that? And you know
it's things like so the way that the Rockstar Web
interpreter works now and by the time the show comes out,
this will be on code with Rockstar dot com because
the next week is going to get flipped over. It's
been on running on beta for a couple of months
now and folks, I think have kicked out most of
the bugs on it. So if you've got a code
with Rockstar dot Com, there will be an interpreter. You
type code and you click run and it runs, and
it's running sea sharp code built into web assembly and
it's doing it in a background. So it's a JavaScript
worker process because that way, if you're an infinite loop,
it doesn't freeze the browser window. So we got JavaScript
in the browser talking to JavaScript, and a worker which
is instantiating the web assembly runtime loading the dot net.
You know the runtime that the CLR web assembly version
of that right flying in the Rockstar code interpreter on
top of that, and then buried under all these levels.
Someone wants to say hello World, and you're like, well,
where is the hello world? Co and the js interrupt
team who built the web assembly support for c sharp
are like, well, yeah, you can inject a function. You
give us a function signature, and we will take the
JavaScript function which puts hellow world on a web page
and we will wire that all the way through these
levels of abstraction so that you can wire that into
the environment, the input output mapping of the environment when
your interpreter is running. And when I found that, I
was just like, this is amazing. This is like and
you're thinking, how many things, you know, let the browser
do what the browser is good at. The browser is
going to do fonts and color and typography and buttons
and clicking on stuff.
Speaker 1: And then ninety percent of those fonts came from IBM.
Just remember that.
Speaker 2: To joke people, to joke, that's a callback. And you know,
this to me was just like, it was really really
exciting being able to use c sharp to do the
heavy lifting. And of course there's always that point. I
don't know if I'm sure you folks experienced the same thing.
You make a little list in your head of the
bits of it you think are going to be difficult,
and you do those first, and you validate the approach.
You're like, is this actually impossible? If we can prove
it's not impossible. And at that point I do what
I think a lot of developers do, which is like, well,
I've proved it's not impossible, therefore it's going to be easy, yeah,
because you know, and it turns out it's not actually easy.
It's it's just not impossible, right, And so the what
I thought was going to be a probably a long
weekend and probably about five or six weeks of working
on this thing. But it's good fun. And you know
the number of wonderful things that exist in dot net now.
So there's a fantastic book Crafting Interpreters by a guy
called Robert Meistrom and it's a great book about how
to design a programming language. Fantastic reading. And there's a
couple of things in it that I'm looking at and
a going the thing he's doing here to avoid it
being slow. That's not slow in dot net anyway, right, So,
like you know, switching on a switch expressions inside and
using pattern matching and stuff kind of alleviates the need
for the visitor pattern, which is one of the things
I used to get away from big switch statements, because
the compiler knows where to root the execution flow based
on the types that are available at run time. And
that kind of thing made it just this compelling proposition
let's do this, and let's do it right, all.
Speaker 1: Right, And there's more coming up with Dylan Beattie and
Rockstar after these very important messages stick around. Did you
know you can easily migrate asp net web apps to
Windows containers on Aws. Use the app to Container tool
to containerize your iis websites and deploy to AWS managed
container services with or without Kubernetes. Find out more about
app to Container at AWS dot Amazon dot Com, slash
dot net, slash Modernize. Hey Carl, here, today we're spotlighting
a tool that's turning heads in the tech community. Ygun's
AI error resolution brings you smart AI powered insights directly
into your development workflow. This feature doesn't just identify errors,
it suggests how to fix them quickly and efficiently in seconds.
If you're ready for a deeper dive into smarter debugging,
you won't want to miss what raygun has to offer.
Visit raygun dot com slash dot net rocks that's ygun,
r A y g U n dot com slash do
O t n E t r O c k s
for your free fourteen day trial to explore the way
raygun is revolutionizing debugging. And we're back. It's dot in
a rocks. I'm Carl Franklin, my friend Richard Campbell Hey,
and our friend Dylan Beattie, super genius who wrote a
programming language as a joke, and now he it's like
stepping in a pile of dog poo. He can't get
it off his shoe and every but even worse, all
the dogs are coming around sniffing at it, asking him
to improve the quality. I don't know what that means,
but it kind of I kind of thought it would
work before it came out of my mouth.
Speaker 2: Mister Carl Franklin, our chief Medical Office site, his finest
quite so.
Speaker 1: So dot net eight turns out to be the point
at which you say, dot neck got awesome. Now I
can do what I want to do, and it can
run everywhere and pretty much maybe we should talk a
little bit about the internals of how it actually works
through the grammar and the parser and the interpreting the interpreter.
Speaker 2: So you know something that I've been very acutely aware
of throughout the whole process. There are people out there
who are way smarter than me. And I know this
because there are certain elements of this where like the
JS interrupt thing I just mentioned, I understand how that work,
I understand how to use it, I understand the problem
it solves, and I can appreciate the solution how they
got that thing to work. I have no idea. You know,
there is clearly there is a level of genius far
beyond anything that you know I would have done on this.
And you know, I'm in awe and respect of the
people who made those because with that stuff, none of
this will work. And one of those is there's a
thing of the pausing expression grammar and or a PEG
grammar they call them. But then you've got redundant acronyms
like machine. So yeah, like ATM machines where you put
your pin number in the ATM machine.
Speaker 1: Or IBM machine, but the IBM machine.
Speaker 2: Yeah again, an IBM business machine. Where are you getting that?
Speaker 1: Oh?
Speaker 2: Internationally, you know, But basically, you know the expression grammar
is ah, you build a set of matching expressions regular
expression syntax or something very very similar to that, and
you feed your source code into that. So one of
the really fun things about building a programming language interpreter
is you have the language you designed, and you have
the language that you're building it in. And so when
you find a bug, you're like, Okay, where's is it.
It could be a bug in my rock Star code,
or it could be a bug in the thing that
passes the rock Star code, or it could be a
bug in the thing that then runs the interprets the
abstract syntax tree. And so you're constantly trying to find,
you know, where are the abstraction points in this where
you can stick in a debugger or something and go right,
If it's good as far as here, then I know
it's not a bug.
Speaker 1: In this part.
Speaker 2: It's a bug in that part and the pausing expression
grammar as a guy called John John Getson has a
library called Pegasus, which is up on new get and
this is basically the you write your peg grammar for
the language you're building, which is like, what's a program?
Will a program is a set of blocks, or it's empty.
So the shortest possible program is nothing, it's white space
followed by under file, which is valid. Or it's a
block followed by a program, which could be the empty program,
so it's just one block, or it could be a
block followed by a program, which is a block followed
by a program, which is a block followed by a
program which is the empty one. So you got four.
And I love that. I love the elegance of kind
of the self yeah, self reference.
Speaker 1: I know if you heard that the burdens were flying
over around my head in a circle.
Speaker 2: And then what's a block? Well, a block is either
a statement followed by an end of statement, or it's
a statement followed by a block, all right, And what's
a statement? And then you're like, well, a statement is
input output arithmetic par as this read that you know,
the actual the guts.
Speaker 1: Of the language.
Speaker 2: That's where it kind of widens out, and then you
get down to what are the expressions, and the expressions
are operators and values, and what are the values, And
that's where you get down to the type system. You
can have a string, you can have the number, you
can have a boolean. And the type system in Rockstar
is straight out of JavaScript, just because it you know,
it's one I think makes sense, so no types. Very
early on it kind of has types. It's got some
really interesting type coercion because one of the one of
the things that JavaScript always frustrated me with is, you know,
it's really idiosyncratic, like, you know, you can add a
string to a number, but you can't subtract a string
from home. And I'm like, well, if you can add
the string, surely there are scenarios where subtracting the string
makes sense. So I decided, you know, the Rockstar two
point zero, everything would return something like there's no nan,
there's no so divide by zero gives you infinity because
that sounds like rock and roll, and something like we
don't have we don't have not a number. It's got mysterious,
Like mysterious is the value you get but other things
like you subtract a string from another string, it's gonna
like if you subtract rock from Rockstar, you're going to
get because it's going to take the rockout because obviously
that makes sense. And like Rockstar divided by R it
gives you two because there's two rs in the words.
So string division is defined, string multiplication is defined. And
so you got all these these kind of ideas and
you're like, right, first, you got to design the syntax,
and some of it is syntax you design, and other
stuff is like, well, I've got these types and I
have this operator now, but I haven't figured out what
happens if you mash them together. And I figured out
very early on. So there's a wonderful tool called Endcrunch,
which is a continuous test runner for dot net that
I love dearly. I use it. It's on Writer as
well now but it's still Windows only. But for a
long time it was just a visual studio plug in
and it just sits there. It runs all your tests,
and I figured out very early on how to get
that to report the line and the rock Star program
where the test had failed. But I think the developer
remco molderus like, hey, how do you know when a
test fails? How do you know what line to link to?
And it was like, it's just we use a regular
expression to pass the output from the dot netcompiler. And
I'm like, so if I can emit a line of
output that matches the exact error this space at space
file name colon, line number, comma, And he's like, try it,
and see I tried it and it worked. So now
I have a test runner that I can click and
I can jump to a line in a Rockstar program
where the test failed. So now you can start using
Rockstar to write the tests. And that's at that point
I'm like, well, if you can use them to right
the tests, I can also use a test runner to
validate the documentation. And so the code with rockstar dot
com website, all of the examples in it are actual
Rockstar programs that are tested as part of building the solution.
But then the website's built in Jackiel, so it runs
on GitHub pages and there's a little custom Ruby plug
in that takes each snippet of code and turns it
into an one you can actually run right there on
the page by clicking a button. So every single kind
of scenario, every test case, every operates to the examples.
How do you do a raise, how do you do loops?
How do you do input? How do you do output?
The docs get unit tested as part of building the
whole thing, which has only caused a couple of headaches
because it doesn't using symbolic linking, which causes problems with
cross platform builds, which you know is a is a headache.
Speaker 1: I have a question, Go for it. I hate to
interrupt it. As you're talking about this, I can't help
but think that you beyond rockstar, you may have invented
a new type of language paradigm where you could use
the language in any kind of genre of writing, for
example Shakespeare. What's stopping anybody from taking your the basis
of your you know, your language and turning it using
Shakespearean language to write code?
Speaker 2: And so that's that's actually a really interesting question because
I think at this point, so generally, you know, part
of the problem is how do you take the lexical
structure of natural, lyrical sounding English and turn that into
something you can use to write programs? And that part
of it does lend itself to a lot of flexibility
and One of the things that I baked into Rockstar
early on is aliases. So there's a lot of things
where there are three or four different keywords that compile
to the same instruction. They mean the same thing. So
we got like print tallow world, but also you can shout,
you can scream, you can whisper how world. Otherwise it's
just print, print, print, print, print, you know. And so
the minimalist rock Star looks a little bit like Python,
and idiomatic Rockstar has all the kind of fancy edges
and frills and stuff on it. And so the next
part then is choosing the keyword that you're going to
use for built in operations, so you know, like a
natural or many programming languages have stack operators which are
pushing pop, and everyone's like, you push it on the stack,
you pop it off the stack. And I was like,
all right, well push and pop is in there. But
I'm also going to have rock and roll absolutely, so
you can you can rock something. And then you're like, well,
if we got this rock up right, what happens if
you rock something that isn't a isn't a list, and
so rock will if you rock a number, it turns
it into a list that just contains the number. If
you rock a string, it turns it into a list
that contains one string. And then if you rock it again,
two strings, three strings, and roll will pull the element
off the string. And then I thought, well, hang on,
if you if you rock a string with a number,
what it does. It takes the number, it converts it
into the Unicode character with a corresponding code point, and
it appends it to the string. And so what this
thing gives you is it gives you a way of
building strings without having to actually use them, so you
can you can. They're called ninja strings because they're stealthy.
You don't see them coming. And so I'm just going
to look up the example because I can't remember it
off the top of my head. Yeah.
Speaker 1: Well, while you're doing that, the Shakespearean version of rock
and roll might be ebb and flow.
Speaker 2: Yeah, exactly, this kind of thing. And so you're like
that point. You know, if you wanted to add ab
and flow as aliases, it's a very So adding alias
is one. It's very easy because you just stick another
case in the grammar and you've done. The problem then
is you might have somebody out there who's used ab
as a variable in a program, at which point that's
a breaking I see. And you know, this is a
sort of classic problem that all programming language designers, no
matter how esoteric, is if you have something that wasn't
a keyword and now it is, well, somebody might have
used it before. Yeah.
Speaker 1: In this case, though, you'd be creating a whole other
language other than Rockstar. It'd be you know, Shakespeare or something. Right,
So if you're writing, you're either writing in Rockstar or
in Shakespeare. You wouldn't be using them together.
Speaker 2: It has occurred to me that there is a sort
of fairly natural split because the Rockstar engine's kind of
in two halves. There's the pausa, and the Pausa takes
the Rockstar program and turns it into a abstract syntax tree,
which is a collection of dot Net classes that refer
to each other. And so like program has a collection
of statements, and then a statement is one of the
following types. But in theory, you could then build a
completely different grammar that compiles to the same set of
classes and then just run it through the rock Star
engine the interpreter, and it would tell you what it did.
And so there's almost like the guts of a language
construction kit in here.
Speaker 1: Yeah, well you're like, well, you.
Speaker 2: Know, this thing maps onto that thing, and you know,
at that point it's a little bit fundy because it's
like that might actually be thinking this wasn't supposed to
be useful, but this accidentally invented something that has genuine
application as a teacher crap, that wasn't the point and
but yeah, and you know it, really there is this
intermediate representation and if you if you go on the
Rockstar website, you can type in any program and as
well as running it, you can see the past tree.
You can see the visualization of what your program gets
translated into, which has been one. You know, it's a
tool that I found incredibly useful when I was developing
the thing, and then I was like, other people might
find this useful too, And you know, it's very particularly
if you're trying to debug something where you have an
expression that could either be interpreted as an actual expression
or it's going to be interpreted as a poetic literal.
And you know, this means that you have something you
think is going to be like a logical expression. You know,
X is not why and you'd think, well, X is
not my means of why is true? X is now
false because it's going to do logical negation. But in
some circumstances X is not. Why is going to count?
Well not as one, two, three, and why is one?
So you're going to get X is now thirty one
and be able to see what the parsa is picking
up because a lot of that stuff happens at past
time because it's not going to change, it's it's baked in,
and so visualizing the pasetree for that and yeah, at
this point you're absolutely right. You're like, well, the grammar
is now decoupled from the interpreter to the extent that
if you wanted to, you could build a different grammar
on top of it and still use the same back end,
the same interpreters.
Speaker 1: Fascinating kind of stuff on it. So, in this new
version for dot net, did you have any breaking changes
and did both of your users complain about it?
Speaker 2: Or yes? And yes you should come down every shown.
So yes, there was a certain inevitable number of breaking changes,
some of which were just stuff that, like I mentioned
a moment ago, we had a push and pop and
rock and roll and actually push and pop was backwards.
When I baked that in pop didn't do what popping
a stack does, and I was like, I'm going to
fix that. So push and pop, you know, add an
element to the end and remove the final element, and
then rock and Roll will add elements to the end,
but they will remove elements from the beginning, which is
analogous to shift and unshift in JavaScript. So that was
just fixing something that was broken. And there were a
couple of so the there's a test suite. The really
nice thing is the community contributed a test suite for Rockstar.
One was a set of about sixty Rockstar programs, and
the testing here was just here's a program, and here's
a text file containing its output, and so whatever language
you're using to implement it, you're going to read this,
run it, and compare your output to that, and if
it works, then it passes. And that proved incredibly useful
in terms of, you know, understanding backward compatibility. And I
got to a point where it was one hundred percent
no breaking changes, and I was like, right, there are
now some things I'm going to break on purpose, and
one of them was so using is as an assignment
operator used to be like, if you say desire is
a love struck lady killer, the word is there in
that very specific context, would pase a love struck lady
killer as a as a literal, it would count the words.
And I wanted to be able to say. I kept
in my own code writing things like X is with five,
which is X plus equals five like incremental, but it
wouldn't work because it would passe with as a four
and get excess now you know, forty one or something.
So I just I broke that. I said, a poetic
literal can't start with a keyword. Okay, if it's a
keyword that can start an expression, then you're going to
interpret that as an American expression or a logic expression,
not just count the lengths of the words and.
Speaker 1: Did you find poetic ways around it?
Speaker 2: So what I introduced was like a so anywhere you
have the word like the rest of that line or
the rest of these statement up as far as the
next piece of punctuation is going to be a poetic literal.
So now you can use it in a lot of
different places. You can say, you know, if my love
is like a burning forest, and it's like, well, my
love is a variable, and like a burning forest is
going to give you as one burning seven forest six.
So that's if this is one seventy six, and so
if you want to you can use that. I don't know,
whatever ask you one seventy six is you can compare
to that. And there's this weird moment where you start
realizing that things things like that which you hadn't considered
that use case when you design the building blocks for it.
They just kind of emer And you know, we were
talking earlier in the in the show at the beginning,
you folks are talking about using machine learning to in
games and AI to generate that. And earlier this year
I played through boulders Gate three and I absolutely loved it.
And one of the things I loved about it is
that it is the kind of game that's like, yeah,
we're gonna the game engine is solid enough that you
can do stuff that the game designers did not imagine.
Like you got an eight percent chance if you try
to turn the god of Death into a sheep it's
going to work.
Speaker 1: Now that's not a rock Star line, right there is it?
Speaker 2: It would probably work, It might compile, And you know,
I love that sense that there is a foundation here
that just leads to these wonderful, little you know, idiosyncrat
page cases. They go oh, oh, I guess that works,
and it does work, and you're like, oh, that's weird.
Speaker 1: It takes your brain in a way that regular programming
languages just don't do. Like, you know, you're firing a
lot of synapses when you're writing Rockstar, a lot more
in a different part of your brain, I think than
if you're writing C sharp for example.
Speaker 2: Yeah, and it also, you know, it decouples. It is
programming for the joy of programming, because you can't solve
any real problems with it, and so it absolutely reinforces
the no. No, you're doing this because it is fun.
You're doing this because there was a yeah, I know.
Speaker 3: It's it's such a great Kata approach, right yea, just
really exercise thinking about how you'd solve something in and
teaching kids.
Speaker 1: They must love it, right, I mean, can you imagine
having a rock star programming class at a high school
or something? Kids would flock.
Speaker 2: I know a couple of people who tried it, kids
like fifteen sixteen above. They got the joke because probably
their dad listen to and they're like oh, you made
a programming language out of my dad's collmusic.
Speaker 1: All right, let's sealk with it his album collection.
Speaker 2: Kids younger than that, they don't really get like because
a certain amount of it is this makes no sense
unless it makes you laugh, right right, and it does
make people laugh, you know. The acid test for Rockstar
is are people still laughing at this? And they are?
Speaker 3: You know, it's very cool. So yeah, what about the
error messages? Can you write clam rock error messages?
Speaker 2: So it tried. I tried very hard to emulate the
JavaScript approach of you know, don't fail like if you can,
if you possibly can. There's no exception throwing or handling.
Everything returns something. It's just that sometimes it returns a
zero or an empty string, or it returns mysterious. Getting
the PASA to generate good error messages that was difficult,
and that's actually still something that I'm not one hundred
percent happening with because the nature of a pausing expression
grammar is very much hey, check that input against all
of these patterns, and if none of them match, then
it can't tell you where it failed. It can just say, hey,
I tried all this, and there wasn't a program, and
you're like, well, where wasn't there a program? It's like
there that whole thing wasn't a program, and one kind
of a stretch golfer. There's something that I've been working on,
but I haven't got at working yet. There is a
thing called a code mirror. You know code mirror. It's
the code editor that's built into web pages. And the
code mirror. Syntax highlighting uses something called a laser grammar.
Eliezer and laser grammar is the I've completely forgotten his name.
The guy who created this basically was like, look, compiling
a grammar for syntax highlighting is not the same as
compiling a programming language. You are going to run because
you think about syntax highlighting, like if you make a mistake,
you know on the syntax high learning to be off
for the whole rest of the file. You want it
to recover as soon as it can. It needs to
be like, well the rest didn't make sense, yeah, and
so you know the laser grammar for it. And I
spent a that two weeks trying to write a laser
grammar so I can have syntax highlighting for Rockstar. And
because the pausing expression grammar is like, try this. If
that doesn't work, try this. If that doesn't work, try this,
whereas the laser grammar is like try this, it works
or it doesn't, we don't care. It doesn't have this
notion of kind of backtracking and trying another one and
backtracking trying on to And that's the point where my
brain just went, now, yeah, yeah, no no no no
no no no, you're tired and you're never going to
figure this out right now. So I parked that until
life was a little more conducive to spending six hours
reading up on code grammars and stuff. And it is
a I mean, it's code Mirror is a phenomenally impressive project,
but it's also Codemera reversion five was like, put this
JavaScript file on your website and you got syntax highlighting.
Codemera reversion six is like, here are sub atomic particles.
You should be able to use them to build a universe.
And you're like, I don't know how to do that,
and you know the builds that like, you've got to
define your grammar, you got to find your syntax, you've
got to find your keyword operations. Then you've got to
build in a JavaScript built step that. So the editor
that's on there, it is actually code mirror, but it
has no syntax highlighting.
Speaker 1: It just okay.
Speaker 2: So that's something I'm either going to come back to
or I'm going to nerd snipe the Internet. It's going
to go on like you know, Blue Sky and be like, hey,
I just discovered that code Mirror can't pass Rockstar because
Rockstar is too complicated, and give it. Give it forty
eight hours and somebody will be like you're wrong. I'm like, oh, yeah,
thank you great, I'm willing to be wrong.
Speaker 1: Yeah, So that's something you're thinking of any other new
features in the next version.
Speaker 2: You think, So, you know, the appetite has always been there.
People are like, we want file system I owe, and
you know the challenge there or even just a module system,
like a way of having code in one file. And
the best proposal that we've kind of seen there's a
couple of us who bounced the stuff around on GitHub
issues is that. So you know, if you open like
the sleeve notes for a record, you've got.
Speaker 1: The queste a record, I'm sorry, are these things don't It's.
Speaker 2: Like you take an MP three and what you do
is you you cut the MP three into a piece
of wax, and when the MP three is very wobbly,
you make a very wobbly cut, and when the MP
three is very still, you make a very straight cut,
and then you turn the wax round and round and round.
Speaker 1: That's fascinating with it. And it comes with a piece
of paper obviously that you can read.
Speaker 2: Yeah, So for our younger listeners at the Apple, music
used to come on on LPs, and LPs came with
sleeve notes, which is where you could read about your
bands because the Internet wasn't invented yet, so if you
wanted to read, that was all you had. Yeah, And
you know, somebody said, well you got the title and
then after that you got like, you know, drums, Dylan
Carl guitar, Comma synth, programming, Richard Moraccus voice, and you're like,
all right, yeah too, And so you could use like
the musician is the file name, and then the instrument
credits are the things you want to import from it
HU and you're like that that would kind of work,
and then you're like, but then how do you use
that within the program to be like, so, you know,
Richard's guitar taking a solo might be find the guitar
function which was exported by the Richard module and pass
a solo into it as an argument, and and you know,
none of the stuff's impossible, but there's a point where
it just starts to feel so convoluted.
Speaker 1: Well, you know, I was just about to say, you know,
do you ever find yourself at three am after working
on this for six hours just asking yourself what the
hell am I doing?
Speaker 2: Actually the worst, the point where that kicks in the
highest is when I've been doing you know, the presentation
talking about esoteric languages and you know that kind of stuff,
and it builds up to the big fizz buzz outro
with the guitar and everything, and the audience is like,
he's not really good to do? This is And it's
a bit of my brain that is just going you
are about to sing the word fizz buzz to an
audience of eight hundred Java developers. What are you doing
with your life? Like? How did it get to this?
Speaker 1: So cool?
Speaker 2: And the thing is it's the word fizz buzz. I
was like, if it wasn't that word, like I would
be cool with this. And so what we can do
now with this ninja string thing? Is. So I'm just
going to give you, like about thirty seconds of lyrics.
So my dream is diamond nightmares, My suffering is the sea.
My scream is hollow hatred. Your love is meaningless to me.
Rock my dream like a razor blade. Smile, rock my
dream with your love, your love, rock my scream like
a switchblade. Missile, rock my scream with your love, your love,
and you take that apart, and you is meaningless to me,
so meaningless to me. It gives you one twenty two
in ASCI, which is the letter Z. So rock my
screen with your love. Your love puts z Z on
the end of a stringer building, and so that that
builds fiz Bus. With that you ever actually having to
say it, it's great and that kind of that that
solved the problem for me because it's like this is
now plausible all the way down. Like you, you could
perform fiz Bus to an audience who just thought that
this was you know, like we're not talking Grammy when
it maybe like the B side to a meatless record,
But they'd be like, yeah, all right, that works.
Speaker 1: Maybe some Italian developer will create a language based in
opera lyrics like Italian opera, you know, with with completely
different language.
Speaker 2: So asking about the future of it. So you know,
there's there's opera that shape, there's all kinds of things
you can do with the grammar. But the question I
get asked more than anything else, is is there a
way that you could generate music from the source. Of
course there is, and at that point that's really interesting
because then you'd have a piece of writing which was
simultaneously a set of lyrics and a compilable program and
the definition of the melody or the chords or whatever.
And so that's something and you.
Speaker 1: Know that'd be tricky to write. That'd be even harder
to write than just lyrics to a song, because you
have to make the lyrics fit a melody. So you
have a pattern, you have a constraint, you have a
pattern that you have to follow.
Speaker 2: You've introduced a third constraint to it because you know,
something that I played around with is, well, we'll just
take the text and like anytime we see a letter
that is a note on the major scale, we'll hold
that note for as many letters as it takes till
we get to the next one. And that gives you
a melody.
Speaker 1: But it's not a musically.
Speaker 2: Well, and you're like, well, if you if you wanted
to be able to write the melody that went with
the lyrics. So yeah, I have a lot of ideas
on that one, but nothing yet that has kind of,
you know, caught fire.
Speaker 1: So you could do melodies. I mean a melody is
a note and a duration, right, I mean that's really
all it is. But now in musical notation you can
do chords, which is three notes with multiple durations or
morm notes at the same time. So it gets very complicated,
it does.
Speaker 2: And uh, and there is another idea that kind of
emerges from all of this, which is, could you could
you write a programming language that used sheet music instead
of asking as its input? Could you actually create a
turin complete compiler for musical notation?
Speaker 1: So then, oh my god, I'm not going to sleep tonight.
Lyrics completely.
Speaker 2: You are insane.
Speaker 1: Friend, Good lord.
Speaker 2: I have a little thing in the back of my
brain that just comes up with the stuff twenty for
us seven days a week. Hey, what about this?
Speaker 1: What about that?
Speaker 2: You could do this?
Speaker 1: That's so exciting, Dylan. Thanks, thanks for thanks for you know,
keeping us abreast of what's going on and where can
we get.
Speaker 2: Rockstar code with Rockstar dot com.
Speaker 1: Perfect.
Speaker 2: You gonna check that out and by the time the
show comes out, that will be the all singing, all
Dancing dot eight But you don't care because it just works.
The binaries will be up on GitHub, so if you
want to run it locally, that's on Linux, mac Os
and Windows, or you just run it in a browser.
And the whole idea is it's out there in time
anyone who wants to do adventive code and Rockstar thisea.
You don't have to install note js. That's my Christmas
gift beautiful to all of you lovely, lovely people out there.
Speaker 1: Son, it's always a pleasure to talk to you. Maybe
we'll see you in one of these so much fun
conferences somewhere.
Speaker 2: Thanks so much for having me on the show. Folks,
It is always a pleasure.
Speaker 1: Slowly and we'll talk to you next time on dot
net rocks.
Speaker 4: Dot net Rocks is brought to you by Franklin's Net
and produced by Pop Studios, a full service audio, video
and post production facility located physically in New London, Connecticut,
and of course in the cloud online at pwop dot com.
Visit our website at d O T N E t
R O c k S dot com for RSS feeds, downloads,
mobile apps, comments, and access to the full archives going
back to show number one, recorded in September two thousand
and two.
Speaker 1: And make sure you check out our sponsors. They keep
us in business. Now go write some code. See you
next time.
Speaker 2: You got javans and