WEBVTT

00:00:00.001 --> 00:00:02.440
Are you learning or helping someone else learn Python?

00:00:02.440 --> 00:00:04.300
Why not make a game out of it?

00:00:04.300 --> 00:00:08.940
Twilio Quest is a game that doesn't treat you with kid gloves while teaching you Python.

00:00:08.940 --> 00:00:12.400
Use your editor of choice and write code on your machine

00:00:12.400 --> 00:00:14.820
and still play the game to solve the Python challenges.

00:00:14.820 --> 00:00:18.600
In this episode, you'll meet Kevin Winery and Ryan Kubik from Twilio,

00:00:18.600 --> 00:00:22.320
who created Twilio Quest, and they're here to tell us all about it.

00:00:22.320 --> 00:00:27.480
This is Talk Python To Me, episode 249, recorded December 12, 2019.

00:00:27.480 --> 00:00:44.120
Welcome to Talk Python To Me, a weekly podcast on Python,

00:00:44.120 --> 00:00:47.180
the language, the libraries, the ecosystem, and the personalities.

00:00:47.180 --> 00:00:49.120
This is your host, Michael Kennedy.

00:00:49.120 --> 00:00:51.260
Follow me on Twitter, where I'm @mkennedy.

00:00:51.260 --> 00:00:55.000
Keep up with the show and listen to past episodes at talkpython.fm,

00:00:55.000 --> 00:00:57.500
and follow the show on Twitter via at talkpython.

00:00:57.500 --> 00:01:00.680
This episode is brought to you by Tidelift and Linode.

00:01:00.680 --> 00:01:02.820
Please check out what they're offering during their segments.

00:01:02.820 --> 00:01:04.240
It really helps support the show.

00:01:04.240 --> 00:01:06.460
Kevin, Ryan, welcome to Talk Python To Me.

00:01:06.460 --> 00:01:08.480
Awesome. Thank you very much. It's a pleasure to be here.

00:01:08.480 --> 00:01:09.320
Yeah, thanks.

00:01:09.320 --> 00:01:13.280
Nice to spend a little time with you guys and talk about this programming game.

00:01:13.280 --> 00:01:14.960
I think it's going to be so much fun.

00:01:14.960 --> 00:01:19.520
For a long time, I played actual games, you know, MechWarrior, Half-Life, Counter-Strike,

00:01:19.520 --> 00:01:20.200
something like that.

00:01:20.200 --> 00:01:23.900
But then I felt like that was kind of just wasting my time.

00:01:23.900 --> 00:01:26.960
And my game actually sort of became programming, you know,

00:01:26.960 --> 00:01:29.120
instead of going and diving into a world like that.

00:01:29.120 --> 00:01:31.860
I was like, well, what can I build in the world with code?

00:01:31.860 --> 00:01:34.620
And like creating stuff with code kind of almost became a game to me.

00:01:34.620 --> 00:01:38.120
And you've sort of clashed these worlds together in an interesting sense,

00:01:38.120 --> 00:01:39.640
at least at the learning level.

00:01:39.640 --> 00:01:40.520
Yeah, I think so.

00:01:40.520 --> 00:01:44.180
And it is kind of funny that it sort of scratches the same itch, right?

00:01:44.220 --> 00:01:48.420
Like, you know, building something with code, it seems to somehow feel, I don't know,

00:01:48.420 --> 00:01:52.300
maybe it's not so weird, especially when you see games like Minecraft and that sort of thing.

00:01:52.300 --> 00:01:56.320
But yeah, it's been fun to kind of marry those two passions for me as well.

00:01:56.320 --> 00:01:59.340
Yeah. And if you disguise them right, kids will love them, right?

00:01:59.340 --> 00:02:00.300
Like kids love Minecraft.

00:02:00.300 --> 00:02:04.780
If you told kids to go like do programming homework, they'd be like, no, I don't want to.

00:02:04.780 --> 00:02:06.380
But then they'll like beg for Minecraft, right?

00:02:06.380 --> 00:02:08.840
You know, it's just like the context is really, really interesting.

00:02:08.840 --> 00:02:09.260
Yeah.

00:02:09.260 --> 00:02:13.280
Yeah. Before we get too deep into the game side and talking about Twilio Quest,

00:02:13.280 --> 00:02:16.800
the thing that you both have built, I want to talk a little bit about just where you're coming from

00:02:16.800 --> 00:02:20.240
and your story. So, Kevin, let's start with you. How'd you get into programming in Python?

00:02:20.240 --> 00:02:25.900
I got into programming kind of in high school. There was like a, I don't know if you can call it

00:02:25.900 --> 00:02:31.500
programming, but there is this hyper card software that was installed on the computers at school.

00:02:31.500 --> 00:02:38.580
And I got really into like creating like interfaces in this like drag and drop system where you could

00:02:38.580 --> 00:02:43.380
click on links to go to another card in the, in the system. and just thought that was,

00:02:43.380 --> 00:02:49.780
that was super fun. and then, in college, I studied, programming and wrote like a red

00:02:49.780 --> 00:02:55.060
Rover simulator in scheme. and thought that, thought that I was a genius for figuring out.

00:02:55.060 --> 00:03:00.420
Well, if you did it in scheme, you kind of are, I mean, you are a genius. If you can handle that

00:03:00.420 --> 00:03:02.200
many parentheses at a time.

00:03:02.200 --> 00:03:02.960
So many parentheses.

00:03:02.960 --> 00:03:04.140
So many parentheses.

00:03:04.140 --> 00:03:05.860
Just kidding. Sorry.

00:03:05.980 --> 00:03:10.380
No, it was super fun. And then, but yeah, that, that was kind of what kind of got me hooked is the

00:03:10.380 --> 00:03:15.240
ability to create like even just a stupid little game, like red Rover in, in scheme. And yeah. And

00:03:15.240 --> 00:03:19.980
then I'm working at a, I've been programming for about 15 years now. I've been at Twilio for a little

00:03:19.980 --> 00:03:25.860
over seven years and I do lots of different programming languages, but my primary Python is,

00:03:25.860 --> 00:03:30.900
you know, our documentation website at Twilio, is built on a wagtail, which I'm sure many folks

00:03:30.900 --> 00:03:32.520
know is a CMS extension.

00:03:32.520 --> 00:03:36.720
Yeah. It's a Django. Yeah. Django CMS. It's a really nice one, actually quite nice.

00:03:36.720 --> 00:03:41.260
Yeah. Super extensible. I mean, like Twilio has made a couple minor contributions and we've done a

00:03:41.260 --> 00:03:45.120
whole bunch of customization, but yeah, it's worked out, worked out great. And that's kind of been my

00:03:45.120 --> 00:03:50.600
first big Python project that I've been associated with, but I am more of a JavaScript person by trade for

00:03:50.600 --> 00:03:56.040
sure. Right. And some of the, even though the lessons are for Python for some of the lessons

00:03:56.040 --> 00:04:00.680
and missions, we're going to talk about the app at the low level, it will, we'll dig in as well as

00:04:00.680 --> 00:04:05.480
more of a JavaScript, HTML type of thing, right? Yep. Yep. It is. Yeah. Well, I'm sure we'll dig into

00:04:05.480 --> 00:04:11.380
it, but it's a electron application and, HTML, CSS and JavaScript. So. Yep. Yeah. There's a lot of

00:04:11.380 --> 00:04:16.140
those these days. Ryan, how about you? Yeah. So like you, I spent a lot of time when I was younger

00:04:16.140 --> 00:04:21.360
playing video games and then I ended up just making maps and stuff in video games. And then I

00:04:21.360 --> 00:04:27.320
figured out like, Oh, maybe I should make something useful instead. So that was sort of my transition

00:04:27.320 --> 00:04:32.040
into like, well, maybe I'll try to make a game on its own. And that didn't really fully blossom for me

00:04:32.040 --> 00:04:38.520
until sort of undergrad. I started with Java and then learned to love, hate that. But Python was always

00:04:38.520 --> 00:04:43.040
this sort of like, whenever there was a weird fun experiment, like we had like some big data courses

00:04:43.040 --> 00:04:47.500
or like some machine learning thing, like Python was always the thing they're like, and now you can

00:04:47.500 --> 00:04:51.840
have fun for a minute before you have to go back to writing all of your interfaces and stuff.

00:04:51.840 --> 00:04:57.620
Right, right, right. Yeah. So that my initial impressions of Python have always been very fun,

00:04:57.620 --> 00:05:03.220
even though I've never actually had the chance to use it professionally. But I also, the one time I

00:05:03.220 --> 00:05:09.220
came close as I taught a intro to programming course in Python at a, at a local bootcamp. And that was

00:05:09.220 --> 00:05:14.400
definitely a good choice. I was glad that I did not have to teach people Java in that setting.

00:05:14.400 --> 00:05:19.000
Now you implement this interface and that's an abstract method. So what that means is this,

00:05:19.000 --> 00:05:24.140
and I'm like, Oh my goodness, I just want to print something out on the screen. Can we not do all this?

00:05:24.140 --> 00:05:27.760
Yes. No, it's been amazing. I generally do JavaScript these days,

00:05:27.860 --> 00:05:34.500
since TwilioQuest is all Node and React and all that. But I also am glad I didn't have to explain

00:05:34.500 --> 00:05:36.340
that to new people too. So.

00:05:36.340 --> 00:05:42.700
Yeah, for sure. For sure. So let's start by talking a little bit more about your background,

00:05:42.700 --> 00:05:48.240
because it sounds like you both are somewhat involved in education and TwilioQuest came out of

00:05:48.240 --> 00:05:54.860
some interesting educational stuff done for Twilio and whatnot. So what's your backgrounds

00:05:54.860 --> 00:05:59.260
in teaching and building courses or tutorials and things like that?

00:05:59.260 --> 00:06:04.720
Before coming to Twilio, I worked at another smaller startup called AppCelerator. And we created

00:06:04.720 --> 00:06:10.080
this thing called Titanium, which was a cross-platform tool that let you build mobile applications in

00:06:10.080 --> 00:06:16.640
JavaScript. And I built a lot of educational content around that, sort of like a, sort of a lightweight

00:06:16.640 --> 00:06:23.140
certification program. And I've, and since coming to Twilio, have also worked on documentation and

00:06:23.140 --> 00:06:28.360
other resources for developers, including our live training program. And TwilioQuest was kind of

00:06:28.360 --> 00:06:35.120
came from all of that as sort of a reaction to what I didn't like about how I was teaching developers.

00:06:35.120 --> 00:06:37.520
And TwilioQuest is kind of how I prefer to.

00:06:37.520 --> 00:06:43.420
Yeah, sure. And you're like, I'm teaching them just, here's an API, here's an API, here's kind of a

00:06:43.420 --> 00:06:46.980
static tutorial they have to go through. And you're like, could it be more engaging, huh?

