#249: Capture the Staff of Pythonic Knowledge in TwilioQuest Transcript
00:00 Are you learning or helping someone else learn Python?
00:02 Why not make a game out of it?
00:04 Twilio Quest is a game that doesn't treat you with kid gloves while teaching you Python.
00:08 Use your editor of choice and write code on your machine and still play the game to solve the Python challenges.
00:14 In this episode, you'll meet Kevin Winery and Ryan Kubik from Twilio, who created Twilio Quest, and they're here to tell us all about it.
00:22 This is Talk Python to Me, episode 249, recorded December 12, 2019.
00:27 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.
00:47 This is your host, Michael Kennedy.
00:49 Follow me on Twitter, where I'm @mkennedy.
00:51 Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via at talkpython.
00:57 This episode is brought to you by Tidelift and Linode.
01:00 Please check out what they're offering during their segments.
01:02 It really helps support the show.
01:04 Kevin, Ryan, welcome to Talk Python to Me.
01:06 Awesome. Thank you very much. It's a pleasure to be here.
01:08 Yeah, thanks.
01:09 Nice to spend a little time with you guys and talk about this programming game.
01:13 I think it's going to be so much fun.
01:14 For a long time, I played actual games, you know, MechWarrior, Half-Life, Counter-Strike,
01:19 something like that.
01:20 But then I felt like that was kind of just wasting my time.
01:23 And my game actually sort of became programming, you know, instead of going and diving into a world like that.
01:29 I was like, well, what can I build in the world with code?
01:31 And like creating stuff with code kind of almost became a game to me.
01:34 And you've sort of clashed these worlds together in an interesting sense,
01:38 at least at the learning level.
01:39 Yeah, I think so.
01:40 And it is kind of funny that it sort of scratches the same itch, right?
01:44 Like, you know, building something with code, it seems to somehow feel, I don't know,
01:48 maybe it's not so weird, especially when you see games like Minecraft and that sort of thing.
01:52 But yeah, it's been fun to kind of marry those two passions for me as well.
01:56 Yeah. And if you disguise them right, kids will love them, right?
01:59 Like kids love Minecraft.
02:00 If you told kids to go like do programming homework, they'd be like, no, I don't want to.
02:04 But then they'll like beg for Minecraft, right?
02:06 You know, it's just like the context is really, really interesting.
02:08 Yeah.
02:09 Yeah. Before we get too deep into the game side and talking about Twilio Quest,
02:13 the thing that you both have built, I want to talk a little bit about just where you're coming from
02:16 and your story. So, Kevin, let's start with you. How'd you get into programming in Python?
02:20 I got into programming kind of in high school. There was like a, I don't know if you can call it
02:25 programming, but there is this hyper card software that was installed on the computers at school.
02:31 And I got really into like creating like interfaces in this like drag and drop system where you could
02:38 click on links to go to another card in the, in the system. and just thought that was,
02:43 that was super fun. and then, in college, I studied, programming and wrote like a red
02:49 Rover simulator in scheme. and thought that, thought that I was a genius for figuring out.
02:55 Well, if you did it in scheme, you kind of are, I mean, you are a genius. If you can handle that
03:00 many parentheses at a time.
03:02 So many parentheses.
03:02 So many parentheses.
03:04 Just kidding. Sorry.
03:05 No, it was super fun. And then, but yeah, that, that was kind of what kind of got me hooked is the
03:10 ability to create like even just a stupid little game, like red Rover in, in scheme. And yeah. And
03:15 then I'm working at a, I've been programming for about 15 years now. I've been at Twilio for a little
03:19 over seven years and I do lots of different programming languages, but my primary Python is,
03:25 you know, our documentation website at Twilio, is built on a wagtail, which I'm sure many folks
03:30 know is a CMS extension.
03:32 Yeah. It's a Django. Yeah. Django CMS. It's a really nice one, actually quite nice.
03:36 Yeah. Super extensible. I mean, like Twilio has made a couple minor contributions and we've done a
03:41 whole bunch of customization, but yeah, it's worked out, worked out great. And that's kind of been my
03:45 first big Python project that I've been associated with, but I am more of a JavaScript person by trade for
03:50 sure. Right. And some of the, even though the lessons are for Python for some of the lessons
03:56 and missions, we're going to talk about the app at the low level, it will, we'll dig in as well as
04:00 more of a JavaScript, HTML type of thing, right? Yep. Yep. It is. Yeah. Well, I'm sure we'll dig into
04:05 it, but it's a electron application and, HTML, CSS and JavaScript. So. Yep. Yeah. There's a lot of
04:11 those these days. Ryan, how about you? Yeah. So like you, I spent a lot of time when I was younger
04:16 playing video games and then I ended up just making maps and stuff in video games. And then I
04:21 figured out like, Oh, maybe I should make something useful instead. So that was sort of my transition
04:27 into like, well, maybe I'll try to make a game on its own. And that didn't really fully blossom for me
04:32 until sort of undergrad. I started with Java and then learned to love, hate that. But Python was always
04:38 this sort of like, whenever there was a weird fun experiment, like we had like some big data courses
04:43 or like some machine learning thing, like Python was always the thing they're like, and now you can
04:47 have fun for a minute before you have to go back to writing all of your interfaces and stuff.
04:51 Right, right, right. Yeah. So that my initial impressions of Python have always been very fun,
04:57 even though I've never actually had the chance to use it professionally. But I also, the one time I
05:03 came close as I taught a intro to programming course in Python at a, at a local bootcamp. And that was
05:09 definitely a good choice. I was glad that I did not have to teach people Java in that setting.
05:14 Now you implement this interface and that's an abstract method. So what that means is this,
05:19 and I'm like, Oh my goodness, I just want to print something out on the screen. Can we not do all this?
05:24 Yes. No, it's been amazing. I generally do JavaScript these days, since TwilioQuest is all Node and React and all that. But I also am glad I didn't have to explain
05:34 that to new people too. So.
05:36 Yeah, for sure. For sure. So let's start by talking a little bit more about your background,
05:42 because it sounds like you both are somewhat involved in education and TwilioQuest came out of
05:48 some interesting educational stuff done for Twilio and whatnot. So what's your backgrounds
05:54 in teaching and building courses or tutorials and things like that?
05:59 Before coming to Twilio, I worked at another smaller startup called AppCelerator. And we created
06:04 this thing called Titanium, which was a cross-platform tool that let you build mobile applications in
06:10 JavaScript. And I built a lot of educational content around that, sort of like a, sort of a lightweight
06:16 certification program. And I've, and since coming to Twilio, have also worked on documentation and
06:23 other resources for developers, including our live training program. And TwilioQuest was kind of
06:28 came from all of that as sort of a reaction to what I didn't like about how I was teaching developers.
06:35 And TwilioQuest is kind of how I prefer to.
06:37 Yeah, sure. And you're like, I'm teaching them just, here's an API, here's an API, here's kind of a
06:43 static tutorial they have to go through. And you're like, could it be more engaging, huh?
06:47 Yeah, absolutely. Like I, the, I mean, and we'll, I don't know if this is the right time to dive in,
06:51 but basically TwilioQuest was created because I wanted to, you know, live training setting, like give
06:57 people the opportunity to sort of progress at their own pace. Because in any kind of like live training,
07:01 it's either too fast for some people, or it's too slow for some people. And, you know, with something
07:07 self-paced like TwilioQuest, if you're brand new to the topic, and you only make it through three
07:12 exercises, that's great. Or if you're a more advanced developer, maybe you can speed through
07:16 20 pieces of content throughout the day. So yeah, that's a real big challenge of these in-person
07:21 trainings. It's also a challenge of online and self-paced, but it's a really big challenge of
07:26 the next half hour, I want you to do this. Whether that's a PyCon or other conference,
07:31 like live workshop, or it's a week long training class. There's people of massive different
07:37 backgrounds in there, and it's super challenging to give them something interesting that doesn't
07:42 either stop in 10 minutes for the experts or just kill the beginners, right? I did 10 years of in-person
07:49 training, and people would come to me and they would say, Michael, we're almost out of time,
07:53 I'm only halfway done. I don't think I'm getting this topic. Or the point is to have enough that even
07:58 the really experienced people don't run out of time. So don't feel like you've got to get through
08:02 all of it, right? It's just, it's a big challenge, right? And so I think the open-ended
08:06 quest concept, they can just keep going down these paths, which is pretty cool.
08:11 Yeah, totally. And that's like sort of has formed the core of it. And we still use that in our live,
08:16 use TwilioQuest in our live training today for that reason. But yeah, we had like the software and
08:21 kind of a lot of the other tools that we built around it ended up being useful to build something
08:26 for self-service learning too, so.
08:28 Yeah. Before we move off of it, what does live training at Twilio look like? Is that like a big
08:32 company that wants to implement working with you guys, say, hey, come and do an in-person class or
08:37 these like conference things that you do? I know you are exhibitors at many of the conferences around
08:43 and whatnot.
08:44 Yeah, I think it's kind of a little bit of all those things you mentioned. So we will go to
08:49 companies sometimes, and they're interested in sort of, you know, leveling up a bunch of developers on
08:54 how to use Twilio because they're about to embark on a larger project of some kind. So we've definitely
08:59 run TwilioQuest in those settings. And then we also, Twilio will sponsor conferences and other
09:05 meetups and developer events. And we'll often do like a couple hours or maybe a half day where we
09:11 get people together, they play TwilioQuest. And both when we do it on site at Giant Corporation,
09:17 and when we do it at meetup, we usually do a leaderboard with the XP totals of everybody during
09:22 the event. And then we usually give out some like goofy prizes at the end for people that have
09:27 completed certain objectives within TwilioQuest. So yeah, and most of it we do we do kind of
09:33 intersperse it with some live demos, like some live code demos, or some demos of larger applications.
09:38 But it's usually like a facilitated hands on experience where people kind of move through
09:44 the content at their own pace.
09:45 Okay, cool. Ryan, how about you teaching background experience?
09:49 For me, this is again, this is the first full time educational role I've had. So a lot of my
09:53 previous experiences sort of been trying out a bunch of different ways to help people learn and
09:58 find that way that I'm actually effective at doing that. So I mentioned that that one time boot camp
10:03 course I did, that was the only time I did that. Because teaching at a boot camp is stressful and
10:08 crazy, especially on top of a full time job as well.
10:11 Right. It's a pretty big commitment. Those are like 12 weeks. And that's a lot of time, right?
10:16 Yeah, it's definitely a weird place too, because it like, the stakes are pretty high for the people
10:21 involved. Like it's a potential life changing opportunity. And, and like, not being able to
10:25 commit to it, like as a full time position, I just felt like I was hard to serve them as well as I feel
10:30 like they deserved.
10:31 I can imagine. Yeah.
10:32 Yeah. So I've also tried like speaking at local meetups, I do a, like a monthly blog post on
10:37 educational topics. And I just tried a bunch of different little things. And in general, I find
10:43 the, the ways where I kind of either get to engage in conversation with folks or sort of curate an
10:50 experience for them rather than the sort of live, like lecture style. Like I, I don't think I'd be very
10:57 good at like recording a audio course or like the one time I tried streaming was a little messy,
11:02 like sorts of settings are hard.
11:05 These more interactive sort of, I'm here with you rather than speaking to you.
11:09 Yeah. I like, yeah, being, being more on the team with someone versus sort of portraying as this,
11:17 all knowing deity where I in reality don't know very much at all.
11:21 Sage on the stage.
11:23 Yeah. That's a tricky place to be. So Kevin, while you were speaking, something that
11:27 sounds pretty interesting. You talk about having these leaderboards and people doing this together.
11:31 And, you know, when I was thinking about this, it was like, oh yeah. And the training that you guys
11:36 have been doing and whatnot, this might be really a really fun activity for a meetup, right? So if
11:41 you've got like a Python meetup or some other meetup that there's a mission for, have everybody
11:46 come bring their laptops and then just play together. How do you like create this sort of group
11:53 leaderboard thing? Is that something that people from the outside could do if there's
11:57 meetup organizers out there?
11:58 We have done it for folks before. Like we, we haven't sort of made it self-service, but we have
12:04 a community leaders that have been like, oh man, I would really like to do Twilio quest at our meetup.
12:09 So, you know, it takes me about 10 seconds to create a new like event in Twilio quest. So
12:15 I've created one for folks and they have gone to a URL and they can display the leaderboard there.
12:22 And within the game, you can actually specify that I am participating in this live event. And then it
12:28 starts sending all your points to the leaderboard. So we've definitely done it for a few third parties
12:33 and we do it for first party, like Twilio events all the time. Like we have a Twilio quest tea party,
12:39 which is a fun one that some, some of our colleagues have started to do where you just hang out and just as you imagine,
12:45 drink tea and eat fancy cakes, and then also play Twilio quest at the same time.
12:50 Yeah, that sounds pretty cool. All right. Nice. I think it would actually be a pretty fun activity.
12:54 If you're trying to get folks involved to have like something of a beginner night, or you could pick
12:59 more missions that are more challenging.
13:02 Yeah, totally. We definitely want to make that more self-service. But in the meantime,
13:05 if you tweet at Kevin Winery, he will set that up for you. So let me know.
13:09 Super, super. Yeah. And I'll put a link to your Twitter, both of your Twitters in the show notes
13:14 so people can just find it in their podcast players. Awesome.
13:16 Now let's dive into Twilio quest proper and I'll read the opening paragraph. It's maybe I should try to
13:23 describe it. It's a little bit, it's like a top-down sort of dungeon exploring game where you go
13:29 through and you find clues and you solve puzzles by writing code to make those things happen, right?
13:35 Is that a fair, very first impression?
13:38 Yeah, yeah, I think so. Like we're kind of trying to go for like a Zelda or Pokemon style RPG where
13:44 a lot of the progression is done by solving code challenges that will, you know, unlock doors and
13:49 clear your progress or the way for progress in various ways.
13:52 One of the things I like is the, there is conversation with little non-player character type
13:57 things, but it actually speaks to you. And I don't know, there's just something about a game where it
14:02 has music, but then the only way to interact with characters is, is reading. There's something nice
14:06 about a little bit of conversation, but there's an opening section and I'll just read what it says
14:11 there to give people the sense of kind of what you're going for, I guess.
14:15 There's more and more, our lives are lived inside the virtual worlds of computers. The universe is
14:19 where these virtual worlds reside is known as the cloud and it expands every second of every day
14:24 with new worlds to discover the ability to write code. The laws that govern these virtual worlds has
14:29 become a precious resource. And you have to go on to sort of save the world from the legacy society
14:35 or something like that, right?
14:36 The legacy systems, yes.
14:38 The legacy systems.
14:39 Yeah, they're always red when they appear in text. Very nice.
14:44 So it starts out and you have this like, hey, welcome. You're going to like learn a little bit
14:49 of code and you're going to, as part of the game, save the world from these legacy systems,
14:54 but really just learn stuff, right? Which is great.
14:56 Yeah. It's mostly, mostly just learning stuff at this point. We, in the coming year, we have some more
15:02 story elements that are going to be coming out to kind of, that will, you know, pitch you against
15:07 the legacy systems. But yeah, today it's mostly just learning how to code in a sci-fi setting,
15:12 for sure.
15:13 Yeah. Yeah. So for now, people can get ready, prepare their skills, hone their skills.
15:17 Train up.
15:18 Later.
15:18 That's right. Train up. Exactly.
15:20 This portion of Talk Python to Me is brought to you by Tidelift. Tidelift is the first managed
15:28 open source subscription, giving you commercial support and maintenance for the open source
15:32 dependencies you use to build your applications. And with Tidelift, you not only get more dependable
15:38 software, but you pay the maintainers of the exact packages you're using, which means your software
15:43 will keep getting better. The Tidelift subscription covers millions of open source projects across Python,
15:48 JavaScript, Java, PHP, Ruby, .NET, and more. And the subscription includes security updates, licensing,
15:55 verification, indemnification, maintenance and code improvements, package selection and version
16:00 guidance, roadmap input, and tooling and cloud integration. The bottom line is you get the capabilities
16:06 you'd expect and require from commercial software. But now for all the key open source software you depend
16:12 upon, just visit talkpython.fm/Tidelift to get started today.
16:17 You talked a little bit about how this started as working for like in-person experiences, but maybe just give us the
16:26 history. It started way back in 2013, right?
16:28 Yeah, yeah. So yeah, right around when I joined up at Twilio, because I had done some developer
16:33 training stuff, I was sort of given the charter of, you know, we're having this conference,
16:38 and we'd like to do a live training day, you should build some training for Twilio for the for the
16:44 conference. I didn't want to do like slides code, slides code, slides code, you know, kind of like I had
16:49 always done for developer training before. So over the course of like a couple weeks of like frantic
16:55 hacking on like Angular one or something, I think it was back in those days, I created sort of the
17:01 first crappy proto version of Twilio quest, where you could go through and do code challenges, except
17:06 for the code challenges are all manually validated. Like I walked to your laptop and saw that you did
17:10 the thing and then gave you points based on that, right? Was it also originally just in the cloud,
17:15 just in the web?
17:17 Yeah, it was it was just in the browser. Yes, it was built on top of parse on may they rest in power.
17:22 But yeah, so it was, it was an app that was browser based. And yeah, we used it at live events,
17:28 starting in 2013, and kind of sporadically going forward. And then a few years ago,
17:32 we sort of cleaned it up, made a new version of it and actually deployed it on Wagtail, our docs,
17:38 CMS, and did like sort of a version two of Twilio quest that was like a nicer version of what we
17:43 initially did in 2013. And then last August, we launched Twilio quest three, which we rewrote from
17:50 the ground up. And it is, you know, very much this game experience where you download the application,
17:55 run it on your computer. And, and yeah, there are a variety of reasons why we did that. But,
18:01 but yeah, it's kind of started for live training in 2013. And then we sort of rebuilt it from the ground
18:06 up as like a self contained self service game so that it wouldn't be so tightly coupled to live
18:13 training.
18:14 Yeah, I think that's really neat. And people can definitely use it for all sorts of stuff.
18:17 It's very unique in a lot of ways that we're going to talk about how you play it. It's not just your
18:22 standard coding game gamification. Ryan, when did you get involved in the project?
18:26 I joined back in June, I believe it was the first week of June. And that was sort of the last sort of
18:33 crazy, crazy sprint for Signal this year, which is where we did the first sort of public release of
18:41 Twilio quest three.
18:42 Right. And Signal is your big developer conference, right?
18:44 Yeah. Next one's coming up in May. And we have like a big one of those super class events that
18:49 Ken was talking about our live training. We have our biggest one of the year there and have hundreds
18:53 of developers come in. So we really needed to have it to request three up and polished and get the audio
18:58 in and as much content as we could get. So it was sort of this big push that we all kind of came together
19:04 for. So that was sort of my initial experience was very quick. It was a quick pace time.
19:10 It was hectic. It was a hectic time.
19:12 Yeah, we definitely got it together, thankfully, and shipped it in August.
19:17 So yeah, super. And your background coming from games and more web development JavaScript side,
19:23 what part did you work on?
19:25 For me personally, I've always wanted to work on games, but I've also really enjoyed web development.
19:29 So this intersection for me has always been like, when I practice code at home, I write web games.
19:35 So I've been writing games in the same, like we use a library called Phaser, and then we use React,
19:41 and all these web technologies that I've been using to make games for the past several years
19:45 in my own time. What I didn't know then is that I was apparently training up for this exact opening,
19:50 where...
19:51 It's funny how life is like that, right? Like, this is the thing I'm really into,
19:55 and then I have no idea what I'm going to do with this. And then boom, like, wow.
19:58 Yeah, exactly. Good work there on making your hobby fit.
20:02 Yeah, so I had basically been for several, several months before my application to work on
20:10 TwilioQuest, I was working on another game that was powered by Electron and used Phaser and React
20:15 to make an interactive, downloadable video game experience in web tech. So it was sort of that
20:21 technical know-how and experience, I think, is the primary contribution. And then just in general,
20:26 I've been making games for a few years. So I think that I bring some insights on that front as well.
20:31 Yeah, and it's super cool. So I know what React is, I know what Electron is, I know what HTML is,
20:36 Node, all those things. But Phaser I had not heard about, and it looks pretty interesting.
20:40 Tell people about Phaser.
20:41 Phaser.js is a game development framework of sorts, I think is the best way to think about it. So
20:46 you could go into writing your own physics engine and your own collision system and your own audio
20:52 player and your own rendering code.
20:55 Then four years later.
20:56 Yeah, exactly. Then you could start a project. So instead, Phaser gives you a lot of great APIs for
21:02 things that are just like, I just want the character to move when I push the arrow keys. And Phaser says,
21:06 like, okay, make a sprite and then add cursors and then like, okay, your character moves. The camera
21:11 follows them. So it just gives you a lot of great utilities to get you up and running and like making
21:15 your game rather than making all of the giant technological decisions and implementation that
21:21 goes behind having a game run.
21:22 Oh, that's cool. And it's based on Canvas and WebGL and it's on GitHub. Pretty neat.
21:27 Yeah, it's an open source project.
21:28 Yeah, yeah. Okay. Very cool.
21:30 Yeah, it's been a pleasure.
21:30 Yeah, I bet it has. You know, it's really much better than just trying to write that all from scratch,
21:35 right?
21:36 For sure. Yes.
21:36 So Kevin, one of the things that I think that particularly speaks to me when I play this game
21:42 is the way that it is real programming. Because one of the things that kind of bugs me is if I go
21:50 to some online place and says, you can write code here and then this is part of our challenge. And I'll
21:56 talk about some that are nice and not knocking on them at all. But you go there and it's not the same
22:00 experience. It's not the same as if I'm going to open up the main web application that I work on or the
22:06 mobile apps. I'm not going to do that in the browser. I'm going to fire up an IDE or some
22:11 proper editor and work on my local file system, right? And so one of the things that really
22:15 surprised me about this game is you go through and you have these challenges, you got to like unlock
22:19 little electric doors or whatever. And the way you do that is you write some code to solve a challenge
22:23 or a puzzle. But the place and the way you write the code is on your machine, right?
22:28 Yeah, that is something that we kind of felt strongly about. Like, I love a lot of those browser
22:32 based experiences as well. They're fantastic for like teaching the syntax of programming languages and
22:38 things like that. But the skills that you need to like, as you kind of alluded to, to actually write
22:44 code professionally, or you have to kind of start using your computer like a developer, you have to
22:49 kind of know how to navigate a terminal and execute code from the command line and maintain a directory
22:55 where all your all your code lives. So in a lot of the content in TwilioQuest, we try to,
23:01 we try to have you actually do that. And because TwilioQuest is a desktop application running on your
23:06 computer, that gives us the chance to kind of incrementally validate that you've done that. So
23:11 we have one mission where you can learn Git. So we can verify that you have Git installed,
23:17 we can look at a directory where you cloned a repository to see if you've
23:21 created a branch of a certain name. So the fact that we're running on your computer gives us the
23:27 opportunity to kind of really step you through what is necessary to actually set your computer up for
23:33 development, which I think is like an important step of teaching people to fish in this process,
23:38 for sure.
23:39 I agree, because you come to one of these, these online things. And like I said, they can be really
23:45 nice. But then I want to build a real thing. What the heck do I do? I have no like, there's not this
23:50 web editor, okay, I got to figure out a proper editor, I got to, how do I get the, you know, Python or
23:55 Node or Git or whatever it is I'm trying to work with onto the computer. And then Oh, it's not in the
24:00 right path. And there's just all these challenges, right? So it's, it's pretty cool. Ryan, what are your
24:04 thoughts on this?
24:04 Yeah, it's that's the same thing for me. I think back to like learning to code, I use like computer
24:11 craft in Minecraft or something. And I wrote this little thing that made a bot move around. And then
24:16 as soon as you look at your normal computer, and you're like, how on earth do I do anything? Like,
24:22 I don't know how to deploy this code, I don't know how to install stuff. I, it's all just sort of this
24:27 mess that like, there isn't, at least, hopefully, two requests can help solve this. But there's not really
24:32 anything that, that teaches you that process, except for like an instructor sitting next to
24:36 you and like showing you like, how to do this stuff.
24:39 Yeah, you know, there's a couple of other platforms out there that I think are worth throwing out for
24:43 people to just consider kind of in this realm. And they're all trying to approach this problem of I
24:49 want to teach some simple programming skills in some sort of gamified way, right? So the first one is
24:56 the PyBytes code challenge platform, that when you go there, and there's like a bunch of little
25:01 challenges that you do, and you can do them in your browser. And the way those validate is it just
25:06 runs pytest in the background to verify, you know, that it's getting what it would expect, right?
25:10 And then you the gamification side is kind of like you get badges, you become a ninja or levels or
25:15 whatever. Then there's check IO, where you actually go into like virtual worlds, more of the canvas web GL
25:22 type of thing. And you navigate those and you sort of solve parts of the world. And then when you unlock a
25:29 part, you can compare your solution to the other people's solution and talk about it, which is really
25:33 interesting. Like, for example, I went through that and I inadvertently learned that I have this tendency
25:40 to optimize for performance rather than simplicity, whenever I'm doing something, you know, I'm like solving this
25:46 problem. Like, Oh, I'll do it this way, because it would be really bad to just like, you know, re query the list
25:52 every time. Let me like do some sort of little optimization for that. Just not thinking that
25:56 that's what I wanted. That's just, here's a proper solution, right? Then I looked and other people had
26:01 it and like half the length. I'm like, why did they get it so quickly? I'm like, Oh, because they don't
26:05 care about this thing that I thought mattered. And it probably doesn't. Obviously, in that case,
26:09 it doesn't. Right. But it's interesting to get this comparison. And then the last one, which I think is
26:14 super interesting in the game side is code combat. And Kevin, you're familiar with that one,
26:18 right? Yeah, yeah. I've definitely played code combat a little bit. And my daughter Grace has
26:23 made a decent amount of progress through there as well. So yeah, it's a really, it's a really cool
26:27 project. You know what I really like? I love code combat. My daughter's played it some and she was
26:32 quite successful and she's not good at programming. She was pretty young. And what I really like about
26:37 code combat is it doesn't pull the punches. It's not like one of the sketch type things where you drag
26:42 it around. You're like, Oh, guess what? If you turn this around, it'll show you the code that you
26:45 wrote, but you didn't really write. You know what I mean? This one is like a dungeon that you go
26:49 through and you solve these problems, but you solve them by writing in a code editor online for real.
26:55 But what's super interesting is the autocomplete of the code editor is like ridiculous. Like you have
27:00 a hero object and the hero has to maybe attack an enemy. You type the letter A, it'll say it'll
27:05 autocomplete hero attack enemy and it'll like select the enemy, right? It's like ridiculous amounts of
27:09 autocomplete, but it's still real Python code.
27:11 I think that's definitely what I like most about it is that you're typing in code. I mean,
27:16 I think like the autocomplete stuff is also really awesome. And the working with the domain objects
27:25 of the game is kind of interesting is it's sort of introducing you to object oriented programming,
27:31 but not really like you're just kind of absorbing through osmosis. The fact that, you know, there are
27:36 objects that have these members and all of these other, all these other things. So yeah, lots,
27:41 there's definitely a lot of inspiration there for like different things that we do in Toolia Quest.
27:46 Like I think we approach the content in a slightly different way and we, in the game world is,
27:51 is a lot different, but code combat is really, is really cool.
27:54 Like I said before, I think the most important difference that you guys have out there is that
27:58 you write real code with a local editor and then you go to the game and you say, check it out.
28:03 So I'll give a real quick sense so people know the flow. Like I went through the Python part,
28:08 which we'll talk more about, but the first challenge or puzzle you have to solve is install Python 3 on
28:14 your system and set the path, right? So in the game, you actually say, here's the path to the
28:18 interpreter, executable. And then the next one is to create a folder and put a file in it. And
28:23 then after that, it's like, well, we know where Python is and all the files you create for the rest of
28:27 the game are in this folder. We can run them and we don't ever have to ask you again, but it's not like
28:32 there was a now go to the preferences and set the config settings where you select Python. No, it was like part of the
28:37 game. So it was fun to do that or, you know, relatively speaking.
28:40 Yeah. Yeah. I think like exposing it as a part of the, the narrative of the level was pretty important.
28:46 And I think like, yeah, that's probably going to be the main difference people, I hope, will notice in
28:51 TulioQuest is that we made a conscious decision to sort of separate the programming tasks that we would ask people to do
28:58 from like the gameplay aspects of like moving your character around and unlocking laser gates and all
29:03 of that other stuff. More because like where we want to make sure that like the technical skills that
29:07 we're teaching are very practical. I mean, there's, you know, several reasons for that. But in code
29:13 combat, one thing that you're sort of doing is you're learning how like this code combat world works and
29:19 working with this set of objects versus sort of equipping yourself with a skill set to write your own
29:26 Python code. Right. Yes. So I think like that's kind of what we're trying to do with the
29:31 technical content design in TulioQuest. Cool. Ryan, are you familiar with any of these or other
29:36 game like platforms you want to give a shout out to? I'm not familiar with any of these ones in
29:40 particular. The one that always comes to mind for me is there's like an online game called
29:45 Screeps where you sort of write like JavaScript, like little bots that automate a bunch of tasks.
29:50 And it's definitely much more about like, it's not necessarily focused on being educational,
29:54 I don't think. But it's a game that is powered by people writing code, which I still find is an
29:59 Screeps. Yeah. Yeah. Cool. How do you spell that?
30:02 S-C-R-E-E-P-S, I think.
30:05 Screeps. Okay. Yeah. Yeah. Yeah. Yeah. Cool. I'll put a link to that as well. Cool. That sounds
30:12 interesting. Yeah. So let's maybe talk for a minute about the missions that you all have available.
30:18 Then I want to dive into the Python one. Starts out with basic training. The only one, just so you know,
30:24 the only one I've experienced with is the mysteries of the Pythonic temple. So you'll have to just kind
30:29 of talk us through these, but what are some of the missions you got out there?
30:32 A big chunk of the missions in Twilio Quest teach you how to use various Twilio APIs. So Twilio,
30:38 for those that might not be familiar, we're an API company that provides communications APIs. So you
30:45 can use Twilio to send text messages, make voice calls, or create video conferencing, or send faxes,
30:51 all kinds of wild stuff. So a large chunk of the content in Twilio Quest is Twilio related,
30:57 because that's kind of where we started. The place that we're going is starting to use Twilio Quest as
31:02 a platform for general engineering education. So the Python mission, the Pythonic temple is one example
31:08 of that. But we also have a mission called the flame of open source, where you learn how to...
31:13 I love the name there, the flame of open source. Yeah, tell us about it.
31:17 Yeah, it's a fun one. So in that one, you actually go through this forest. And in the center of the
31:24 forest is this ancient artifact known as the flame of open source. And the way that you get to it
31:29 is by configuring Git on your local computer, and going through the process of actually submitting a
31:36 pull request on GitHub to a repository that we've set up on Twilio's GitHub as sort of like a way to
31:42 learn how to do your first pull request.
31:44 Yeah, that's cool. You don't have to do a real PR to a real project. You just have to do a simple
31:49 one to yours, right? That's more achievable.
31:51 Yeah, exactly. So you don't have to, you know, figure out how, how Flask works and submit a PR. But,
31:56 but yeah, so it just ends up being a good way to, you know, actually use GitHub to submit a pull
32:01 request. So you just kind of become familiar with that process. We also have a mission that teaches
32:06 JavaScript, where you're kind of navigating a lab like environment and doing basic JavaScript stuff.
32:12 we're actually kind of in the process of doing a big revamp, to make that a little more story based,
32:17 like the Python mission is. And then we also recently released a mission that's sort of a
32:22 companion for Advent of Code, which is another great resource that's out there that folks can use in the
32:27 month of December or anytime.
32:29 Is that like a problem a day or something like that?
32:31 Yep. It's a new problem every day in December. And they give you unique input that you can download
32:38 to your computer. And you could solve it with whatever tools you wanted. They don't actually
32:42 provide like a browser editor or anything like that. But in TwilioQuest, we provide a mission and,
32:48 you know, some, some tools and an integrated editor, where you can actually use JavaScript to solve the
32:54 problems in Advent of Code as well.
32:56 That's cool. Well, this episode is going to come out probably in January. So people might just want
33:01 to put a note on their calendar for 11 months later, that this is going to be totally relevant.
33:05 That'll just mean that they don't have to wait. They can just do all 25 days.
33:09 The Advent of February code.
33:12 This portion of Talk Python to Me is brought to you by Linode. Whether you're working on a personal
33:20 project or managing your enterprise's infrastructure, Linode has the pricing, support, and scale that you
33:26 need to take your project to the next level. With 11 data centers worldwide, including their newest data
33:31 center in Sydney, Australia, enterprise-grade hardware, S3-compatible storage, and the next-generation
33:37 network, Linode delivers the performance that you expect at a price that you don't.
33:42 Get started on Linode today with a $20 credit and you get access to native SSD storage, a 40-gigabit
33:48 network, industry-leading processors, their revamped cloud manager at cloud.linode.com,
33:54 root access to your server, along with their newest API and a Python CLI. Just visit talkpython.fm
34:00 slash Linode when creating a new Linode account, and you'll automatically get $20 credit for your
34:06 next project. Oh, and one last thing. They're hiring. Go to linode.com slash careers to find out
34:11 more. Let them know that we sent you. Yeah, so let's talk about this, the mysteries of the
34:18 Pythonic Temple. And all these are kind of fun. The little intro for this part is you get to follow
34:23 in the footsteps of the legendary explorer, Toledo van Possum. A hat tip to Geeta van Rossum, right?
34:29 Indeed.
34:30 As you uncover the mysteries of the Pythonic Temple, the last surviving structure of the ancient city of
34:35 Python, and you learn how to use the Python in programming language and other tools. And your reward is the
34:40 staff of Pythonic knowledge. Lovely.
34:42 Indeed it is. Yes.
34:44 Yeah. Did you see the one people have been carrying around at PyCon? I don't know if you were even
34:49 there, but the last couple of years, Anthony Shaw has got this 3D printed, it's probably, I don't know,
34:56 an inch thick and six feet tall and multiple, you know, Python colors. And Brian Okken had one,
35:01 and they're walking around these giant Python, it's got a giant Python symbol on the top. These
35:04 things are crazy.
35:05 Wait, what? So there's a little staff of Pythonic knowledge?
35:09 Oh yeah, let's see if I can find it.
35:10 I have no knowledge of this. This is fantastic. I need to figure this out immediately.
35:15 Oh man.
35:17 It's real.
35:17 Yeah. It's the, yeah, I'll put it, it's called the Pythonic staff of enlightenment. And yeah,
35:24 I'll put it in the show notes here. I'll put it in there right in the doc so you can see right now
35:29 as we're talking.
35:30 I can't believe it. That is so hilarious.
35:33 It is really cool.
35:34 We were not, oh my God. Yeah. So like, I'll just go down a little bit. You'll see this bad boy. Yeah.
35:40 You can order one. They're not totally cheap because there's a lot of power in that bad boy, but yeah.
35:44 Yeah. They even got Guido Van Rossum posing with that thing at one of the conferences. It was great.
35:52 That is pretty cool. Yeah. Now I feel like an idiot for not Googling this first, but that is.
35:58 No, I mean, yeah, like this is beautiful. I think it's actually the perfect reward for this.
36:02 So let me just like run people through the quick thing is, like I said at the beginning, you basically do this on your computer.
36:08 So what I did is I fired up PyCharm and created a folder. And the first, you know, it says you've got to go through
36:13 and collect all of the notes of Toledo, the Explorer to figure out what's going on and so on.
36:18 And they're all behind these locked lightning barrier type things, laser barriers.
36:24 And so you've got to go and solve the problems of each one. Like the first one is configure Python.
36:30 So the game can find it and make sure it's on the machine. The next one is, I like the names here.
36:34 Excuse me. The names are like the trial of salutation, which really is hello world.
36:40 Yeah, indeed.
36:40 You've got the, the trial of soliciting input, which is taking arguments, trial of naming, trial of numbers,
36:47 myriad of properties, word succession, iteration. So like the foundations of the Python language,
36:51 like the truth for the glory of Python, where you do if statements. And finally, the grand finale.
36:58 I won't give people the answer, but you have to do the trial of trickery, which is biz buzz.
37:04 Yep, indeed. So yeah, the entrance into the ancient city of Python was by no means guaranteed.
37:10 You had to earn your place as a citizen of the city. So, so yeah, as the player, you have to go
37:15 through the same citizenship trials that the ancient Pythonistas had to back in those days. So yeah,
37:22 it's pretty fun to build out for sure.
37:24 Yeah, that's super cool. And you're planning, you guys are planning more, right?
37:27 Yeah, yeah. We, so the, if you actually load up the mission, you'll see that a lot of the
37:31 Pythonic temple is, is currently collapsed. And you know, crews are working around the clock to sort of
37:37 unlock new areas of the temple. And in those areas, there'll be sort of similar puzzles around,
37:43 you know, learning how to use Flask and other libraries within Python and other more advanced
37:49 Python programming techniques like object oriented programming and creating modules and things of
37:54 that nature. Much of the current mission is kind of based on or teaching you basic Python syntax.
37:59 So yeah, over the next, you know, coming months, we'll have more areas of the temple that become
38:04 unlocked that you can explore and learn new stuff about Python.
38:07 Cool. And how do I get the update? So one of the things that is easy for websites is to be
38:14 updated without a whole lot of effort from the people. What have you guys done to update the
38:18 thing I downloaded? Or how do I get updates?
38:21 Yeah, so the thing that you downloaded is a launcher program. It's kind of like if you have used
38:26 Minecraft before, like if there's a new version of Minecraft, it sort of automatically downloads it
38:31 and unzips it and all that stuff. When you launch TwilioQuest, you see an interface that will
38:37 check for the newest version. If there's a new version, it'll download it. And then you can
38:41 choose to launch that new version if you would like.
38:43 Okay. Brian, do you want to talk a little bit about the internals about how this thing is built? We've
38:48 touched on some of the things like we touched a tiny bit on phaser and stuff, but maybe a little
38:53 bit deeper look?
38:54 Sure. Yeah, I could probably go on forever and get lost and confused because I'm sure I don't even know
39:00 all of the details. But the core of it, it all sort of starts with that launcher that Kevin mentioned.
39:05 We ship a version of Electron, which is sort of like shipping a small version of Chromium to each user
39:11 so that we can kind of control the environment that our TwilioQuest is running in, which is actually a nice
39:17 luxury compared to the web version where we have to worry about like, does this work on Safari and
39:22 Firefox and Opera and where else?
39:25 Did somebody actually seriously just visit it with IE? Did that actually just happen and they're
39:29 complaining about it? Things like that, right?
39:31 Yeah.
39:31 I think that we actually, that happens a lot because some of the training events and stuff, like we end
39:37 up working with people that are Windows developers that have like some IT restricted machine and like
39:43 that's a, there's a lot of complications around that world that we have to deal with. And so this helps
39:49 us restrict some of those variables. And then there's other variables that this introduces that make
39:53 it hard for us to control because now we're shipping a Windows application, the Mac application and a
39:59 Linux application. But that stuff all kind of wraps a relatively normal web page. Electron gives you
40:06 sort of some Node.js processes that you can use to interact with like the file system and to like
40:11 make network quests. And then we have a, another set of like a traditional web page basically where we
40:17 have React running and it kind of does all of the UI for TwilioQuest. So everything that pops up and
40:22 shows like Cedric is talking to you, one of our, our NPC mascots. That's all like React modals and,
40:29 and dialogue boxes. And then Phaser is sort of letting you walk around the world and interact
40:34 with stuff.
40:34 Okay. Yeah, that's cool. And for people who haven't built Electron JS apps, it's kind of like
40:38 you have the Node side of things and you have the browser side of things. You just have a,
40:43 I don't know if it's index or main, but HTML, I can't remember, but you just have like your
40:47 starter page and your starter JavaScript. And it's much like building a single page app as you would in
40:52 React or Vue or something like that. But then you could call down to Node and do machine level
40:57 stuff as well. Right.
40:58 And so that's where some of the weird stuff comes in where like, because we have the ability to,
41:02 we have sort of an integrated JavaScript IDE that you can use, or IDE is maybe generous,
41:07 but editor. And then that sort of spins up other electron processes, like render processes that run
41:13 your code sandbox so that Twilio Quest doesn't crash if your code loops forever or, or things like
41:18 that. So there's a lot of kind of wild problems that at least in my web development background,
41:22 I've never had to deal with before. So it's been an interesting challenge.
41:25 Yeah, for sure. And how, how long did it take you all to find out that somebody might write code
41:30 that's an infinite loop?
41:32 Yeah.
41:33 I mean, another process because it's hung up and I don't, they keep saying there's a buck in the app,
41:37 but what is, it seems fine to me. I don't know.
41:39 Yeah, no, there's definitely been a lot of like zombie process hunting that has happened over the
41:44 years. But yeah, we, we hit that relatively quickly and there's still a couple of corner cases that where
41:49 things can get gnarly with the code editor, but, but yeah, it's, it's been fun. Like it's just,
41:54 it's a different set of challenges when you're operating on the desktop. When we kind of considered the
41:57 trade-offs, we knew we wanted to write content that could teach any kind of technical skill,
42:02 like whether it was like Git or Python or Rust or MongoDB or whatever it would happen to be.
42:09 We wanted to be able to have like really granular validation and, you know, tight system integration
42:14 for all of that stuff. And we being only one of me for a long time, and then Ryan joined up and has
42:21 just been a superstar for several months now. But with a relatively small team, the prospect of like
42:27 building a cloud-based environment that could support all these different technologies was daunting.
42:31 So we opted to go with solving problems on the client side versus trying to create this
42:37 virtualization infrastructure to do all the stuff that we wanted to do.
42:40 Yeah. There's a lot of challenges to make that happen, set up the right config and
42:44 right. Like if you're doing something that's got a server side process, like you mentioned MongoDB,
42:49 then you've got to have a system, but you don't want them to abuse it or other people to see it.
42:53 It gets really complicated. The security leaks or, you know, Docker or VM escape bugs that who knows
43:00 even exists, right? You don't want to be part of that. So if it runs on the machine with their local
43:05 Python or their local JavaScript or node or whatever, the worst thing is to attack themselves, right?
43:10 Exactly. They are welcome to pwn their own computers if they would like. In fact, that means they've already won.
43:16 They've already become a developer. So good job.
43:18 Exactly. Well done. Well done. It worked on your machine until it didn't.
43:23 Like I'm going to send this like launch sub process, RM-RF, you know, pseudo against their root directory.
43:29 Boom. Like, oh, wait, why is it rebooting?
43:32 Yeah. I like to joke that one of our final missions will be hacking Twilio Quest itself,
43:37 making your own.
43:38 Yeah. Nice. Well, speaking of hacking Twilio Quest, you know, you have these cool missions.
43:44 What is the possibility of customizing missions or creating new missions? Could they, can that be done?
43:52 Can people submit them to you? Would you include them? Like, what's the story around that? Like,
43:56 could you crowdsource some of that? Yeah.
43:58 Give you involved?
43:59 Yeah, no, it's funny you should ask. We were actually just sort of scheming just this very
44:05 week here in December about how we could make that possible. Because we've actually have made
44:10 quite a bit of investment for like content authoring tools that we use.
44:14 Right. Yeah. I was wondering, do you guys have like level builders and other types of things to
44:19 help facilitate this and like for music and so on?
44:22 Yeah. I mean, it's more like we built a lot of the plumbing around tools. So like the primary level
44:27 editor we use is a program called Tiled or Tiled. It's just map editor.org. That's a very popular
44:33 open source tool that, you know, you can use to build maps.
44:37 Oh, yeah. Yeah. Yeah. Yeah.
44:38 So we use that and that exports a JSON file that we that we process and use in the in the game. And then we've just built a lot of scripting and like command line tools for, you know, writing content and markdown and validation code and JavaScript to make sure that people have completed the missions, you know, to specification.
44:57 So yeah, so we're not there yet. But we hope that in the not too distant future and next year, certainly we'll just be able to let people use the same tools that we use to contribute content to Twilio Quest as well.
45:07 Yeah. That sounds really neat. And if you had the ability to create your own custom event that people could be part of, create your own custom levels that people could submit back. I could see a really cool little ecosystem build up around it.
45:20 Yeah. I mean, I've definitely taken a lot of inspiration from Minecraft for a lot of the different parts of the UX and like the the modding community around Minecraft is one of the things that's, you know, fostered a lot of creativity in that community.
45:33 So we definitely want to provide the same kinds of opportunities if folks are interested for Twilio Quest.
45:38 Yeah. As we've worked on this project, we've learned the limitations of being two humans.
45:42 So the more we can bring more more folks in to contribute their knowledge and and train everyone, the better it's going to be for everyone involved, where more people can learn more things from different folks.
45:54 And we really just think that there's an opportunity to kind of help Twilio Quest transcend beyond what just Kevin and I could accomplish on our own.
46:02 Yeah, for sure. I could see tons of folks who are really passionate about their project, whether that's somebody creating a David Lord running Flask or somebody creating a new web framework or a new language or whatever.
46:13 And they're like, I would really love to have a more engaging way to have a tutorial rather than just follow these steps and read the docs.
46:20 Read the docs is great, but it's not the same as a game. Right.
46:24 And so there's a lot of people who want to get visibility or more interest in their projects.
46:29 You could end up with all sorts of things like the phaser people could come along and say, you know what, we want to have a little game to build games, right?
46:37 Very meta or something like that. It seems like it would be a good opportunity.
46:41 Yeah, totally. And I think like that's the like the power that you'd get from going that route is what we've sort of discovered almost by accident,
46:49 which is that just by putting tutorial content in a game form where you provide like an actual literal path forward.
46:57 So people tend to consume or to get much further in a tutorial or in any kind of learning process when they can see where the path leads and like have some kind of incentive to keep moving on.
47:08 So like when we move from the web, which was kind of a little bit like the I can't remember what the PyBytes code challenges I think you mentioned.
47:16 The previous web version of Twilio Quest was very similar where we kind of presented in a text based format.
47:21 Here are the different objectives that you could complete just by taking content that was very similar and kind of putting it in a map that you could explore.
47:29 We very quickly saw developers consuming twice as much or even more content on average than what we were seeing in the version previous.
47:38 So there's a lot of power to structuring technical content and learning in this way for sure.
47:43 How do you feel about like professional developers versus beginners?
47:47 You know, there's been a lot of success with IOT things with young kids.
47:52 I'm thinking middle school age and whatnot, especially people who would are not necessarily drawn to pure game play game development.
48:00 Right. Like the UK did this thing with the BBC micro bit and micro Python and they found the number of young girls interested in programming and computer science massively increased after they had a course with the BBC micro bit rather than just, hey, we're going to have a programming course or a game club or something like that.
48:20 I think like we've definitely seen Twilio Quest do well, like in a very diverse range of audiences, like across gender and age and various other vectors.
48:31 We've seen in a professional setting, there's a manager whose company uses Twilio for various things.
48:39 And he actually has everybody, all new developers when they onboard will actually install Twilio Quest and just kind of play around and learn JavaScript because some of them, you know, don't learn, haven't done JavaScript before.
48:50 Yeah, that's one of the missions, right?
48:51 Yes, that is.
48:53 And so it's like part of their, you know, new engineer onboarding.
48:57 And it's just kind of a fun way to get people up to speed.
49:00 I wonder what their reaction is.
49:02 You know, they're like, what kind of cool company have I joined where my first day is to go play a game?
49:07 I can't believe it.
49:08 Yeah, yeah.
49:08 So, I mean, that's definitely what we're trying to foster.
49:12 But, you know, not everybody is so lucky.
49:14 There are some people who might, you know, fear getting in trouble for playing a game at work, maybe.
49:19 So another thing that we're working on in the first part of the year is exposing a lot of the content in Twilio Quest through a like a command line interface.
49:27 So if you are, for whatever reason, just really not about the game interface, we still want to try to provide some of the same learning opportunities too.
49:36 Sure, sure.
49:36 We chose the CLI just because we still feel that it's really valuable to have the dynamic interaction with the validators that we've written on your local machine versus deploying it just plain deploying the content on the web.
49:49 Because then you get interactive feedback where if any stage along your process, you can figure out like we're able to tell you like, oh, that file path is wrong or your username is slightly case.
50:00 The casing is incorrect.
50:01 Like we would just be about ability.
50:03 We have to help you and we're still on your computer.
50:04 Yeah, no, that makes a lot of sense.
50:06 There's probably some sort of implicit getting comfortable with this being in the command line, knowing where a lot of people don't even when they're not quite programmers don't even know how to get to their terminal app or command prompt these days because those are quite hidden on both Windows and macOS.
50:20 Yeah, certainly.
50:21 Yeah, not bad.
50:23 So a lot of this stuff is very interesting.
50:26 A couple of other resources, I guess.
50:28 You guys threw out there, Tiled from MapEditor.org and Phaser.
50:31 Those are cool.
50:32 Are you familiar with Kenny.nl?
50:35 K-E-N-N-E-Y.nl?
50:37 Oh, of course.
50:37 I think anybody who is developing game projects and has no dollars with which to do it has probably encountered like all the awesome assets that are out there for sure.
50:48 Yeah.
50:49 So you get a bunch of little map tiles and sprites and stuff.
50:53 Yeah.
50:53 It seems like a really cool place.
50:54 People are wanting to build their own levels at some point in the future if that's possible or like play with Phaser or other game like Pi game or arcade.
51:03 Yeah, there's lots of great resources there.
51:05 Also like OpenGameArt.org.
51:08 If you are kind of hurting for assets for music or graphics or that sort of thing, there's a lot of like creative commons or public domain licensed content up there you can use as well.
51:17 Yeah, super.
51:18 And not necessarily something that people could take, but it is interesting that you have it as a separate thing people can get is the original soundtrack to Twilio Quest available on SoundCloud.
51:27 Yeah, absolutely.
51:28 Yeah, we worked with some of our favorite indie chiptune artists and yeah, the original soundtrack I really love.
51:35 I like how it turned out and it'll power a lot more experiences in the game as we go.
51:41 But yeah, definitely check it out from SoundCloud.
51:43 We're also going to try to make it a little easier to download and get a hold of in other formats as well.
51:48 But yeah, super fun.
51:50 Super cool.
51:51 And I saw it and as you said, it reminded you a tiny bit of the early MechWarrior soundtrack, which I take as high praise because I also enjoy the early MechWarrior games.
52:00 The early MechWarrior games were really special.
52:03 I'm talking like 1995 to a little bit after that.
52:07 Yeah.
52:07 Maybe you played it on Opinium 90 or something like that.
52:10 Those, the music was good.
52:12 It was just, those were cool times when games were kind of like, you would experience like, wow, I cannot believe it is this immersive and this real.
52:20 And that music was really, I think a big part of it actually.
52:22 That and the fog.
52:23 Yeah.
52:24 That was kind of like the golden era of like simulation style games because like X-Wing and TIE Fighter were out there as well, which were fantastic.
52:31 But yeah, no, just the, the fact that you kind of had like, it felt like you were piloting like a big lumbering Colossus.
52:38 Fantastic games.
52:39 I mean, definitely did play on a little Penny of 90 machine that I figured out how to work.
52:44 Nice.
52:44 How about you, Ryan?
52:45 Did you play those games?
52:46 I'm not familiar with MechWarrior.
52:47 I missed out on that.
52:49 The X-Wing games I do remember though.
52:51 Yeah.
52:51 Very nice.
52:51 The very early, like them and then the other LucasArts, like, I don't know what they were even called at this point, but those adventure sort of LucasArts games are really fun too.
53:01 Yeah, they were.
53:02 Ryan's like the Spider-Man of our crew.
53:04 He's like, you remember that really old movie, Empire Strikes Back?
53:06 So you can tell us about those types of lines.
53:09 That's awesome.
53:11 Yeah.
53:12 I think it's a classic.
53:12 I remember.
53:13 Yeah.
53:14 That's awesome.
53:15 Cool.
53:15 Well, it's probably a good place to leave it, but congratulations on this project, you guys.
53:20 I know you've been at it for, what is that?
53:23 Six years.
53:24 Overnight success just took six years, but it seems like it's really making a lot of progress and it's unique.
53:30 And I think that's neat.
53:31 Yeah.
53:31 Yeah.
53:31 It's been super fun to work on.
53:33 It's definitely, it's very literally a dream come true for me.
53:36 Like I've wanted to work on games forever and now, you know, have a chance to do it and educate people at the same time.
53:43 So it's been, it's been fantastic.
53:45 Yeah.
53:45 Yeah.
53:45 I agree.
53:46 It's an amazing opportunity that I feel really fortunate to be here for this sort of bizarre intersection between video games and education is sort of, you've mentioned some other places that I'm going to have to check out later, some other sites and stuff.
53:59 But this is the first time I've had any opportunity to do anything like this.
54:03 And it's super cool.
54:04 Yeah.
54:04 It seems really great.
54:05 I'm sure you have a lot of fun all day working on these things, except when you have those weird bugs that drive you crazy.
54:11 Because bugs in games can be super hard sometimes.
54:14 It's really hard to reproduce them.
54:16 Yeah.
54:16 Yeah.
54:16 I used to work on 3D simulators.
54:18 I'm like, why can I not see the thing?
54:20 And it was like, well, we were rendering it counterclockwise instead of clockwise.
54:23 Or so it was invisible.
54:23 It was getting cold.
54:24 It's like, oh my gosh.
54:25 Yeah.
54:26 Fortunately, we have fewer of those issues because that's one of the benefits of Phaser is that it handles some WebGL stuff for us.
54:35 Yeah.
54:35 Beautiful.
54:36 Perfectly.
54:36 All right.
54:37 So before we get out of here, let me ask you the final two questions.
54:40 And given that a lot of this is JavaScript stuff, feel free to give either a Python or JavaScript answer.
54:46 So if you're going to write some code, what editor do you use?
54:48 Ryan first.
54:49 I'm a VS Code person.
54:50 That's the only one I have installed these days.
54:53 Oh, that's a big commitment to just have one editor installed.
54:55 I mean, it's one thing to use one editor.
54:57 It's another to have just one at all.
54:59 Yeah.
55:00 That's all I got left.
55:00 Nice.
55:01 Kevin.
55:01 Yeah.
55:02 I've used a few over the years, but I've also recently pushed in my chips on Visual Studio Code.
55:06 The ecosystem around it has been pretty, pretty cool.
55:09 So that's my weapon of choice these days, for sure.
55:12 That's cool.
55:12 And it probably doesn't hurt that you're both on the same team using the same editor.
55:15 Yes.
55:16 It is convenient.
55:17 Yeah.
55:18 And then normally I'd ask a notable PyPI package.
55:21 So if you got one, go ahead and give it.
55:23 But if you have like an NPM one, that's also acceptable.
55:25 So a notable library that you can use to build fun stuff like this.
55:29 Yeah.
55:30 I think if folks do have any interest in web game development, I think Phaser is definitely
55:35 the one to take away from this episode.
55:37 We support the project through Patreon.
55:40 Rich does a great job with the framework.
55:43 So definitely go check it out.
55:44 Like Phaser 3 and the upcoming Phaser 4, which he's sort of rebuilding from the ground up with
55:49 TypeScript and all kinds of other great stuff.
55:51 Yeah.
55:51 If you're at all interested in getting into web games, Phaser is the one to check out.
55:56 Cool.
55:56 Ryan, you got a recommendation?
55:57 Definitely.
55:57 Yeah.
55:58 I mean, I can give a shout out for Pygame too, actually.
56:00 Python audience, right?
56:02 Pygame is actually the first.
56:03 That's the first place I ever successfully shipped any sort of game project.
56:07 So I can endorse that for sure.
56:09 It gives you a similar great API.
56:12 It gets a little harder to deploy the game.
56:14 Phaser does have the benefit of running on any old web page, but you can still make something
56:18 really cool on a local project with Pygame.
56:21 Right.
56:21 It's a lot of fun.
56:22 That's awesome.
56:23 And you bundle something like PyInstaller.
56:24 You can probably deploy it, but you're right.
56:27 A little bit of HTML and JavaScript is definitely easier to deploy.
56:30 Yeah.
56:30 Absolutely.
56:31 All right, guys.
56:31 Well, this was really fun.
56:32 People are excited.
56:34 Maybe they want to go try it out or look into seeing how they can take more advantage
56:38 of these kinds of things.
56:39 What do you say to them?
56:40 Final call to action?
56:41 I would definitely recommend heading out to Twilio.com slash quest where you can download
56:46 the game.
56:47 It's most recent iteration.
56:49 And yeah, there's also a mailing list that you can sign up for at Twilio.com slash quest.
56:54 We reach out on that mailing list, either Ryan and I do or I do, a couple times a month.
57:00 And when we release new stuff, especially as we release new Python content, that would
57:05 be the best way to keep on top of when that's out.
57:08 Sounds good.
57:08 Ryan, anything you want to add on the way out the door?
57:10 No, that's it.
57:11 Twilio.com slash quest.
57:12 Go check it out.
57:13 Super.
57:14 I'll put all the links in the show notes.
57:15 You guys, this is a lot of fun to explore and think about these ideas and play the game
57:19 a bit.
57:19 Thanks for being here.
57:20 Yeah, no problem.
57:21 Thanks for having us.
57:21 This was a lot of fun.
57:22 Yep.
57:22 You bet.
57:22 Bye.
57:23 Bye.
57:23 Bye.
57:24 Bye.
57:25 This has been another episode of Talk Python to Me.
57:28 Our guests on this episode were Kevin Winery and Ryan Kubik, and it's been sponsored by Datadog
57:34 and Linode.
57:34 Datadog gives you visibility into the whole system running your code.
57:39 Visit talkpython.fm/datadog and see what you've been missing.
57:43 They'll throw in a free t-shirt.
57:44 Start your next Python project on Linode's state-of-the-art cloud service.
57:48 Just visit talkpython.fm/linode, L-I-N-O-D-E.
57:53 You'll automatically get a $20 credit when you create a new account.
57:56 Want to level up your Python?
57:58 If you're just getting started, try my Python Jumpstart by Building 10 Apps course.
58:03 Or if you're looking for something more advanced, check out our new async course that digs into
58:08 all the different types of async programming you can do in Python.
58:11 And of course, if you're interested in more than one of these, be sure to check out our
58:15 Everything Bundle.
58:16 It's like a subscription that never expires.
58:18 Be sure to subscribe to the show.
58:20 Open your favorite podcatcher and search for Python.
58:23 We should be right at the top.
58:24 You can also find the iTunes feed at /itunes, the Google Play feed at /play,
58:29 and the direct RSS feed at /rss on talkpython.fm.
58:33 This is your host, Michael Kennedy.
58:35 Thanks so much for listening.
58:36 I really appreciate it.
58:37 Now get out there and write some Python code.
58:39 I'll see you next time.