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