00:06:47.180 --> 00:06:51.940
Yeah, absolutely. Like I, the, I mean, and we'll, I don't know if this is the right time to dive in,

00:06:51.940 --> 00:06:57.140
but basically TwilioQuest was created because I wanted to, you know, live training setting, like give

00:06:57.140 --> 00:07:01.980
people the opportunity to sort of progress at their own pace. Because in any kind of like live training,

00:07:01.980 --> 00:07:07.940
it's either too fast for some people, or it's too slow for some people. And, you know, with something

00:07:07.940 --> 00:07:12.120
self-paced like TwilioQuest, if you're brand new to the topic, and you only make it through three

00:07:12.120 --> 00:07:16.560
exercises, that's great. Or if you're a more advanced developer, maybe you can speed through

00:07:16.560 --> 00:07:21.760
20 pieces of content throughout the day. So yeah, that's a real big challenge of these in-person

00:07:21.760 --> 00:07:26.020
trainings. It's also a challenge of online and self-paced, but it's a really big challenge of

00:07:26.020 --> 00:07:31.400
the next half hour, I want you to do this. Whether that's a PyCon or other conference,

00:07:31.400 --> 00:07:37.020
like live workshop, or it's a week long training class. There's people of massive different

00:07:37.020 --> 00:07:42.420
backgrounds in there, and it's super challenging to give them something interesting that doesn't

00:07:42.420 --> 00:07:49.760
either stop in 10 minutes for the experts or just kill the beginners, right? I did 10 years of in-person

00:07:49.760 --> 00:07:53.900
training, and people would come to me and they would say, Michael, we're almost out of time,

00:07:53.900 --> 00:07:58.640
I'm only halfway done. I don't think I'm getting this topic. Or the point is to have enough that even

00:07:58.640 --> 00:08:02.100
the really experienced people don't run out of time. So don't feel like you've got to get through

00:08:02.100 --> 00:08:06.920
all of it, right? It's just, it's a big challenge, right? And so I think the open-ended

00:08:06.920 --> 00:08:11.020
quest concept, they can just keep going down these paths, which is pretty cool.

00:08:11.020 --> 00:08:16.120
Yeah, totally. And that's like sort of has formed the core of it. And we still use that in our live,

00:08:16.120 --> 00:08:21.940
use TwilioQuest in our live training today for that reason. But yeah, we had like the software and

00:08:21.940 --> 00:08:26.400
kind of a lot of the other tools that we built around it ended up being useful to build something

00:08:26.400 --> 00:08:28.000
for self-service learning too, so.

00:08:28.000 --> 00:08:32.840
Yeah. Before we move off of it, what does live training at Twilio look like? Is that like a big

00:08:32.840 --> 00:08:37.820
company that wants to implement working with you guys, say, hey, come and do an in-person class or

00:08:37.820 --> 00:08:43.960
these like conference things that you do? I know you are exhibitors at many of the conferences around

00:08:43.960 --> 00:08:44.420
and whatnot.

00:08:44.420 --> 00:08:49.640
Yeah, I think it's kind of a little bit of all those things you mentioned. So we will go to

00:08:49.640 --> 00:08:54.980
companies sometimes, and they're interested in sort of, you know, leveling up a bunch of developers on

00:08:54.980 --> 00:08:59.640
how to use Twilio because they're about to embark on a larger project of some kind. So we've definitely

00:08:59.640 --> 00:09:05.320
run TwilioQuest in those settings. And then we also, Twilio will sponsor conferences and other

00:09:05.320 --> 00:09:11.500
meetups and developer events. And we'll often do like a couple hours or maybe a half day where we

00:09:11.500 --> 00:09:17.080
get people together, they play TwilioQuest. And both when we do it on site at Giant Corporation,

00:09:17.080 --> 00:09:22.520
and when we do it at meetup, we usually do a leaderboard with the XP totals of everybody during

00:09:22.520 --> 00:09:27.880
the event. And then we usually give out some like goofy prizes at the end for people that have

00:09:27.880 --> 00:09:33.360
completed certain objectives within TwilioQuest. So yeah, and most of it we do we do kind of

00:09:33.360 --> 00:09:38.940
intersperse it with some live demos, like some live code demos, or some demos of larger applications.

00:09:38.940 --> 00:09:44.140
But it's usually like a facilitated hands on experience where people kind of move through

00:09:44.140 --> 00:09:45.260
the content at their own pace.

00:09:45.260 --> 00:09:49.080
Okay, cool. Ryan, how about you teaching background experience?

00:09:49.080 --> 00:09:53.940
For me, this is again, this is the first full time educational role I've had. So a lot of my

00:09:53.940 --> 00:09:58.760
previous experiences sort of been trying out a bunch of different ways to help people learn and

00:09:58.760 --> 00:10:03.340
find that way that I'm actually effective at doing that. So I mentioned that that one time boot camp

00:10:03.340 --> 00:10:08.620
course I did, that was the only time I did that. Because teaching at a boot camp is stressful and

00:10:08.620 --> 00:10:11.420
crazy, especially on top of a full time job as well.

00:10:11.420 --> 00:10:16.300
Right. It's a pretty big commitment. Those are like 12 weeks. And that's a lot of time, right?

00:10:16.300 --> 00:10:21.040
Yeah, it's definitely a weird place too, because it like, the stakes are pretty high for the people

00:10:21.040 --> 00:10:25.740
involved. Like it's a potential life changing opportunity. And, and like, not being able to

00:10:25.740 --> 00:10:30.360
commit to it, like as a full time position, I just felt like I was hard to serve them as well as I feel

00:10:30.360 --> 00:10:31.020
like they deserved.

00:10:31.020 --> 00:10:31.920
I can imagine. Yeah.

00:10:32.040 --> 00:10:37.740
Yeah. So I've also tried like speaking at local meetups, I do a, like a monthly blog post on

00:10:37.740 --> 00:10:43.580
educational topics. And I just tried a bunch of different little things. And in general, I find

00:10:43.580 --> 00:10:50.000
the, the ways where I kind of either get to engage in conversation with folks or sort of curate an

00:10:50.000 --> 00:10:57.240
experience for them rather than the sort of live, like lecture style. Like I don't think I'd be very

00:10:57.240 --> 00:11:02.300
good at like recording a audio course or like the one time I tried streaming was a little messy,

00:11:02.300 --> 00:11:05.160
like sorts of settings are hard.

00:11:05.160 --> 00:11:09.900
These more interactive sort of, I'm here with you rather than speaking to you.

00:11:09.900 --> 00:11:17.080
Yeah. I like, yeah, being, being more on the team with someone versus sort of portraying as this,

00:11:17.080 --> 00:11:21.100
uh, all knowing deity where I in reality don't know very much at all.

00:11:21.100 --> 00:11:23.160
Sage on the stage.

00:11:23.160 --> 00:11:27.120
Yeah. That's a tricky place to be. So Kevin, while you were speaking, something that

00:11:27.120 --> 00:11:31.740
sounds pretty interesting. You talk about having these leaderboards and people doing this together.

00:11:31.740 --> 00:11:36.020
And, you know, when I was thinking about this, it was like, oh yeah. And the training that you guys

00:11:36.020 --> 00:11:41.840
have been doing and whatnot, this might be really a really fun activity for a meetup, right? So if

00:11:41.840 --> 00:11:46.520
you've got like a Python meetup or some other meetup that there's a mission for, have everybody

00:11:46.520 --> 00:11:53.220
come bring their laptops and then just play together. How do you like create this sort of group

00:11:53.220 --> 00:11:56.920
leaderboard thing? Is that something that people from the outside could do if there's

00:11:57.000 --> 00:11:58.560
meetup organizers out there?

00:11:58.560 --> 00:12:04.120
We have done it for folks before. Like we, we haven't sort of made it self-service, but we have

00:12:04.120 --> 00:12:09.600
a community leaders that have been like, oh man, I would really like to do Twilio quest at our meetup.

00:12:09.600 --> 00:12:15.960
So, you know, it takes me about 10 seconds to create a new like event in Twilio quest. So

00:12:15.960 --> 00:12:22.340
I've created one for folks and they have gone to a URL and they can display the leaderboard there.

00:12:22.580 --> 00:12:28.900
And within the game, you can actually specify that I am participating in this live event. And then it

00:12:28.900 --> 00:12:33.540
starts sending all your points to the leaderboard. So we've definitely done it for a few third parties

00:12:33.540 --> 00:12:38.840
and we do it for first party, like Twilio events all the time. Like we have a Twilio quest tea party,

00:12:39.020 --> 00:12:45.740
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,

00:12:45.740 --> 00:12:50.060
drink tea and eat fancy cakes, and then also play Twilio quest at the same time.

00:12:50.060 --> 00:12:54.760
Yeah, that sounds pretty cool. All right. Nice. I think it would actually be a pretty fun activity.

00:12:54.760 --> 00:12:59.860
If you're trying to get folks involved to have like something of a beginner night, or you could pick

00:12:59.860 --> 00:13:01.740
more missions that are more challenging.

00:13:02.100 --> 00:13:05.300
Yeah, totally. We definitely want to make that more self-service. But in the meantime,

00:13:05.300 --> 00:13:09.680
if you tweet at Kevin Winery, he will set that up for you. So let me know.

00:13:09.680 --> 00:13:14.600
Super, super. Yeah. And I'll put a link to your Twitter, both of your Twitters in the show notes

00:13:14.600 --> 00:13:16.340
so people can just find it in their podcast players. Awesome.

00:13:16.340 --> 00:13:23.780
Now let's dive into Twilio quest proper and I'll read the opening paragraph. It's maybe I should try to

00:13:23.780 --> 00:13:29.860
describe it. It's a little bit, it's like a top-down sort of dungeon exploring game where you go

00:13:29.860 --> 00:13:35.700
through and you find clues and you solve puzzles by writing code to make those things happen, right?

00:13:35.700 --> 00:13:38.200
Is that a fair, very first impression?

00:13:38.200 --> 00:13:44.440
Yeah, yeah, I think so. Like we're kind of trying to go for like a Zelda or Pokemon style RPG where

00:13:44.440 --> 00:13:49.800
a lot of the progression is done by solving code challenges that will, you know, unlock doors and

00:13:49.800 --> 00:13:52.420
clear your progress or the way for progress in various ways.

00:13:52.420 --> 00:13:57.360
One of the things I like is the, there is conversation with little non-player character type

00:13:57.360 --> 00:14:02.640
things, but it actually speaks to you. And I don't know, there's just something about a game where it

00:14:02.640 --> 00:14:06.660
has music, but then the only way to interact with characters is, is reading. There's something nice

00:14:06.660 --> 00:14:11.640
about a little bit of conversation, but there's an opening section and I'll just read what it says

00:14:11.640 --> 00:14:14.700
there to give people the sense of kind of what you're going for, I guess.

00:14:15.260 --> 00:14:19.520
There's more and more, our lives are lived inside the virtual worlds of computers. The universe is

00:14:19.520 --> 00:14:24.900
where these virtual worlds reside is known as the cloud and it expands every second of every day

00:14:24.900 --> 00:14:29.540
with new worlds to discover the ability to write code. The laws that govern these virtual worlds has

00:14:29.540 --> 00:14:35.380
become a precious resource. And you have to go on to sort of save the world from the legacy society

00:14:35.380 --> 00:14:36.740
or something like that, right?

00:14:36.740 --> 00:14:38.820
The legacy systems, yes.

00:14:38.820 --> 00:14:39.920
The legacy systems.

00:14:39.920 --> 00:14:44.500
Yeah, they're always red when they appear in text. Very nice.

00:14:44.500 --> 00:14:49.560
So it starts out and you have this like, hey, welcome. You're going to like learn a little bit

00:14:49.560 --> 00:14:54.060
of code and you're going to, as part of the game, save the world from these legacy systems,

00:14:54.060 --> 00:14:56.760
but really just learn stuff, right? Which is great.

00:14:56.760 --> 00:15:02.760
Yeah. It's mostly, mostly just learning stuff at this point. We, in the coming year, we have some more

00:15:02.760 --> 00:15:07.020
story elements that are going to be coming out to kind of, that will, you know, pitch you against

00:15:07.020 --> 00:15:12.980
the legacy systems. But yeah, today it's mostly just learning how to code in a sci-fi setting,

00:15:12.980 --> 00:15:13.600
for sure.

00:15:13.600 --> 00:15:17.900
Yeah. Yeah. So for now, people can get ready, prepare their skills, hone their skills.

00:15:17.900 --> 00:15:18.380
Train up.

00:15:18.380 --> 00:15:18.660
Later.

00:15:18.660 --> 00:15:20.620
That's right. Train up. Exactly.

00:15:20.620 --> 00:15:28.440
This portion of Talk Python To Me is brought to you by Tidelift. Tidelift is the first managed

00:15:28.440 --> 00:15:32.740
open source subscription, giving you commercial support and maintenance for the open source

00:15:32.740 --> 00:15:38.560
dependencies you use to build your applications. And with Tidelift, you not only get more dependable

00:15:38.560 --> 00:15:43.260
software, but you pay the maintainers of the exact packages you're using, which means your software

00:15:43.260 --> 00:15:48.720
will keep getting better. The Tidelift subscription covers millions of open source projects across Python,

00:15:48.720 --> 00:15:55.120
JavaScript, Java, PHP, Ruby, .NET, and more. And the subscription includes security updates, licensing,

00:15:55.120 --> 00:16:00.260
verification, indemnification, maintenance and code improvements, package selection and version

00:16:00.260 --> 00:16:06.080
guidance, roadmap input, and tooling and cloud integration. The bottom line is you get the capabilities

00:16:06.080 --> 00:16:12.560
you'd expect and require from commercial software. But now for all the key open source software you depend

00:16:12.560 --> 00:16:17.380
upon, just visit talkpython.fm/Tidelift to get started today.

00:16:17.380 --> 00:16:26.940
You talked a little bit about how this started as working for like in-person experiences, but maybe just give us the

00:16:26.940 --> 00:16:28.940
history. It started way back in 2013, right?

00:16:28.940 --> 00:16:33.940
Yeah, yeah. So yeah, right around when I joined up at Twilio, because I had done some developer

00:16:33.940 --> 00:16:38.940
training stuff, I was sort of given the charter of, you know, we're having this conference,

00:16:38.940 --> 00:16:44.380
and we'd like to do a live training day, you should build some training for Twilio for the for the

00:16:44.380 --> 00:16:49.960
conference. I didn't want to do like slides code, slides code, slides code, you know, kind of like I had

00:16:49.960 --> 00:16:55.600
always done for developer training before. So over the course of like a couple weeks of like frantic

00:16:55.600 --> 00:17:01.300
hacking on like Angular one or something, I think it was back in those days, I created sort of the

00:17:01.300 --> 00:17:06.420
first crappy proto version of Twilio quest, where you could go through and do code challenges, except

00:17:06.420 --> 00:17:10.880
for the code challenges are all manually validated. Like I walked to your laptop and saw that you did

00:17:10.880 --> 00:17:15.920
the thing and then gave you points based on that, right? Was it also originally just in the cloud,

00:17:15.920 --> 00:17:16.820
just in the web?

00:17:17.020 --> 00:17:22.800
Yeah, it was it was just in the browser. Yes, it was built on top of parse on may they rest in power.

00:17:22.800 --> 00:17:28.460
But yeah, so it was, it was an app that was browser based. And yeah, we used it at live events,

00:17:28.460 --> 00:17:32.980
starting in 2013, and kind of sporadically going forward. And then a few years ago,

00:17:32.980 --> 00:17:38.300
we sort of cleaned it up, made a new version of it and actually deployed it on Wagtail, our docs,

00:17:38.600 --> 00:17:43.480
CMS, and did like sort of a version two of Twilio quest that was like a nicer version of what we

00:17:43.480 --> 00:17:50.640
initially did in 2013. And then last August, we launched Twilio quest three, which we rewrote from

00:17:50.640 --> 00:17:55.940
the ground up. And it is, you know, very much this game experience where you download the application,

00:17:55.940 --> 00:18:01.960
run it on your computer. And, and yeah, there are a variety of reasons why we did that. But,

00:18:01.960 --> 00:18:06.780
but yeah, it's kind of started for live training in 2013. And then we sort of rebuilt it from the ground

00:18:06.780 --> 00:18:13.900
up as like a self contained self service game so that it wouldn't be so tightly coupled to live

00:18:13.900 --> 00:18:14.180
training.

00:18:14.180 --> 00:18:17.920
Yeah, I think that's really neat. And people can definitely use it for all sorts of stuff.

00:18:17.920 --> 00:18:22.020
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

00:18:22.020 --> 00:18:26.700
standard coding game gamification. Ryan, when did you get involved in the project?

00:18:26.700 --> 00:18:33.940
I joined back in June, I believe it was the first week of June. And that was sort of the last sort of

00:18:33.940 --> 00:18:41.420
crazy, crazy sprint for Signal this year, which is where we did the first sort of public release of

00:18:41.420 --> 00:18:42.000
Twilio quest three.

00:18:42.000 --> 00:18:44.640
Right. And Signal is your big developer conference, right?

00:18:44.640 --> 00:18:49.320
Yeah. Next one's coming up in May. And we have like a big one of those super class events that

00:18:49.320 --> 00:18:53.020
Ken was talking about our live training. We have our biggest one of the year there and have hundreds

00:18:53.020 --> 00:18:58.340
of developers come in. So we really needed to have it to request three up and polished and get the audio

00:18:58.340 --> 00:19:04.480
in and as much content as we could get. So it was sort of this big push that we all kind of came together

00:19:04.480 --> 00:19:10.740
for. So that was sort of my initial experience was very quick. It was a quick pace time.

00:19:10.740 --> 00:19:12.420
It was hectic. It was a hectic time.

00:19:12.980 --> 00:19:17.340
Yeah, we definitely got it together, thankfully, and shipped it in August.

00:19:17.340 --> 00:19:23.720
So yeah, super. And your background coming from games and more web development JavaScript side,

00:19:23.720 --> 00:19:25.000
what part did you work on?

00:19:25.000 --> 00:19:29.280
For me personally, I've always wanted to work on games, but I've also really enjoyed web development.

00:19:29.280 --> 00:19:35.160
So this intersection for me has always been like, when I practice code at home, I write web games.

00:19:35.160 --> 00:19:41.420
So I've been writing games in the same, like we use a library called Phaser, and then we use React,

00:19:41.420 --> 00:19:45.500
and all these web technologies that I've been using to make games for the past several years

00:19:45.500 --> 00:19:50.700
in my own time. What I didn't know then is that I was apparently training up for this exact opening,

00:19:50.700 --> 00:19:51.860
where...

00:19:51.860 --> 00:19:55.220
It's funny how life is like that, right? Like, this is the thing I'm really into,

00:19:55.220 --> 00:19:58.440
and then I have no idea what I'm going to do with this. And then boom, like, wow.

00:19:58.440 --> 00:20:01.760
Yeah, exactly. Good work there on making your hobby fit.

00:20:02.380 --> 00:20:10.220
Yeah, so I had basically been for several, several months before my application to work on

00:20:10.220 --> 00:20:15.320
TwilioQuest, I was working on another game that was powered by Electron and used Phaser and React

00:20:15.320 --> 00:20:21.200
to make an interactive, downloadable video game experience in web tech. So it was sort of that

00:20:21.200 --> 00:20:26.940
technical know-how and experience, I think, is the primary contribution. And then just in general,

00:20:26.940 --> 00:20:31.700
I've been making games for a few years. So I think that I bring some insights on that front as well.

00:20:31.900 --> 00:20:36.960
Yeah, and it's super cool. So I know what React is, I know what Electron is, I know what HTML is,

00:20:36.960 --> 00:20:40.540
Node, all those things. But Phaser I had not heard about, and it looks pretty interesting.

00:20:40.540 --> 00:20:41.640
Tell people about Phaser.

00:20:41.640 --> 00:20:46.600
Phaser.js is a game development framework of sorts, I think is the best way to think about it. So

00:20:46.600 --> 00:20:52.400
you could go into writing your own physics engine and your own collision system and your own audio

00:20:52.400 --> 00:20:55.020
player and your own rendering code.

00:20:55.280 --> 00:20:56.500
Then four years later.

00:20:56.500 --> 00:21:02.200
Yeah, exactly. Then you could start a project. So instead, Phaser gives you a lot of great APIs for

00:21:02.200 --> 00:21:06.400
things that are just like, I just want the character to move when I push the arrow keys. And Phaser says,

00:21:06.400 --> 00:21:11.120
like, okay, make a sprite and then add cursors and then like, okay, your character moves. The camera

00:21:11.120 --> 00:21:15.920
follows them. So it just gives you a lot of great utilities to get you up and running and like making

00:21:15.920 --> 00:21:21.220
your game rather than making all of the giant technological decisions and implementation that

00:21:21.220 --> 00:21:22.740
goes behind having a game run.

00:21:22.740 --> 00:21:27.320
Oh, that's cool. And it's based on Canvas and WebGL and it's on GitHub. Pretty neat.

00:21:27.320 --> 00:21:28.500
Yeah, it's an open source project.

00:21:28.500 --> 00:21:30.240
Yeah, yeah. Okay. Very cool.

00:21:30.240 --> 00:21:30.960
Yeah, it's been a pleasure.

00:21:30.960 --> 00:21:35.800
Yeah, I bet it has. You know, it's really much better than just trying to write that all from scratch,

00:21:35.800 --> 00:21:36.220
right?

00:21:36.220 --> 00:21:36.980
For sure. Yes.

00:21:36.980 --> 00:21:42.720
So Kevin, one of the things that I think that particularly speaks to me when I play this game

00:21:42.720 --> 00:21:50.560
is the way that it is real programming. Because one of the things that kind of bugs me is if I go

00:21:50.560 --> 00:21:56.180
to some online place and says, you can write code here and then this is part of our challenge. And I'll

00:21:56.180 --> 00:22:00.900
talk about some that are nice and not knocking on them at all. But you go there and it's not the same

00:22:00.900 --> 00:22:06.020
experience. It's not the same as if I'm going to open up the main web application that I work on or the

00:22:06.020 --> 00:22:11.160
mobile apps. I'm not going to do that in the browser. I'm going to fire up an IDE or some

00:22:11.160 --> 00:22:15.540
proper editor and work on my local file system, right? And so one of the things that really

00:22:15.540 --> 00:22:19.340
surprised me about this game is you go through and you have these challenges, you got to like unlock

00:22:19.340 --> 00:22:23.580
little electric doors or whatever. And the way you do that is you write some code to solve a challenge

00:22:23.580 --> 00:22:28.260
or a puzzle. But the place and the way you write the code is on your machine, right?

00:22:28.260 --> 00:22:32.960
Yeah, that is something that we kind of felt strongly about. Like, I love a lot of those browser

00:22:32.960 --> 00:22:38.980
based experiences as well. They're fantastic for like teaching the syntax of programming languages and

00:22:38.980 --> 00:22:44.180
things like that. But the skills that you need to like, as you kind of alluded to, to actually write

00:22:44.180 --> 00:22:49.680
code professionally, or you have to kind of start using your computer like a developer, you have to

00:22:49.680 --> 00:22:55.680
kind of know how to navigate a terminal and execute code from the command line and maintain a directory

00:22:55.680 --> 00:23:01.480
where all your all your code lives. So in a lot of the content in TwilioQuest, we try to,

00:23:01.480 --> 00:23:06.860
we try to have you actually do that. And because TwilioQuest is a desktop application running on your

00:23:06.860 --> 00:23:11.720
computer, that gives us the chance to kind of incrementally validate that you've done that. So

00:23:11.720 --> 00:23:17.760
we have one mission where you can learn Git. So we can verify that you have Git installed,

00:23:17.760 --> 00:23:21.480
we can look at a directory where you cloned a repository to see if you've

00:23:21.480 --> 00:23:27.000
created a branch of a certain name. So the fact that we're running on your computer gives us the

00:23:27.000 --> 00:23:33.340
opportunity to kind of really step you through what is necessary to actually set your computer up for

00:23:33.340 --> 00:23:38.980
development, which I think is like an important step of teaching people to fish in this process,

00:23:38.980 --> 00:23:39.360
for sure.

00:23:39.360 --> 00:23:45.120
I agree, because you come to one of these, these online things. And like I said, they can be really

00:23:45.120 --> 00:23:50.860
nice. But then I want to build a real thing. What the heck do I do? I have no like, there's not this

00:23:50.860 --> 00:23:55.800
web editor, okay, I got to figure out a proper editor, I got to, how do I get the, you know, Python or

00:23:55.800 --> 00:24:00.200
Node or Git or whatever it is I'm trying to work with onto the computer. And then Oh, it's not in the

00:24:00.200 --> 00:24:04.240
right path. And there's just all these challenges, right? So it's, it's pretty cool. Ryan, what are your

00:24:04.240 --> 00:24:04.740
thoughts on this?

00:24:04.740 --> 00:24:11.320
Yeah, it's that's the same thing for me. I think back to like learning to code, I use like computer

00:24:11.320 --> 00:24:16.320
craft in Minecraft or something. And I wrote this little thing that made a bot move around. And then

00:24:16.320 --> 00:24:22.080
as soon as you look at your normal computer, and you're like, how on earth do I do anything? Like,

00:24:22.080 --> 00:24:27.420
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

00:24:27.420 --> 00:24:32.500
mess that like, there isn't, at least, hopefully, two requests can help solve this. But there's not really

00:24:32.500 --> 00:24:36.980
anything that, that teaches you that process, except for like an instructor sitting next to

00:24:36.980 --> 00:24:39.700
you and like showing you like, how to do this stuff.

00:24:39.700 --> 00:24:43.880
Yeah, you know, there's a couple of other platforms out there that I think are worth throwing out for

00:24:43.880 --> 00:24:49.640
people to just consider kind of in this realm. And they're all trying to approach this problem of I

00:24:49.640 --> 00:24:56.520
want to teach some simple programming skills in some sort of gamified way, right? So the first one is

00:24:56.520 --> 00:25:01.640
the PyBytes code challenge platform, that when you go there, and there's like a bunch of little

00:25:01.640 --> 00:25:06.040
challenges that you do, and you can do them in your browser. And the way those validate is it just

00:25:06.040 --> 00:25:10.280
runs pytest in the background to verify, you know, that it's getting what it would expect, right?

00:25:10.280 --> 00:25:15.780
And then you the gamification side is kind of like you get badges, you become a ninja or levels or

00:25:15.780 --> 00:25:22.260
whatever. Then there's check IO, where you actually go into like virtual worlds, more of the canvas web GL

00:25:22.260 --> 00:25:29.540
type of thing. And you navigate those and you sort of solve parts of the world. And then when you unlock a

00:25:29.540 --> 00:25:33.860
part, you can compare your solution to the other people's solution and talk about it, which is really

00:25:33.860 --> 00:25:40.780
interesting. Like, for example, I went through that and I inadvertently learned that I have this tendency

00:25:40.780 --> 00:25:46.760
to optimize for performance rather than simplicity, whenever I'm doing something, you know, I'm like solving this

00:25:46.760 --> 00:25:52.520
problem. Like, Oh, I'll do it this way, because it would be really bad to just like, you know, re query the list

00:25:52.520 --> 00:25:56.560
every time. Let me like do some sort of little optimization for that. Just not thinking that

00:25:56.560 --> 00:26:01.260
that's what I wanted. That's just, here's a proper solution, right? Then I looked and other people had

00:26:01.260 --> 00:26:05.340
it and like half the length. I'm like, why did they get it so quickly? I'm like, Oh, because they don't

00:26:05.340 --> 00:26:09.040
care about this thing that I thought mattered. And it probably doesn't. Obviously, in that case,

00:26:09.040 --> 00:26:14.700
it doesn't. Right. But it's interesting to get this comparison. And then the last one, which I think is

00:26:14.700 --> 00:26:18.520
super interesting in the game side is code combat. And Kevin, you're familiar with that one,

00:26:18.520 --> 00:26:23.140
right? Yeah, yeah. I've definitely played code combat a little bit. And my daughter Grace has

00:26:23.140 --> 00:26:27.880
made a decent amount of progress through there as well. So yeah, it's a really, it's a really cool

00:26:27.880 --> 00:26:32.660
project. You know what I really like? I love code combat. My daughter's played it some and she was

00:26:32.660 --> 00:26:37.220
quite successful and she's not good at programming. She was pretty young. And what I really like about

00:26:37.220 --> 00:26:42.520
code combat is it doesn't pull the punches. It's not like one of the sketch type things where you drag

00:26:42.520 --> 00:26:45.780
it around. You're like, Oh, guess what? If you turn this around, it'll show you the code that you

00:26:45.780 --> 00:26:49.980
wrote, but you didn't really write. You know what I mean? This one is like a dungeon that you go

00:26:49.980 --> 00:26:55.260
through and you solve these problems, but you solve them by writing in a code editor online for real.

00:26:55.260 --> 00:27:00.320
But what's super interesting is the autocomplete of the code editor is like ridiculous. Like you have

00:27:00.320 --> 00:27:05.500
a hero object and the hero has to maybe attack an enemy. You type the letter A, it'll say it'll

00:27:05.500 --> 00:27:09.980
autocomplete hero attack enemy and it'll like select the enemy, right? It's like ridiculous amounts of

00:27:09.980 --> 00:27:11.960
autocomplete, but it's still real Python code.

00:27:11.960 --> 00:27:16.880
I think that's definitely what I like most about it is that you're typing in code. I mean,

00:27:16.880 --> 00:27:25.640
I think like the autocomplete stuff is also really awesome. And the working with the domain objects

00:27:25.640 --> 00:27:31.480
of the game is kind of interesting is it's sort of introducing you to object oriented programming,

00:27:31.480 --> 00:27:36.540
but not really like you're just kind of absorbing through osmosis. The fact that, you know, there are

00:27:36.540 --> 00:27:41.740
objects that have these members and all of these other, all these other things. So yeah, lots,

00:27:41.740 --> 00:27:46.360
there's definitely a lot of inspiration there for like different things that we do in Toolia Quest.

00:27:46.360 --> 00:27:51.020
Like I think we approach the content in a slightly different way and we, in the game world is,

00:27:51.020 --> 00:27:54.400
is a lot different, but code combat is really, is really cool.

00:27:54.400 --> 00:27:58.720
Like I said before, I think the most important difference that you guys have out there is that

00:27:58.720 --> 00:28:03.960
you write real code with a local editor and then you go to the game and you say, check it out.

00:28:03.960 --> 00:28:08.180
So I'll give a real quick sense so people know the flow. Like I went through the Python part,

00:28:08.180 --> 00:28:14.620
which we'll talk more about, but the first challenge or puzzle you have to solve is install Python 3 on

00:28:14.620 --> 00:28:18.500
your system and set the path, right? So in the game, you actually say, here's the path to the

00:28:18.500 --> 00:28:23.580
interpreter, executable. And then the next one is to create a folder and put a file in it. And

00:28:23.580 --> 00:28:27.360
then after that, it's like, well, we know where Python is and all the files you create for the rest of

00:28:27.360 --> 00:28:32.360
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

00:28:32.360 --> 00:28:37.420
there was a now go to the preferences and set the config settings where you select Python. No, it was like part of the

00:28:37.420 --> 00:28:40.560
game. So it was fun to do that or, you know, relatively speaking.

00:28:40.560 --> 00:28:46.200
Yeah. Yeah. I think like exposing it as a part of the narrative of the level was pretty important.

00:28:46.200 --> 00:28:51.180
And I think like, yeah, that's probably going to be the main difference people, I hope, will notice in

00:28:51.180 --> 00:28:58.500
TulioQuest is that we made a conscious decision to sort of separate the programming tasks that we would ask people to do

00:28:58.500 --> 00:29:03.420
from like the gameplay aspects of like moving your character around and unlocking laser gates and all

00:29:03.420 --> 00:29:07.960
of that other stuff. More because like where we want to make sure that like the technical skills that

00:29:07.960 --> 00:29:13.400
we're teaching are very practical. I mean, there's, you know, several reasons for that. But in code

00:29:13.400 --> 00:29:19.600
combat, one thing that you're sort of doing is you're learning how like this code combat world works and

00:29:19.600 --> 00:29:26.600
working with this set of objects versus sort of equipping yourself with a skill set to write your own

00:29:26.600 --> 00:29:31.520
Python code. Right. Yes. So I think like that's kind of what we're trying to do with the

00:29:31.520 --> 00:29:36.780
technical content design in TulioQuest. Cool. Ryan, are you familiar with any of these or other

00:29:36.780 --> 00:29:40.940
game like platforms you want to give a shout out to? I'm not familiar with any of these ones in

00:29:40.940 --> 00:29:45.000
particular. The one that always comes to mind for me is there's like an online game called

00:29:45.000 --> 00:29:50.640
Screeps where you sort of write like JavaScript, like little bots that automate a bunch of tasks.

00:29:50.640 --> 00:29:54.860
And it's definitely much more about like, it's not necessarily focused on being educational,

00:29:54.860 --> 00:29:59.540
I don't think. But it's a game that is powered by people writing code, which I still find is an

00:29:59.780 --> 00:30:02.700
Screeps. Yeah. Yeah. Cool. How do you spell that?

00:30:02.700 --> 00:30:05.560
S-C-R-E-E-P-S, I think.

00:30:05.560 --> 00:30:12.260
Screeps. Okay. Yeah. Yeah. Yeah. Yeah. Cool. I'll put a link to that as well. Cool. That sounds

00:30:12.260 --> 00:30:18.960
interesting. Yeah. So let's maybe talk for a minute about the missions that you all have available.

00:30:18.960 --> 00:30:24.600
Then I want to dive into the Python one. Starts out with basic training. The only one, just so you know,

00:30:24.640 --> 00:30:29.500
the only one I've experienced with is the mysteries of the Pythonic temple. So you'll have to just kind

00:30:29.500 --> 00:30:32.040
of talk us through these, but what are some of the missions you got out there?

00:30:32.040 --> 00:30:38.400
A big chunk of the missions in Twilio Quest teach you how to use various Twilio APIs. So Twilio,

00:30:38.400 --> 00:30:45.060
for those that might not be familiar, we're an API company that provides communications APIs. So you

00:30:45.060 --> 00:30:51.900
can use Twilio to send text messages, make voice calls, or create video conferencing, or send faxes,

00:30:51.900 --> 00:30:57.380
all kinds of wild stuff. So a large chunk of the content in Twilio Quest is Twilio related,

00:30:57.380 --> 00:31:02.400
because that's kind of where we started. The place that we're going is starting to use Twilio Quest as

00:31:02.400 --> 00:31:08.960
a platform for general engineering education. So the Python mission, the Pythonic temple is one example

00:31:08.960 --> 00:31:13.980
of that. But we also have a mission called the flame of open source, where you learn how to...

00:31:13.980 --> 00:31:17.700
I love the name there, the flame of open source. Yeah, tell us about it.

00:31:17.760 --> 00:31:24.260
Yeah, it's a fun one. So in that one, you actually go through this forest. And in the center of the

00:31:24.260 --> 00:31:29.720
forest is this ancient artifact known as the flame of open source. And the way that you get to it

00:31:29.720 --> 00:31:36.020
is by configuring Git on your local computer, and going through the process of actually submitting a

00:31:36.020 --> 00:31:42.320
pull request on GitHub to a repository that we've set up on Twilio's GitHub as sort of like a way to

00:31:42.320 --> 00:31:44.240
learn how to do your first pull request.

00:31:44.400 --> 00:31:49.440
Yeah, that's cool. You don't have to do a real PR to a real project. You just have to do a simple

00:31:49.440 --> 00:31:51.320
one to yours, right? That's more achievable.

00:31:51.320 --> 00:31:56.880
Yeah, exactly. So you don't have to, you know, figure out how, how Flask works and submit a PR. But,

00:31:56.880 --> 00:32:01.940
but yeah, so it just ends up being a good way to, you know, actually use GitHub to submit a pull

00:32:01.940 --> 00:32:06.880
request. So you just kind of become familiar with that process. We also have a mission that teaches

00:32:06.880 --> 00:32:12.920
JavaScript, where you're kind of navigating a lab like environment and doing basic JavaScript stuff.

00:32:12.920 --> 00:32:17.800
we're actually kind of in the process of doing a big revamp, to make that a little more story based,

00:32:17.800 --> 00:32:22.500
like the Python mission is. And then we also recently released a mission that's sort of a

00:32:22.500 --> 00:32:27.720
companion for Advent of Code, which is another great resource that's out there that folks can use in the

00:32:27.720 --> 00:32:29.020
month of December or anytime.

00:32:29.020 --> 00:32:31.880
Is that like a problem a day or something like that?

00:32:31.880 --> 00:32:38.240
Yep. It's a new problem every day in December. And they give you unique input that you can download

00:32:38.240 --> 00:32:42.900
to your computer. And you could solve it with whatever tools you wanted. They don't actually

00:32:42.900 --> 00:32:48.300
provide like a browser editor or anything like that. But in TwilioQuest, we provide a mission and,

00:32:48.300 --> 00:32:54.100
you know, some, some tools and an integrated editor, where you can actually use JavaScript to solve the

00:32:54.100 --> 00:32:56.340
problems in Advent of Code as well.

00:32:56.540 --> 00:33:01.160
That's cool. Well, this episode is going to come out probably in January. So people might just want

00:33:01.160 --> 00:33:05.760
to put a note on their calendar for 11 months later, that this is going to be totally relevant.

00:33:05.760 --> 00:33:09.400
That'll just mean that they don't have to wait. They can just do all 25 days.

00:33:09.400 --> 00:33:12.760
The Advent of February code.

00:33:12.920 --> 00:33:20.540
This portion of Talk Python To Me is brought to you by Linode. Whether you're working on a personal

00:33:20.540 --> 00:33:26.020
project or managing your enterprise's infrastructure, Linode has the pricing, support, and scale that you

00:33:26.020 --> 00:33:31.400
need to take your project to the next level. With 11 data centers worldwide, including their newest data

00:33:31.400 --> 00:33:37.860
center in Sydney, Australia, enterprise-grade hardware, S3-compatible storage, and the next-generation

00:33:37.860 --> 00:33:42.560
network, Linode delivers the performance that you expect at a price that you don't.

00:33:42.560 --> 00:33:48.900
Get started on Linode today with a $20 credit and you get access to native SSD storage, a 40-gigabit

00:33:48.900 --> 00:33:54.120
network, industry-leading processors, their revamped cloud manager at cloud.linode.com,

00:33:54.120 --> 00:34:00.940
root access to your server, along with their newest API and a Python CLI. Just visit talkpython.fm

00:34:00.940 --> 00:34:06.120
slash Linode when creating a new Linode account, and you'll automatically get $20 credit for your

00:34:06.120 --> 00:34:11.560
next project. Oh, and one last thing. They're hiring. Go to linode.com slash careers to find out

00:34:11.560 --> 00:34:18.300
more. Let them know that we sent you. Yeah, so let's talk about this, the mysteries of the

00:34:18.300 --> 00:34:23.080
Pythonic Temple. And all these are kind of fun. The little intro for this part is you get to follow

00:34:23.080 --> 00:34:29.820
in the footsteps of the legendary explorer, Toledo van Possum. A hat tip to Geeta van Rossum, right?

00:34:29.820 --> 00:34:30.140
Indeed.

00:34:30.140 --> 00:34:35.600
As you uncover the mysteries of the Pythonic Temple, the last surviving structure of the ancient city of

00:34:35.600 --> 00:34:40.320
Python, and you learn how to use the Python in programming language and other tools. And your reward is the

00:34:40.320 --> 00:34:42.880
staff of Pythonic knowledge. Lovely.

00:34:42.880 --> 00:34:44.100
Indeed it is. Yes.

00:34:44.100 --> 00:34:49.020
Yeah. Did you see the one people have been carrying around at PyCon? I don't know if you were even

00:34:49.020 --> 00:34:56.100
there, but the last couple of years, Anthony Shaw has got this 3D printed, it's probably, I don't know,

00:34:56.100 --> 00:35:01.060
an inch thick and six feet tall and multiple, you know, Python colors. And Brian Okken had one,

00:35:01.060 --> 00:35:04.940
and they're walking around these giant Python, it's got a giant Python symbol on the top. These

00:35:04.940 --> 00:35:05.400
things are crazy.

00:35:05.400 --> 00:35:09.180
Wait, what? So there's a little staff of Pythonic knowledge?

00:35:09.180 --> 00:35:10.440
Oh yeah, let's see if I can find it.

00:35:10.440 --> 00:35:15.180
I have no knowledge of this. This is fantastic. I need to figure this out immediately.

00:35:15.180 --> 00:35:17.060
Oh man.

00:35:17.060 --> 00:35:17.580
It's real.

00:35:17.980 --> 00:35:24.160
Yeah. It's the, yeah, I'll put it, it's called the Pythonic staff of enlightenment. And yeah,

00:35:24.160 --> 00:35:29.580
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

00:35:29.580 --> 00:35:30.220
as we're talking.

00:35:30.220 --> 00:35:33.160
I can't believe it. That is so hilarious.

00:35:33.160 --> 00:35:34.600
It is really cool.

00:35:34.720 --> 00:35:40.140
We were not, oh my God. Yeah. So like, I'll just go down a little bit. You'll see this bad boy. Yeah.

00:35:40.140 --> 00:35:44.520
You can order one. They're not totally cheap because there's a lot of power in that bad boy, but yeah.

00:35:44.520 --> 00:35:52.160
Yeah. They even got Guido Van Rossum posing with that thing at one of the conferences. It was great.

00:35:52.160 --> 00:35:58.060
That is pretty cool. Yeah. Now I feel like an idiot for not Googling this first, but that is.

00:35:58.060 --> 00:36:02.200
No, I mean, yeah, like this is beautiful. I think it's actually the perfect reward for this.

00:36:02.320 --> 00:36:08.400
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.

00:36:08.400 --> 00:36:13.440
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

00:36:13.440 --> 00:36:18.640
and collect all of the notes of Toledo, the Explorer to figure out what's going on and so on.

00:36:18.640 --> 00:36:24.900
And they're all behind these locked lightning barrier type things, laser barriers.

00:36:24.900 --> 00:36:30.220
And so you've got to go and solve the problems of each one. Like the first one is configure Python.

00:36:30.220 --> 00:36:34.980
So the game can find it and make sure it's on the machine. The next one is, I like the names here.

00:36:34.980 --> 00:36:40.080
Excuse me. The names are like the trial of salutation, which really is hello world.

00:36:40.080 --> 00:36:40.740
Yeah, indeed.

00:36:40.740 --> 00:36:47.200
You've got the trial of soliciting input, which is taking arguments, trial of naming, trial of numbers,

00:36:47.200 --> 00:36:51.880
myriad of properties, word succession, iteration. So like the foundations of the Python language,

00:36:51.880 --> 00:36:58.780
like the truth for the glory of Python, where you do if statements. And finally, the grand finale.

00:36:58.780 --> 00:37:04.280
I won't give people the answer, but you have to do the trial of trickery, which is biz buzz.

00:37:04.280 --> 00:37:10.460
Yep, indeed. So yeah, the entrance into the ancient city of Python was by no means guaranteed.

00:37:10.460 --> 00:37:15.820
You had to earn your place as a citizen of the city. So, so yeah, as the player, you have to go

00:37:15.820 --> 00:37:22.060
through the same citizenship trials that the ancient Pythonistas had to back in those days. So yeah,

00:37:22.060 --> 00:37:24.020
it's pretty fun to build out for sure.

00:37:24.020 --> 00:37:27.020
Yeah, that's super cool. And you're planning, you guys are planning more, right?

00:37:27.020 --> 00:37:31.780
Yeah, yeah. We, so the, if you actually load up the mission, you'll see that a lot of the

00:37:31.780 --> 00:37:37.620
Pythonic temple is, is currently collapsed. And you know, crews are working around the clock to sort of

00:37:37.620 --> 00:37:43.700
unlock new areas of the temple. And in those areas, there'll be sort of similar puzzles around,

00:37:43.700 --> 00:37:49.320
you know, learning how to use Flask and other libraries within Python and other more advanced

00:37:49.320 --> 00:37:54.760
Python programming techniques like object oriented programming and creating modules and things of

00:37:54.760 --> 00:37:59.500
that nature. Much of the current mission is kind of based on or teaching you basic Python syntax.

00:37:59.500 --> 00:38:04.540
So yeah, over the next, you know, coming months, we'll have more areas of the temple that become

00:38:04.540 --> 00:38:07.260
unlocked that you can explore and learn new stuff about Python.

00:38:07.520 --> 00:38:14.040
Cool. And how do I get the update? So one of the things that is easy for websites is to be

00:38:14.040 --> 00:38:18.820
updated without a whole lot of effort from the people. What have you guys done to update the

00:38:18.820 --> 00:38:21.440
thing I downloaded? Or how do I get updates?

00:38:21.440 --> 00:38:26.740
Yeah, so the thing that you downloaded is a launcher program. It's kind of like if you have used

00:38:26.740 --> 00:38:31.540
Minecraft before, like if there's a new version of Minecraft, it sort of automatically downloads it

00:38:31.540 --> 00:38:37.420
and unzips it and all that stuff. When you launch TwilioQuest, you see an interface that will

00:38:37.420 --> 00:38:41.380
check for the newest version. If there's a new version, it'll download it. And then you can

00:38:41.380 --> 00:38:43.900
choose to launch that new version if you would like.

00:38:43.940 --> 00:38:48.380
Okay. Brian, do you want to talk a little bit about the internals about how this thing is built? We've

00:38:48.380 --> 00:38:53.720
touched on some of the things like we touched a tiny bit on phaser and stuff, but maybe a little

00:38:53.720 --> 00:38:54.420
bit deeper look?

00:38:54.420 --> 00:39:00.180
Sure. Yeah, I could probably go on forever and get lost and confused because I'm sure I don't even know

00:39:00.180 --> 00:39:05.080
all of the details. But the core of it, it all sort of starts with that launcher that Kevin mentioned.

00:39:05.420 --> 00:39:11.900
We ship a version of Electron, which is sort of like shipping a small version of Chromium to each user

00:39:11.900 --> 00:39:17.940
so that we can kind of control the environment that our TwilioQuest is running in, which is actually a nice

00:39:17.940 --> 00:39:22.880
luxury compared to the web version where we have to worry about like, does this work on Safari and

00:39:22.880 --> 00:39:25.040
Firefox and Opera and where else?

00:39:25.040 --> 00:39:29.640
Did somebody actually seriously just visit it with IE? Did that actually just happen and they're

00:39:29.640 --> 00:39:31.300
complaining about it? Things like that, right?

00:39:31.300 --> 00:39:31.460
Yeah.

00:39:31.460 --> 00:39:37.720
I think that we actually, that happens a lot because some of the training events and stuff, like we end

00:39:37.720 --> 00:39:43.760
up working with people that are Windows developers that have like some IT restricted machine and like

00:39:43.760 --> 00:39:49.800
that's a, there's a lot of complications around that world that we have to deal with. And so this helps

00:39:49.800 --> 00:39:53.740
us restrict some of those variables. And then there's other variables that this introduces that make

00:39:53.740 --> 00:39:59.320
it hard for us to control because now we're shipping a Windows application, the Mac application and a

00:39:59.320 --> 00:40:06.140
Linux application. But that stuff all kind of wraps a relatively normal web page. Electron gives you

00:40:06.140 --> 00:40:11.040
sort of some Node.js processes that you can use to interact with like the file system and to like

00:40:11.040 --> 00:40:17.400
make network quests. And then we have a, another set of like a traditional web page basically where we

00:40:17.400 --> 00:40:22.980
have React running and it kind of does all of the UI for TwilioQuest. So everything that pops up and

00:40:22.980 --> 00:40:29.660
shows like Cedric is talking to you, one of our, our NPC mascots. That's all like React modals and,

00:40:29.660 --> 00:40:34.020
and dialogue boxes. And then Phaser is sort of letting you walk around the world and interact

00:40:34.020 --> 00:40:34.500
with stuff.

00:40:34.500 --> 00:40:38.400
Okay. Yeah, that's cool. And for people who haven't built Electron JS apps, it's kind of like

00:40:38.400 --> 00:40:43.480
you have the Node side of things and you have the browser side of things. You just have a,

00:40:43.480 --> 00:40:47.340
I don't know if it's index or main, but HTML, I can't remember, but you just have like your

00:40:47.340 --> 00:40:52.560
starter page and your starter JavaScript. And it's much like building a single page app as you would in

00:40:52.560 --> 00:40:57.040
React or Vue or something like that. But then you could call down to Node and do machine level

00:40:57.040 --> 00:40:58.240
stuff as well. Right.

00:40:58.240 --> 00:41:02.940
And so that's where some of the weird stuff comes in where like, because we have the ability to,

00:41:02.940 --> 00:41:07.360
we have sort of an integrated JavaScript IDE that you can use, or IDE is maybe generous,

00:41:07.520 --> 00:41:13.080
but editor. And then that sort of spins up other electron processes, like render processes that run

00:41:13.080 --> 00:41:18.200
your code sandbox so that Twilio Quest doesn't crash if your code loops forever or, or things like

00:41:18.200 --> 00:41:22.840
that. So there's a lot of kind of wild problems that at least in my web development background,

00:41:22.840 --> 00:41:25.740
I've never had to deal with before. So it's been an interesting challenge.

00:41:25.740 --> 00:41:30.120
Yeah, for sure. And how, how long did it take you all to find out that somebody might write code

00:41:30.120 --> 00:41:30.960
that's an infinite loop?

00:41:32.900 --> 00:41:33.340
Yeah.

00:41:33.340 --> 00:41:37.860
I mean, another process because it's hung up and I don't, they keep saying there's a buck in the app,

00:41:37.860 --> 00:41:39.600
but what is, it seems fine to me. I don't know.

00:41:39.600 --> 00:41:44.860
Yeah, no, there's definitely been a lot of like zombie process hunting that has happened over the

00:41:44.860 --> 00:41:49.560
years. But yeah, we, we hit that relatively quickly and there's still a couple of corner cases that where

00:41:49.560 --> 00:41:54.180
things can get gnarly with the code editor, but, but yeah, it's, it's been fun. Like it's just,

00:41:54.180 --> 00:41:57.880
it's a different set of challenges when you're operating on the desktop. When we kind of considered the

00:41:57.880 --> 00:42:02.340
trade-offs, we knew we wanted to write content that could teach any kind of technical skill,

00:42:02.340 --> 00:42:09.320
like whether it was like Git or Python or Rust or MongoDB or whatever it would happen to be.

00:42:09.320 --> 00:42:14.720
We wanted to be able to have like really granular validation and, you know, tight system integration

00:42:14.720 --> 00:42:21.100
for all of that stuff. And we being only one of me for a long time, and then Ryan joined up and has

00:42:21.100 --> 00:42:27.200
just been a superstar for several months now. But with a relatively small team, the prospect of like

00:42:27.200 --> 00:42:31.680
building a cloud-based environment that could support all these different technologies was daunting.

00:42:31.780 --> 00:42:37.600
So we opted to go with solving problems on the client side versus trying to create this

00:42:37.600 --> 00:42:40.500
virtualization infrastructure to do all the stuff that we wanted to do.

00:42:40.500 --> 00:42:44.240
Yeah. There's a lot of challenges to make that happen, set up the right config and

00:42:44.240 --> 00:42:49.260
right. Like if you're doing something that's got a server side process, like you mentioned MongoDB,

00:42:49.260 --> 00:42:53.340
then you've got to have a system, but you don't want them to abuse it or other people to see it.

00:42:53.760 --> 00:43:00.200
It gets really complicated. The security leaks or, you know, Docker or VM escape bugs that who knows

00:43:00.200 --> 00:43:05.280
even exists, right? You don't want to be part of that. So if it runs on the machine with their local

00:43:05.280 --> 00:43:10.320
Python or their local JavaScript or node or whatever, the worst thing is to attack themselves, right?

00:43:10.580 --> 00:43:16.100
Exactly. They are welcome to pwn their own computers if they would like. In fact, that means they've already won.

00:43:16.100 --> 00:43:18.320
They've already become a developer. So good job.

00:43:18.320 --> 00:43:23.040
Exactly. Well done. Well done. It worked on your machine until it didn't.

00:43:23.040 --> 00:43:29.360
Like I'm going to send this like launch sub process, RM-RF, you know, pseudo against their root directory.

00:43:29.360 --> 00:43:31.840
Boom. Like, oh, wait, why is it rebooting?

00:43:32.020 --> 00:43:37.220
Yeah. I like to joke that one of our final missions will be hacking Twilio Quest itself,

00:43:37.220 --> 00:43:38.260
making your own.

00:43:38.260 --> 00:43:44.720
Yeah. Nice. Well, speaking of hacking Twilio Quest, you know, you have these cool missions.

00:43:44.720 --> 00:43:52.400
What is the possibility of customizing missions or creating new missions? Could they, can that be done?

00:43:52.400 --> 00:43:56.780
Can people submit them to you? Would you include them? Like, what's the story around that? Like,

00:43:56.780 --> 00:43:58.240
could you crowdsource some of that? Yeah.

00:43:58.240 --> 00:43:59.780
Give you involved?

00:43:59.920 --> 00:44:05.200
Yeah, no, it's funny you should ask. We were actually just sort of scheming just this very

00:44:05.200 --> 00:44:10.100
week here in December about how we could make that possible. Because we've actually have made

00:44:10.100 --> 00:44:14.640
quite a bit of investment for like content authoring tools that we use.

00:44:14.640 --> 00:44:19.220
Right. Yeah. I was wondering, do you guys have like level builders and other types of things to

00:44:19.220 --> 00:44:22.000
help facilitate this and like for music and so on?

00:44:22.000 --> 00:44:27.080
Yeah. I mean, it's more like we built a lot of the plumbing around tools. So like the primary level

00:44:27.080 --> 00:44:33.480
editor we use is a program called Tiled or Tiled. It's just map editor.org. That's a very popular

00:44:33.480 --> 00:44:37.000
open source tool that, you know, you can use to build maps.

00:44:37.000 --> 00:44:37.760
Oh, yeah. Yeah. Yeah. Yeah.

00:44:38.100 --> 00:44:57.120
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.

00:44:57.380 --> 00:45:07.920
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.

00:45:07.920 --> 00:45:20.960
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.

00:45:20.960 --> 00:45:33.080
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 modding community around Minecraft is one of the things that's, you know, fostered a lot of creativity in that community.

00:45:33.080 --> 00:45:38.020
So we definitely want to provide the same kinds of opportunities if folks are interested for Twilio Quest.

00:45:38.020 --> 00:45:42.560
Yeah. As we've worked on this project, we've learned the limitations of being two humans.

00:45:42.840 --> 00:45:54.260
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.

00:45:54.260 --> 00:46:02.180
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.

00:46:02.180 --> 00:46:13.900
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.

00:46:13.900 --> 00:46:20.840
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.

00:46:20.840 --> 00:46:23.720
Read the docs is great, but it's not the same as a game. Right.

00:46:24.180 --> 00:46:29.980
And so there's a lot of people who want to get visibility or more interest in their projects.

00:46:29.980 --> 00:46:37.580
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?

00:46:37.580 --> 00:46:41.000
Very meta or something like that. It seems like it would be a good opportunity.

00:46:41.000 --> 00:46:49.340
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,

00:46:49.340 --> 00:46:57.300
which is that just by putting tutorial content in a game form where you provide like an actual literal path forward.

00:46:57.300 --> 00:47:08.520
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.

00:47:08.520 --> 00:47:16.100
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.

00:47:16.300 --> 00:47:21.280
The previous web version of Twilio Quest was very similar where we kind of presented in a text based format.

00:47:21.280 --> 00:47:29.920
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.

00:47:29.920 --> 00:47:38.140
We very quickly saw developers consuming twice as much or even more content on average than what we were seeing in the version previous.

00:47:38.140 --> 00:47:43.540
So there's a lot of power to structuring technical content and learning in this way for sure.

00:47:43.540 --> 00:47:47.440
How do you feel about like professional developers versus beginners?

00:47:47.440 --> 00:47:52.240
You know, there's been a lot of success with IOT things with young kids.

00:47:52.240 --> 00:48:00.740
I'm thinking middle school age and whatnot, especially people who would are not necessarily drawn to pure game play game development.

00:48:00.740 --> 00:48:20.360
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.

00:48:20.360 --> 00:48:31.800
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.

00:48:31.800 --> 00:48:39.060
We've seen in a professional setting, there's a manager whose company uses Twilio for various things.

00:48:39.060 --> 00:48:50.240
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.

00:48:50.240 --> 00:48:51.920
Yeah, that's one of the missions, right?

00:48:51.920 --> 00:48:53.460
Yes, that is.

00:48:53.460 --> 00:48:57.540
And so it's like part of their, you know, new engineer onboarding.

00:48:57.540 --> 00:49:00.520
And it's just kind of a fun way to get people up to speed.

00:49:00.520 --> 00:49:02.440
I wonder what their reaction is.

00:49:02.440 --> 00:49:07.000
You know, they're like, what kind of cool company have I joined where my first day is to go play a game?

00:49:07.000 --> 00:49:07.880
I can't believe it.

00:49:08.000 --> 00:49:08.740
Yeah, yeah.

00:49:08.740 --> 00:49:12.300
So, I mean, that's definitely what we're trying to foster.

00:49:12.300 --> 00:49:14.760
But, you know, not everybody is so lucky.

00:49:14.760 --> 00:49:19.440
There are some people who might, you know, fear getting in trouble for playing a game at work, maybe.

00:49:19.440 --> 00:49:27.520
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.

00:49:27.520 --> 00:49:36.080
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.

00:49:36.080 --> 00:49:36.940
Sure, sure.

00:49:36.940 --> 00:49:49.180
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.

00:49:49.180 --> 00:50:00.020
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.

00:50:00.220 --> 00:50:01.180
The casing is incorrect.

00:50:01.180 --> 00:50:03.120
Like we would just be about ability.

00:50:03.120 --> 00:50:04.940
We have to help you and we're still on your computer.

00:50:04.940 --> 00:50:06.180
Yeah, no, that makes a lot of sense.

00:50:06.180 --> 00:50:20.720
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.

00:50:20.920 --> 00:50:21.880
Yeah, certainly.

00:50:21.880 --> 00:50:23.740
Yeah, not bad.

00:50:23.740 --> 00:50:26.640
So a lot of this stuff is very interesting.

00:50:26.640 --> 00:50:28.860
A couple of other resources, I guess.

00:50:28.860 --> 00:50:31.680
You guys threw out there, Tiled from MapEditor.org and Phaser.

00:50:31.680 --> 00:50:32.240
Those are cool.

00:50:32.240 --> 00:50:35.140
Are you familiar with Kenny.nl?

00:50:35.140 --> 00:50:37.160
K-E-N-N-E-Y.nl?

00:50:37.300 --> 00:50:37.940
Oh, of course.

00:50:37.940 --> 00:50:48.780
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.

00:50:48.780 --> 00:50:49.080
Yeah.

00:50:49.080 --> 00:50:53.040
So you get a bunch of little map tiles and sprites and stuff.

00:50:53.040 --> 00:50:53.380
Yeah.

00:50:53.380 --> 00:50:54.580
It seems like a really cool place.

00:50:54.580 --> 00:51:02.540
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.

00:51:03.600 --> 00:51:05.980
Yeah, there's lots of great resources there.

00:51:05.980 --> 00:51:08.020
Also like OpenGameArt.org.

00:51:08.020 --> 00:51:17.780
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.

00:51:17.780 --> 00:51:18.340
Yeah, super.

00:51:18.340 --> 00:51:27.740
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.

00:51:27.740 --> 00:51:28.540
Yeah, absolutely.

00:51:28.540 --> 00:51:35.420
Yeah, we worked with some of our favorite indie chiptune artists and yeah, the original soundtrack I really love.

00:51:35.420 --> 00:51:41.040
I like how it turned out and it'll power a lot more experiences in the game as we go.

00:51:41.040 --> 00:51:43.500
But yeah, definitely check it out from SoundCloud.

00:51:43.500 --> 00:51:48.760
We're also going to try to make it a little easier to download and get a hold of in other formats as well.

00:51:48.760 --> 00:51:50.380
But yeah, super fun.

00:51:50.380 --> 00:51:51.460
Super cool.

00:51:51.460 --> 00:52:00.560
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.

00:52:00.560 --> 00:52:03.660
The early MechWarrior games were really special.

00:52:03.660 --> 00:52:07.440
I'm talking like 1995 to a little bit after that.

00:52:07.440 --> 00:52:07.820
Yeah.

00:52:07.820 --> 00:52:10.220
Maybe you played it on Opinium 90 or something like that.

00:52:10.300 --> 00:52:12.140
Those, the music was good.

00:52:12.140 --> 00:52:20.100
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.

00:52:20.100 --> 00:52:22.780
And that music was really, I think a big part of it actually.

00:52:22.780 --> 00:52:23.720
That and the fog.

00:52:23.720 --> 00:52:24.040
Yeah.

00:52:24.040 --> 00:52:31.500
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.

00:52:31.740 --> 00:52:38.680
But yeah, no, just the fact that you kind of had like, it felt like you were piloting like a big lumbering Colossus.

00:52:38.680 --> 00:52:39.620
Fantastic games.

00:52:39.620 --> 00:52:44.220
I mean, definitely did play on a little Penny of 90 machine that I figured out how to work.

00:52:44.220 --> 00:52:44.720
Nice.

00:52:44.720 --> 00:52:45.260
How about you, Ryan?

00:52:45.260 --> 00:52:46.080
Did you play those games?

00:52:46.080 --> 00:52:47.900
I'm not familiar with MechWarrior.

00:52:47.900 --> 00:52:49.000
I missed out on that.

00:52:49.000 --> 00:52:51.080
The X-Wing games I do remember though.

00:52:51.080 --> 00:52:51.340
Yeah.

00:52:51.340 --> 00:52:51.820
Very nice.

00:52:51.820 --> 00:53:01.340
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.

00:53:01.700 --> 00:53:02.280
Yeah, they were.

00:53:02.280 --> 00:53:04.100
Ryan's like the Spider-Man of our crew.

00:53:04.100 --> 00:53:06.960
He's like, you remember that really old movie, Empire Strikes Back?

00:53:06.960 --> 00:53:09.560
So you can tell us about those types of lines.

00:53:09.560 --> 00:53:11.860
That's awesome.

00:53:11.860 --> 00:53:12.040
Yeah.

00:53:12.040 --> 00:53:12.840
I think it's a classic.

00:53:12.840 --> 00:53:13.420
I remember.

00:53:13.420 --> 00:53:14.460
Yeah.

00:53:14.460 --> 00:53:15.160
That's awesome.

00:53:15.160 --> 00:53:15.820
Cool.

00:53:15.820 --> 00:53:20.540
Well, it's probably a good place to leave it, but congratulations on this project, you guys.

00:53:20.540 --> 00:53:23.740
I know you've been at it for, what is that?

00:53:23.740 --> 00:53:24.460
Six years.

00:53:24.460 --> 00:53:30.320
Overnight success just took six years, but it seems like it's really making a lot of progress and it's unique.

00:53:30.320 --> 00:53:31.300
And I think that's neat.

00:53:31.300 --> 00:53:31.600
Yeah.

00:53:31.660 --> 00:53:31.940
Yeah.

00:53:31.940 --> 00:53:33.760
It's been super fun to work on.

00:53:33.760 --> 00:53:36.880
It's definitely, it's very literally a dream come true for me.

00:53:36.880 --> 00:53:43.400
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.

00:53:43.400 --> 00:53:45.060
So it's been, it's been fantastic.

00:53:45.480 --> 00:53:45.620
Yeah.

00:53:45.620 --> 00:53:45.700
Yeah.

00:53:45.700 --> 00:53:46.600
I agree.

00:53:46.600 --> 00:53:59.460
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.

00:53:59.580 --> 00:54:03.420
But this is the first time I've had any opportunity to do anything like this.

00:54:03.420 --> 00:54:04.460
And it's super cool.

00:54:04.460 --> 00:54:04.880
Yeah.

00:54:04.960 --> 00:54:05.980
It seems really great.

00:54:05.980 --> 00:54:11.180
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.

00:54:11.180 --> 00:54:14.240
Because bugs in games can be super hard sometimes.

00:54:14.240 --> 00:54:16.040
It's really hard to reproduce them.

00:54:16.040 --> 00:54:16.420
Yeah.

00:54:16.420 --> 00:54:16.920
Yeah.

00:54:16.980 --> 00:54:18.620
I used to work on 3D simulators.

00:54:18.620 --> 00:54:20.200
I'm like, why can I not see the thing?

00:54:20.200 --> 00:54:23.000
And it was like, well, we were rendering it counterclockwise instead of clockwise.

00:54:23.000 --> 00:54:23.980
Or so it was invisible.

00:54:23.980 --> 00:54:24.680
It was getting cold.

00:54:24.680 --> 00:54:25.620
It's like, oh my gosh.

00:54:25.620 --> 00:54:26.920
Yeah.

00:54:26.920 --> 00:54:35.180
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.

00:54:35.180 --> 00:54:35.580
Yeah.

00:54:35.580 --> 00:54:36.060
Beautiful.

00:54:36.060 --> 00:54:36.660
Perfectly.

00:54:36.660 --> 00:54:37.120
All right.

00:54:37.120 --> 00:54:40.780
So before we get out of here, let me ask you the final two questions.

00:54:40.780 --> 00:54:46.080
And given that a lot of this is JavaScript stuff, feel free to give either a Python or JavaScript answer.

00:54:46.200 --> 00:54:48.480
So if you're going to write some code, what editor do you use?

00:54:48.480 --> 00:54:49.300
Ryan first.

00:54:49.300 --> 00:54:50.700
I'm a VS Code person.

00:54:50.700 --> 00:54:53.060
That's the only one I have installed these days.

00:54:53.060 --> 00:54:55.560
Oh, that's a big commitment to just have one editor installed.

00:54:55.560 --> 00:54:57.560
I mean, it's one thing to use one editor.

00:54:57.560 --> 00:54:59.060
It's another to have just one at all.

00:54:59.060 --> 00:55:00.060
Yeah.

00:55:00.060 --> 00:55:00.920
That's all I got left.

00:55:00.920 --> 00:55:01.520
Nice.

00:55:01.520 --> 00:55:01.940
Kevin.

00:55:01.940 --> 00:55:02.340
Yeah.

00:55:02.340 --> 00:55:06.940
I've used a few over the years, but I've also recently pushed in my chips on Visual Studio Code.

00:55:06.940 --> 00:55:09.780
The ecosystem around it has been pretty, pretty cool.

00:55:09.780 --> 00:55:12.260
So that's my weapon of choice these days, for sure.

00:55:12.260 --> 00:55:12.700
That's cool.

00:55:12.700 --> 00:55:15.700
And it probably doesn't hurt that you're both on the same team using the same editor.

00:55:15.960 --> 00:55:16.240
Yes.

00:55:16.240 --> 00:55:17.780
It is convenient.

00:55:17.780 --> 00:55:18.060
Yeah.

00:55:18.060 --> 00:55:21.820
And then normally I'd ask a notable PyPI package.

00:55:21.820 --> 00:55:23.140
So if you got one, go ahead and give it.

00:55:23.140 --> 00:55:25.960
But if you have like an npm one, that's also acceptable.

00:55:25.960 --> 00:55:29.740
So a notable library that you can use to build fun stuff like this.

00:55:29.740 --> 00:55:30.040
Yeah.

00:55:30.040 --> 00:55:35.760
I think if folks do have any interest in web game development, I think Phaser is definitely

00:55:35.760 --> 00:55:37.820
the one to take away from this episode.

00:55:37.820 --> 00:55:40.200
We support the project through Patreon.

00:55:40.200 --> 00:55:43.060
Rich does a great job with the framework.

00:55:43.060 --> 00:55:44.640
So definitely go check it out.

00:55:44.640 --> 00:55:49.340
Like Phaser 3 and the upcoming Phaser 4, which he's sort of rebuilding from the ground up with

00:55:49.340 --> 00:55:51.240
TypeScript and all kinds of other great stuff.

00:55:51.860 --> 00:55:51.980
Yeah.

00:55:51.980 --> 00:55:56.100
If you're at all interested in getting into web games, Phaser is the one to check out.

00:55:56.100 --> 00:55:56.320
Cool.

00:55:56.320 --> 00:55:57.120
Ryan, you got a recommendation?

00:55:57.120 --> 00:55:57.900
Definitely.

00:55:57.900 --> 00:55:58.240
Yeah.

00:55:58.240 --> 00:56:00.660
I mean, I can give a shout out for Pygame too, actually.

00:56:00.660 --> 00:56:02.700
Python audience, right?

00:56:02.700 --> 00:56:03.960
Pygame is actually the first.

00:56:03.960 --> 00:56:07.700
That's the first place I ever successfully shipped any sort of game project.

00:56:07.700 --> 00:56:09.520
So I can endorse that for sure.

00:56:09.520 --> 00:56:12.260
It gives you a similar great API.

00:56:12.260 --> 00:56:14.700
It gets a little harder to deploy the game.

00:56:14.700 --> 00:56:18.920
Phaser does have the benefit of running on any old web page, but you can still make something

00:56:18.920 --> 00:56:21.220
really cool on a local project with Pygame.

00:56:21.220 --> 00:56:21.820
Right.

00:56:21.820 --> 00:56:22.320
It's a lot of fun.

00:56:22.320 --> 00:56:23.220
That's awesome.

00:56:23.220 --> 00:56:24.860
And you bundle something like PyInstaller.

00:56:24.860 --> 00:56:27.400
You can probably deploy it, but you're right.

00:56:27.400 --> 00:56:30.400
A little bit of HTML and JavaScript is definitely easier to deploy.

00:56:30.400 --> 00:56:30.700
Yeah.

00:56:30.700 --> 00:56:31.340
Absolutely.

00:56:31.340 --> 00:56:31.580
All right, guys.

00:56:31.580 --> 00:56:32.840
Well, this was really fun.

00:56:32.840 --> 00:56:34.280
People are excited.

00:56:34.280 --> 00:56:38.480
Maybe they want to go try it out or look into seeing how they can take more advantage

00:56:38.480 --> 00:56:39.260
of these kinds of things.

00:56:39.260 --> 00:56:40.580
What do you say to them?

00:56:40.580 --> 00:56:41.380
Final call to action?

00:56:41.380 --> 00:56:46.580
I would definitely recommend heading out to Twilio.com slash quest where you can download

00:56:46.580 --> 00:56:47.100
the game.

00:56:47.100 --> 00:56:49.160
It's most recent iteration.

00:56:49.160 --> 00:56:54.400
And yeah, there's also a mailing list that you can sign up for at Twilio.com slash quest.

00:56:54.400 --> 00:57:00.240
We reach out on that mailing list, either Ryan and I do or I do, a couple times a month.

00:57:00.240 --> 00:57:05.260
And when we release new stuff, especially as we release new Python content, that would

00:57:05.260 --> 00:57:08.220
be the best way to keep on top of when that's out.

00:57:08.220 --> 00:57:08.680
Sounds good.

00:57:08.680 --> 00:57:10.500
Ryan, anything you want to add on the way out the door?

00:57:10.500 --> 00:57:11.460
No, that's it.

00:57:11.460 --> 00:57:12.840
Twilio.com slash quest.

00:57:12.840 --> 00:57:13.860
Go check it out.

00:57:13.860 --> 00:57:14.240
Super.

00:57:14.240 --> 00:57:15.520
I'll put all the links in the show notes.

00:57:15.520 --> 00:57:19.220
You guys, this is a lot of fun to explore and think about these ideas and play the game

00:57:19.220 --> 00:57:19.460
a bit.

00:57:19.460 --> 00:57:20.280
Thanks for being here.

00:57:20.280 --> 00:57:21.040
Yeah, no problem.

00:57:21.040 --> 00:57:21.680
Thanks for having us.

00:57:21.680 --> 00:57:22.380
This was a lot of fun.

00:57:22.380 --> 00:57:22.580
Yep.

00:57:22.580 --> 00:57:22.860
You bet.

00:57:22.860 --> 00:57:23.120
Bye.

00:57:23.120 --> 00:57:23.400
Bye.

00:57:23.400 --> 00:57:24.200
Bye.

00:57:24.200 --> 00:57:24.240
Bye.

00:57:25.440 --> 00:57:28.300
This has been another episode of Talk Python To Me.

00:57:28.300 --> 00:57:34.100
Our guests on this episode were Kevin Winery and Ryan Kubik, and it's been sponsored by Datadog

00:57:34.100 --> 00:57:34.740
and Linode.

00:57:34.740 --> 00:57:39.140
Datadog gives you visibility into the whole system running your code.

00:57:39.140 --> 00:57:43.040
Visit talkpython.fm/datadog and see what you've been missing.

00:57:43.040 --> 00:57:44.440
They'll throw in a free t-shirt.

00:57:44.440 --> 00:57:48.780
Start your next Python project on Linode's state-of-the-art cloud service.

00:57:48.780 --> 00:57:53.300
Just visit talkpython.fm/linode, L-I-N-O-D-E.

00:57:53.300 --> 00:57:56.480
You'll automatically get a $20 credit when you create a new account.

00:57:56.480 --> 00:57:58.860
Want to level up your Python?

00:57:58.860 --> 00:58:03.720
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.

00:58:03.720 --> 00:58:08.820
Or if you're looking for something more advanced, check out our new async course that digs into

00:58:08.820 --> 00:58:11.880
all the different types of async programming you can do in Python.

00:58:11.880 --> 00:58:15.840
And of course, if you're interested in more than one of these, be sure to check out our

00:58:15.840 --> 00:58:16.540
Everything Bundle.

00:58:16.540 --> 00:58:18.440
It's like a subscription that never expires.

00:58:18.440 --> 00:58:20.580
Be sure to subscribe to the show.

00:58:20.580 --> 00:58:23.000
Open your favorite podcatcher and search for Python.

00:58:23.000 --> 00:58:24.220
We should be right at the top.

00:58:24.220 --> 00:58:29.040
You can also find the iTunes feed at /itunes, the Google Play feed at /play,

00:58:29.040 --> 00:58:33.200
and the direct RSS feed at /rss on talkpython.fm.

00:58:33.200 --> 00:58:35.280
This is your host, Michael Kennedy.

00:58:35.280 --> 00:58:36.780
Thanks so much for listening.

00:58:36.780 --> 00:58:37.820
I really appreciate it.

00:58:37.820 --> 00:58:39.580
Now get out there and write some Python code.

00:58:39.580 --> 00:59:00.720
I'll see you next time.