Learn Python with Talk Python's 270 hours of courses

Pythonic games at CheckIO

Episode #75, published Fri, Sep 9, 2016, recorded Thu, Sep 8, 2016

Do you like to play games or solve puzzles? Chances are pretty good that you do. After all, what is programming and software development but one really elaborate puzzle?

On this episode of Talk Python To Me, you meet someone who pushed this idea of programming as a game to its logical conclusion. Alexander Liabakh is the creator of CheckIO and Empire of Code. CheckIO is a programming adventure game where you solve puzzles and share them with fellow players. Empire of Code is a tower defense game where part of the strategy is to actually program AI in Python.

Links from the show:

CkeckIO: checkio.org
CheckiO Twitter: @PlayCheckiO
Alex's user profile on CheckiO: py.checkio.org/user/oduvan
Michael's user profile on CheckiO: py.checkio.org/user/mkennedy
Talk Python CheckIO class: py.checkio.org/group/talk-python-listeners
Check io missions: github.com/CheckiO-Missions

Episode Transcript

Collapse transcript

00:00 Do you like to play games or solve puzzles?

00:01 Chances are pretty good that you do.

00:03 After all, what is programming and software development but one really elaborate puzzle?

00:08 On this episode of Talk Python to Me, you'll meet someone who has pushed this idea of programming

00:12 as a game to its logical conclusion.

00:15 Alexander Leibach is the creator of Check.io and Empire of Code.

00:19 Check.io is a programming adventure game where you solve puzzles and share them with fellow

00:24 players.

00:24 Empire of Code is a tower defense game where part of the strategy is to actually program

00:29 the AI in Python.

00:31 This is Talk Python to Me, episode 75, recorded September 8th, 2016.

00:59 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the

01:07 ecosystem, and the personalities.

01:09 This is your host, Michael Kennedy.

01:11 Follow me on Twitter where I'm @mkennedy.

01:13 Keep up with the show and listen to past episodes at talkpython.fm and follow the show on Twitter

01:18 via at Talk Python.

01:20 This episode is brought to you by Hired and SnapCI.

01:23 Thank them for supporting the show on Twitter via at Hired underscore HQ and at Snap underscore

01:30 CI.

01:30 Hey, everyone.

01:32 Thanks for listening as always.

01:33 Before we get to the interview with Alex, I want to give you a heads up on something I've

01:37 created just for you listeners.

01:38 Near the end of this episode, I speak with Alex about the class management and group management

01:43 features in the game in Check.io.

01:46 So I've decided to create a class that consists of all podcast listeners.

01:50 If you want to group up with your fellow listeners and do some of these puzzles, you can use the

01:54 following link to join up and share your updates and solutions.

01:58 Just go to py.checkio.org slash group slash talk dash python dash listeners, create an account or log in, and then say you want to join the class.

02:07 You can, of course, find that link in the show notes as well.

02:10 If you're a teacher yourself, keep an ear open to the end of the show about how you can do this for your own classes, whether that's university, high

02:17 school or middle school courses.

02:18 Now, let's talk to Alex.

02:20 Alex, welcome to the show.

02:22 Hi.

02:23 It's great to be here and a big honor for me.

02:26 Thank you.

02:26 Oh, it's my honor to have you.

02:28 I really appreciate you coming here.

02:30 We are going to talk about programming and games and some really interesting stuff that you guys have built over at checkio.org.

02:37 Yeah, I love to talk about it.

02:39 I bet that's your baby, right?

02:41 Okay.

02:42 So before we get to talking about that, let's hear your story.

02:47 How did you get into programming and Python?

02:48 Yeah, that was a long time ago, the high school.

02:51 So I remember before that I was using my father's computer only for games.

02:58 So I was a big gamer.

03:01 But at that time, my friends come in and show me his first code.

03:06 It was Pascal.

03:08 And I was so much amazed how easy it is.

03:12 How, what are cool things I can do by coding.

03:17 And I started taking coding class with him.

03:20 So, yes, it was the Pascal a long time ago.

03:23 And then later on in my university, it was Delphi, then PHP, Perl, and then Python.

03:31 And I stayed with Python for a long time already.

03:34 I love it.

03:35 Yeah, Python's really nice.

03:36 It definitely has some improvements on those other languages that you mentioned.

03:40 But also the community is so excellent, right?

03:43 It's really fun to work with the people who like Python, not just the technology.

03:48 Yeah.

03:49 I remember myself starting actually the Python.

03:52 So when I was, my first programming job actually was Perl developer in a bank.

04:00 So, and when the first time I saw Python's piece of code, I was amazed how beautiful it is.

04:08 Is it actually a really code?

04:09 Like, it can be a poem or like a song, but it's not a code.

04:14 Because like before I was coding Perl for four years.

04:19 And it was so beautiful.

04:22 I was so amazed at that time.

04:24 So I started doing some, start learning Python after work and eventually quit my job and start doing Python freelancing.

04:33 That's cool.

04:34 And was that like web development or what kind of apps were you building?

04:36 Web development, yeah.

04:38 Python, Django.

04:39 Okay, with Django.

04:40 Yeah.

04:41 Uh-huh.

04:41 Nice.

04:42 I remember Django when it was, remember new forms, like with this transaction.

04:48 Still my favorite framework.

04:50 You've moved on to building something that is actually a pretty incredible web app.

04:58 I must say a couple of incredible web apps, I guess.

05:02 And a whole interesting world here that brings all the stuff that you talked about, more or less,

05:08 together at Check.io.

05:11 Tell us what is Check.io.

05:12 Back to the time when I just started learning Python.

05:17 I think the first line of code was written during my first year of learning Python.

05:25 So at the time, as I said, I was so much amazed how beautiful Python is.

05:30 And I thought it should be a gallery.

05:33 It should be a gallery of different Python solutions since it's so beautiful.

05:38 And if I create a new solution, I should share it somehow.

05:42 I should show it.

05:43 And I should go through all other solutions and see how everybody else solved this particular puzzle.

05:51 So this is why I created Check.io.

05:56 And later on, I have more people join the team.

05:59 But yeah, the first version of Check.io wasn't that beautiful.

06:04 But the core idea is still from the very beginning to the version that we have right now,

06:11 is that you should solve the puzzle.

06:14 And you can share a solution if you want.

06:18 But after you solve the puzzle, you can see a solution of other users.

06:21 You can discuss their solution.

06:24 There are several categories for the solution, like clear code, creative code, speedy code.

06:30 And I love this feeling, you know, when you're spending like five hours in a row

06:39 trying to figure out how to solve this mission, this puzzle.

06:44 And later on, when you solve it, and maybe even you share your solution,

06:50 and then get into solution of other users, and you're like amazed.

06:54 Oh my God, it's possible to solve in two lines?

06:57 I can't believe.

06:58 And why I didn't figure out this later?

07:00 And I think this is the perfect learning curve.

07:03 Like when you're trying to figure out it by yourself, then see how some other users solved it.

07:10 And again and again, I think, so I know a lot of people who become a Python developers,

07:16 very good Python developers through the checker in that way.

07:19 Yeah, it's really cool.

07:21 So maybe I should just try to give like a visual description of the experience.

07:27 Yeah.

07:27 So you come in, you create an account, and then you land in this world of floating islands.

07:35 And it has this very 3D feel with animations and stuff, even though it's in a flat web page.

07:40 You know, it doesn't, it's not like a Flash game.

07:42 It's HTML5 or something like this, yeah?

07:44 Yeah.

07:44 Yeah, with Canvas and whatnot.

07:46 Cool.

07:46 And so you have these worlds, and each world represents a set of similar programming puzzles.

07:55 Did you ever play the game Myst, M-Y-S-T?

07:57 One of these super beautiful but puzzle-oriented games.

08:02 And it feels like a little bit like that for code.

08:04 Like you go to these different parts of the world, and you go in, and you get these different puzzles, right?

08:09 Yeah, yeah.

08:11 By solving those puzzles on each island, eventually you can get more island open around this island,

08:16 and you can explore more and more island around.

08:20 Yeah, it's quite neat.

08:21 I think, you know, you go into these puzzles, and I guess there's probably 5 to 20 puzzles per little island.

08:29 And you go in there, and they're ranked in levels of difficulty and categories.

08:33 So some are like data structures, and some are finding bugs or things like that, right?

08:40 And you also have a difficulty level.

08:42 Actually, all the time we're trying to experiment with different kind of puzzles.

08:47 So in some part of Checker world, you can find like a machine, like you said.

08:53 You just need to fix the bug on the solution, so we actually give you a solution.

08:59 It's almost working.

09:00 There are some, but some, there are some tests that doesn't work.

09:06 So your mission here to fix those bugs.

09:09 There are some other missions that you actually don't share your solution,

09:14 but you can get more points for these solutions, depends on the rules.

09:20 So for instance, we can ask you, try to solve this puzzle in a short way possible.

09:27 So your solution should be as short as possible.

09:29 I call that coding golf puzzles.

09:32 And after you solve, you can see how short solution of other users.

09:38 And you think, oh my God, I think it's, I'm like spending all night and get 50 symbols,

09:44 and someone find out how to make it in 12.

09:49 I can't believe in.

09:50 Yeah, it's really amazing.

09:52 And like you said, you can, you basically, you write the solution and it's,

09:58 it's run by the system.

09:59 And we could talk about how you write your solution and all that in a moment.

10:03 but you write some Python code that solves the problem under the conditions,

10:07 the inputs and outputs that you're supposed to, which usually they're pretty self-contained.

10:11 It's not too elaborate.

10:12 So, but they are kind of tricky in some interesting way.

10:16 And then once you're done, you can categorize your solution.

10:20 If you want to share it, if you want to publish it, as like you said, like really concise,

10:25 really efficient, you can just leave it and say, I don't have no idea what you would call this,

10:30 but it works, things like that.

10:32 And it reminds me, you know, you can go through the solutions and you can see other people's solutions.

10:36 And my feeling is, it's a little bit like the Mark Twain quote that says,

10:41 I'm sorry I wrote you a long letter.

10:43 I didn't have time to write you a short one.

10:45 You know, that, that kind of thing.

10:46 Like, like I go through and I solve it.

10:49 I'm like, oh yeah, this is, this will totally do it.

10:51 And then you just flip the next line and it's like, filter this, did it at one line.

10:56 You're like, whoa.

10:56 Okay.

10:58 It also, I think it's really interesting in that it, it sort of touches on this concept

11:03 of Pythonic code by looking at the solutions, right?

11:07 Yeah.

11:07 So in the new Python release, we are trying to test this new idea.

11:11 So we actually put, so mission has three stages.

11:16 So in the first stage, it's the collecting modes.

11:19 If you see some of others, you should share your solution first.

11:23 No matter what.

11:24 So let's, we're looking for collecting mode.

11:28 Then, so viewing mode.

11:30 So you might not share your solution, but you should definitely solve this,

11:35 no matter what.

11:36 And then you can go and see leaderboard of other user solution, review their solution,

11:42 and so on and so on.

11:43 So usually what we see right now.

11:45 that we may be some other checker users, we are trying to figure out, out of all the solutions,

11:52 we pick some solutions that we think are the most different.

11:57 It might be not that, it might be not as perfect as it should be, but they are definitely unique

12:05 in the whole specter of solutions.

12:08 Okay, that's interesting.

12:09 So you try to provide like a variety of answers to people?

12:12 Yes, yes, yes.

12:13 So you, all the time you see, when you check editor's solutions, you see only different

12:19 and only unique solutions that we find in checker.

12:22 So this is the third stage of each mission.

12:26 It is really interesting.

12:27 So I learned a lot when I solved some of the problems and published it.

12:31 And I realized that there were biases in the solutions I was creating.

12:36 And I didn't, I didn't realize they were biases.

12:40 Like for example, on one of them that I was working on, I was trying to do stuff

12:45 what I felt like was the most efficient way, not in lines of code, but what I thought

12:50 would be like the most efficient algorithm for like maybe large data sets

12:54 or whatever.

12:54 And that resulted in, I don't know, maybe eight lines of code.

12:58 And then other people were doing the answers with like a list comprehension

13:01 in one line.

13:02 But I'm like, oh, but that's going to be way slower.

13:04 But, you know, I guess it depends on what you're aiming for, right?

13:08 Like if you're aiming for super readable and you know you're not working

13:11 with, you know, 100,000 lines of data elements, you're working with 500,

13:16 then, you know, probably that solution is way better.

13:18 And so it just, I thought it was interesting that it brought out little biases

13:24 that I had in ways of approaching problems that I didn't, it's not like I started out

13:28 to say, oh, this will be way more efficient if I do it this way.

13:30 So let me try this.

13:31 It's just, that's the way I started writing the code.

13:33 So that was really interesting.

13:35 Yeah, this is why we created Couchverse for this session.

13:38 Depends on your, what is your aim to, what was your goal while you created this solution.

13:44 Some of the people just love to create crazy solutions, like one-liners or just

13:51 try to make it as confusing as possible, I would say.

13:55 So we have one, one of the most famous user on check, Vicky.

14:00 And I want just to say hi to him if he, I'm sure he's listening to this podcast.

14:06 So he has the most biggest amount of followers in the game and he is, he'll love to create

14:14 the most crazy solutions.

14:15 So I think the creative category we created just specifically for Vicky.

14:20 And yeah, for those unique people who love to create some unique solution

14:26 or create a creative and they're competing with each other in creativity.

14:31 Yeah.

14:32 Yeah.

14:32 Yeah, that's, yeah, I think it really does bring out a lot of, a lot of interesting stuff.

14:37 Would you say, it seems to me like, tell me if I have the right sort of feeling.

14:43 I did start at the beginning so I kind of feel like I can at least guess at this.

14:47 That Check.io is really good for people that know something about programming

14:53 but in order to do it, you kind of need to know a little bit, a little, almost a little tiny bit

15:00 of Python rules, right?

15:02 Like how to define code blocks or suites and how to perform conditionals.

15:08 And so it's, it's not like I'm bored with my job in finance and I've never touched

15:14 a line of code but I want to come learn it.

15:16 You've got to be a little bit into programming.

15:19 Yes.

15:19 I do have this question a lot, why we are not teaching Python and I do have

15:25 a lot of questions like this.

15:26 Well, you are teaching Python, you're just not teaching zero to like the very first step.

15:32 this is what I love.

15:33 Yeah, yeah.

15:34 So we are not teaching like you said, we are not teaching from zero to some point.

15:39 So I do believe that in internet out there, there are so many places where you can learn

15:46 how to code but there are so few places where you can actually learn how to create,

15:52 how to produce code with a good quality and yeah, and I believe that Checo

15:59 is one of those places.

16:00 So this is our goal to not maybe to teach you how to code but teach you how to create

16:07 a good coding solutions.

16:08 Yeah, I think that that's correct.

16:12 You're right, there are so many places to learn to code these days if you're kind

16:16 of like a career switcher.

16:18 I kind of think of people as they're like, I know that I want to get into programming,

16:22 I have no idea what that means, like that level that you probably got to start

16:26 somewhere else but I heard someone say, one of my listeners suggested that I

16:31 reach out to you again and we get this show put together and I, sorry, I don't remember

16:35 who it was but thanks for contacting me on Twitter and they said, look, you guys really

16:40 have it right, you have it so that you want to just keep learning and you want to

16:45 make learning to code addictive and fun and I think that's a way more important service

16:50 than teaching people what a variable is or what a string is or, you know,

16:56 what an if, the concept of an if statement for example.

16:59 Yeah, this is actually one of the reasons why a lot of teachers and in a lot of university,

17:06 teachers recommend us as an additional way to learn coding so because we don't

17:12 provide any learning materials or something like that, we probably, we don't have any conflicts

17:20 with what they are teaching, we just give them an additional way to learn.

17:24 So if you are, right now, if you are learning how to code and even from zero,

17:31 you should definitely start practicing right from the very first day and you should learn,

17:37 you should find some places to do it and Check.io, I think it's the perfect place

17:41 to do it.

17:42 Yeah, it's definitely a good place to start because often people start wanting to code

17:46 because they've got some grand idea but the grand idea is, it can be so overwhelming

17:51 because you don't even know where to start but Check.io, the missions are

17:55 sufficiently self-contained that it doesn't feel like, oh, there's no way

17:59 I can get, like where do I even start, right?

18:01 You can get started and it's pretty structured so I think it is a great place to learn.

18:06 Let's talk about the experience of doing the exercises.

18:09 Okay.

18:10 I go to my little island which like I said is beautiful, it's got little clouds

18:14 and stuff and I pick my challenge, my puzzle and then it takes me to an online editor,

18:21 right?

18:21 We have online editor and actually at the same time with online editor we also have

18:27 web plugins and with those web plugins that you can install in your Chrome browser

18:34 Firefox, you can use your local editor actually.

18:39 So you don't need to actually, if you start doing some big solution or working on

18:44 a big problem on Check.io, you most of the time use your local editor.

18:49 So we give you this opportunity to use your local editor and then you just

18:54 open the Check.io and you see your code right from your local editor in our web editor.

18:59 Oh, okay.

19:00 That's awesome.

19:01 So like if I'm using PyCharm or Sublime Text or something like that, I can just sort of

19:06 download it and somehow the web plugin keeps my local version and my Check.io version

19:12 in sync?

19:13 Yes, yes, yes.

19:14 We're synchronized of both of those solutions.

19:17 So right after you make some changes in our web version of Check.io, this goes to your local editor

19:25 there as well.

19:25 So it's very easy for you to solve and actually, since you mentioned PyCharm,

19:32 we also partnering with PyCharm and also and the whole partnership starts with

19:39 PyCharm Education.

19:40 So we have this PyCharm has a plugin for PyCharm Education and using those plugins

19:48 you actually can solve puzzle actually by using PyCharm.

19:53 so the whole Check.io interface, those mission description, the island structure,

19:59 animation, and it all goes to write in your PyCharm editor and you can solve

20:07 coding puzzles right from there.

20:08 Oh, that's pretty interesting.

20:10 So I didn't realize that you guys integrated with PyCharm Education Edition.

20:14 So people have heard me go on and on about how I like PyCharm as like a proper editor,

20:19 but they have an alternate version for education that has these like lessons

20:24 built into it and so you guys have integrated with those lessons in some way?

20:27 Yeah.

20:28 They have this ability to create plugins for the PyCharm Education and right when I

20:34 figured out that PyCharm, my favorite editor, created the educational version

20:39 and I was, it is so crazy.

20:42 I should find a way to be part of this and yeah, I contact with them, we start doing

20:48 those plugins and eventually, yes, the plugin was released and we're both happy.

20:55 That's nice.

20:56 I'm going to have to check that out now.

20:57 So yeah, and one more unique idea for Checker Editor that we are using and the user love it

21:06 is that for some of the mission, we create this try it panel.

21:11 So let me tell you the idea.

21:14 so we wanted to present the solution you are trying to solve with some interface.

21:20 So we create for almost each coding puzzle, we create some interface.

21:26 For instance, if you need to find all the unique symbols in a piece of text,

21:33 right, we give you this text input and you can put your text in this input

21:39 and then click tests and it gives you the result, what symbols were unique

21:46 in this particular text and in order to get the result, those interface actually using

21:52 your code, the code that you have written in the editor.

21:56 And for instance, one other mission that's one of my favorite is Open Labyrinth

22:03 and there you have actually the whole labyrinth created and the idea for puzzle

22:10 is to find a way to get out of the labyrinth.

22:15 And in this interface, you can create your own labyrinths.

22:19 After clicking solve, you see how some arrow, small, tiny arrow, trying to get,

22:27 find a way out of the labyrinth by using actually the program that you created.

22:32 So, in such a way, we're trying to show you that every piece of code has

22:39 an interface that's probably going to use your code.

22:43 It's not just this boring function or boring piece of code.

22:48 Take these numbers or turn those numbers, but something more advanced, huh?

22:51 Yes, yes.

22:53 This portion of Talk Python is brought to you by Hired.

23:07 Hired is the platform for top Python developer jobs.

23:10 Create your profile and instantly get access to 3,500 companies who will work

23:14 to compete with you.

23:15 Take it from one of Hired's users who recently got a job and said, I had my

23:18 first offer on Thursday after going live on Monday and I ended up getting

23:22 eight offers in total.

23:23 I've worked with recruiters in the past, but they've always been pretty hit and

23:26 miss.

23:27 I tried LinkedIn, but I found Hired to be the best.

23:29 I really like knowing the salary up front.

23:32 Privacy was also a huge seller for me.

23:34 Sounds awesome, doesn't it?

23:36 Well, wait until you hear about the signing bonus.

23:38 Everyone who accepts a job from Hired gets $1,000 signing bonus.

23:41 And as Talk Python listeners, it gets way sweeter.

23:44 Use the link Hired.com slash Talk Python to me and Hired will double the signing bonus

23:48 to $2,000.

23:50 Opportunity's knocking.

23:51 Visit Hired.com slash Talk Python to me and answer the door.

23:54 So the editor is really cool, and the fact that you integrate with the local

24:05 editors, I think, is even better.

24:07 And I noticed that at the top it says you can import some modules or create

24:12 additional functions or things like that, or classes or whatever.

24:16 Yeah, we have a set of modules that we allow you to import.

24:20 Yeah, that's what I was going to ask.

24:22 Like, surely pretty much the standard library for the most part, but then

24:26 are there external open source ones as well?

24:29 A lot of users ask to add SciPy.

24:32 Sure, some of the machine learning stuff maybe, yeah.

24:34 And NumPy.

24:35 So we integrated all of those modules for them, and even for Python version.

24:41 For Python, we created the specific category for those solution.

24:46 We call it third party solution.

24:48 And if you are using those kind of modules, we encourage you to share your solution

24:55 in those categories.

24:56 So for those categories, you can check solutions that are using those modules.

25:02 Oh, that's really cool.

25:03 Now, another thing that I see up at the top that makes me smile is in this

25:09 editor, and if you've ever used something like JS Fiddle, it's a little bit

25:14 like that with multiple panes and so on, if you haven't checked it out, is it

25:17 has sort of navigation, and one of the dropdowns at the top is it says I

25:21 can pick my Python version, and I could pick Python 2.7, but the one that I have

25:26 active is actually Python 3.6 alpha 3, or A3.

25:32 That's pretty awesome that you guys are running such a new version of Python 3.

25:38 Yeah, we are trying to keep Python version as fresh as possible, so users of

25:45 Check.io can play with the freshest Python version as early as possible, and

25:52 show some awesome solutions with new cool Python features that are coming out

25:59 soon.

25:59 So yeah.

26:00 Yeah, that's really cool.

26:02 So if you want to say, look, I'm going to demonstrate how much easier this

26:05 problem is to solve in Python 3.6 than it was in 3.4 or something.

26:09 You can do that, right?

26:10 Yeah.

26:11 Yeah.

26:11 Yeah.

26:12 How awesome.

26:13 Okay.

26:13 That's really cool.

26:14 Thank you.

26:15 Yeah, you bet.

26:16 So once I get my solution and I write it, and I can play around with it,

26:21 my console or my local editor, I mean the online terminal console, or my

26:26 local editor, and then once it passes, it gives me a couple of options, right?

26:31 I can basically just save it, or I can publish it and share it with the world, right?

26:36 As I said, this is what the first, very first idea of checkout, the core idea of

26:41 sharing code solution with other users.

26:44 So this is where you can share your code, pick a category, in which category

26:49 actually you want to share your code.

26:51 It can be a clear solution if you think this is the code the most appropriate

26:56 for actually production code.

26:59 This can be creative solution like one liner, some crazy ideas, some funny solutions.

27:07 It can be speedy when you're focusing, so no matter how clear it is, I only

27:13 want to create the solution as fast as possible, and as I mentioned, just

27:19 earlier, third-party solution when you're just using some additional modules,

27:25 and we also have uncategorized.

27:28 When you're not sure which category you want to share, you just want to share

27:33 this solution.

27:33 Maybe later on you want to share with your friends as well, so we create this category

27:38 for you as well.

27:39 So, yes.

27:40 And after you share, or maybe after you solve, you can get into solution of other

27:47 users.

27:48 This is actually where all the magic happens.

27:50 You actually can see solution of others, upvote, downvote solutions, you can make code

27:58 reviews, and sometimes we have so crazy code reviews, very details, like every line,

28:05 why it's good, why it's bad, and, yeah, very educational part of Checker

28:09 is actually inside of these solutions sharing.

28:13 And you can actually follow some of the people, some of the people on Checker, and

28:19 you can filter all the solution by only people you follow.

28:23 So it's easy for you to find your favorite solution.

28:27 Yeah, that's cool.

28:28 Like, you've got, like, an activity, sort of stream of activity on there, and it'll

28:34 show you, like, this is the activity around the various puzzles you've solved, or you

28:38 can follow people and things like that, right?

28:40 One of the earliest features as well, somehow it become naturally, like,

28:45 if I very love what some of the user is doing, I want to follow him, I want to know

28:53 first what other solution this guy have made, and what code reviews he's

28:59 doing, which solution he'll like and don't like.

29:01 And that's why we created this activity, so you can follow your friends, maybe your

29:07 classmates, maybe your teacher, actually, or maybe just a random guy who's just

29:13 using, like, Becky.

29:15 Yeah, that's cool.

29:16 So if I'm, like, so the other thing I can do once I publish it is I can start cycling

29:20 through similar solutions that are either similar or different than mine,

29:24 and maybe I find one that's like, oh, that is so much more clever than what I

29:28 had done.

29:29 Maybe you could follow that person and just see what they're up to, right?

29:31 Yeah.

29:32 We actually, in activity line, we actually can propose you some of the users to follow.

29:38 Depends on maybe you have some intersection with this user during the game, like,

29:44 you like his solution a lot, or you, this person actually give you some code reviews

29:51 or whatever, some, any kind of intersection.

29:55 So when you next time get into your activity feed, we can propose you.

30:00 Maybe you want to follow this guy since you have so many common interests.

30:04 So, yeah.

30:05 Yeah.

30:06 Yeah.

30:06 Yeah.

30:06 Very cool.

30:07 You also have levels, like, reminds me of playing the MUDs way back when,

30:12 level 1 to 20, and there's just a few people that are 20.

30:16 That's cool.

30:16 Switch gears from the CheckIO puzzle story for just a moment.

30:22 The other thing that you can do, in addition to solving these puzzles in

30:26 this mist-like, sort of, visit the island style, is there's more of a tower defense,

30:32 World of Warcraft type of game that you've also created that has to do with

30:35 code.

30:35 Why don't you tell people about that?

30:36 So about a year ago, maybe more, we created one more game, Empire of Code.

30:42 So the idea of this game was what can happen on intersections, some popular game, like

30:48 Tower Defense, like Clash of Clans.

30:51 So we used Clash of Clans or Boom Beach as the game based game part of this.

30:57 And add coding there.

31:00 And what kind of game we can create?

31:03 What can it be?

31:04 So we start working and this is what happens.

31:07 Empire of Code is intersection, or you can say it's mixing of game strategy, like

31:16 coding, like Boom Beach, and coding.

31:19 So when you get started out, you have, you know, like a base and you can

31:24 build attack type units, like people and whatnot, and defensive ones, like

31:30 little turrets and whatnot, like a standard tower defense game.

31:35 But then how does coding fit into this?

31:37 This is a good question.

31:39 One of the ideas behind Empire of Code is that you actually can play this game

31:44 even without coding.

31:45 So you should somehow know how to code in order to progress in the game.

31:52 In Empire of Code, you don't need it.

31:54 You just play the game as long as you want.

31:57 But eventually, some puzzles can pop up and tell you, okay, you can improve this

32:04 building if you solve this puzzle.

32:06 You may not, but if you solve this puzzle, this building that produces resources

32:13 for your troops can produce in a more efficient way.

32:18 So you might, okay, good to know.

32:21 I'll get back to it later.

32:23 Or maybe you can start right away.

32:25 So this is one part where coding actually can be used.

32:32 And another part of the game is that actually in order to control your troops in the

32:38 game, you should do coding.

32:40 So on the coding, you can control your troops in the battle.

32:45 So I'll say it again.

32:46 You can control your troops in the battle by code.

32:50 So you can say, okay, this can go at that point and then attack this tower by reading

32:56 a code.

32:57 but in the same time, we give you some basic strategy that you can use without

33:03 going.

33:03 So use whatever strategy you want.

33:06 And the awesomest part of this, the whole game, is that the whole game is the

33:10 competition between two forces, Python and JavaScript.

33:13 So right after you finish the tutorial, you should choose which side you want

33:21 to join.

33:22 if you join a Python site, you can conquer Python bases.

33:26 You can only conquer JavaScript bases.

33:29 And if you choose JavaScript side, you can only conquer Python bases and

33:35 still resources from that bases.

33:37 So it's pretty fun as well.

33:39 That's really awesome.

33:39 So these puzzles you solve around like your buildings and structures and

33:43 whatnot, is that a little bit like letting you mob the game?

33:47 Like you can change the behavior of the thing?

33:49 Or is it more just like you solve the puzzles and it gets more power?

33:52 Do you know what I mean?

33:53 Like could I write an algorithm that would change the way like say a tower works as

33:58 part of like improving it?

33:59 Or do I just like solve a puzzle and then the tower goes up a level or something?

34:03 Thank you for this question.

34:04 Actually for towers that defend your base, there are actually two kinds of puzzles.

34:11 The first kind of puzzles is they just after you solve this puzzle, the tower becomes

34:17 stronger or it has more health and it's hard to destroy the tower.

34:22 And another coding part of this tower is you actually can write a strategy as

34:30 well as like you are creating strategy for your troops in the battle, you can

34:35 create strategy for your defend tower.

34:38 So for instance, it can be, okay, if I see a heavy bot running on me and some small

34:48 bots that also running on me right now, I would like to destroy those small bots first

34:55 and then I start doing, like I start destroying, start attacking those heavy

35:04 bots because it's more efficient in that way.

35:06 So you can play this strategy on a defense base, on a defense building.

35:11 Does it make sense?

35:12 Yeah, yeah, that's really cool.

35:14 nice.

35:14 Yeah, and you can basically when you get into an area, you can say attack with this

35:20 strategy and then you can actually have like a little editor for each strategy, right?

35:24 Yeah, yeah.

35:25 And one of the awesome parts that I love a lot, so do you remember I said

35:29 that there's actually competition between two forces, Python and JavaScript.

35:34 But actually you can ask your, if you are playing for Python, you can ask your Python

35:40 fellows that also play in this game, can you test my defense strategy?

35:45 And they actually play against your strategy, but the difference is nobody,

35:49 they are not going to lose their troops and you're not going to lose any resources in

35:54 any cases.

35:55 So you can use your teammates for testing your strategies, for testing your defense

36:02 and attack strategy.

36:03 Yeah, that's really cool.

36:04 Thanks.

36:05 Yeah, it seems like a fun game.

36:06 I wasn't able to play it super far into the game, but it's definitely a cool idea.

36:11 I like it.

36:11 And that's also a web-based game, right?

36:13 Yeah, it's completely web-based, HTML5.

36:17 We all want to ship our software faster, respond to user requests, and build an edge on

36:36 the competition.

36:36 But the faster you go, the more likely a bug or issue will slip by and cause

36:41 your users grief.

36:42 I have the same trade-offs with my Talk Python websites and infrastructure.

36:45 That's why I use SnapCI.

36:46 Every time I check in at GitHub, SnapCI springs into action.

36:50 A clean copy of code is pulled from GitHub, a Python 3 virtual environment is created,

36:54 all the packages and dependencies are installed, the unit tests are run,

36:58 finally I'm notified in Slack and a menu bar on my Mac about the outcome.

37:02 That way I know it's safe to ship a shiny new version of my web app.

37:05 Ship your software faster with a 30-day free trial at snap.ci slash Talk Python.

37:19 It's kind of played on like a tablet or a phone, on the browser on them.

37:23 It's not very adapted for iPhone right now, but we are working on it.

37:27 The most efficient way to play in this game is from your desktop.

37:33 Yeah.

37:33 Yeah, sure.

37:34 Any browser.

37:35 Something with a keyboard and a mouse.

37:37 Cool.

37:37 So, I haven't brought it up yet because it's not super relevant to the audience necessarily,

37:43 but one of the things you guys did just add, and you touched on it here, is you've

37:47 recently added JavaScript support.

37:49 Like, it used to be just Python for, say, like the Czech I.O.

37:52 puzzles, but now you have JavaScript versions as well, right?

37:54 Yeah.

37:55 So, in Czech I.O.

37:56 we decide not to create a lot of languages at one time.

38:00 So, a lot of coding puzzles, coding games, or something like that, they are adding

38:07 many languages in one time.

38:09 So, 20 different languages.

38:11 you can use any of your favorite languages in order to solve the puzzle.

38:14 First of all, we were in Python.

38:17 We tested a lot of different ideas.

38:21 What does work, what doesn't work.

38:24 And then, later, when we figured out, okay, we have pretty solid ideas, and we can replicate

38:29 it.

38:29 The next language to try for us become a JavaScript.

38:36 So, we decided to start growing JavaScript communities.

38:40 Since JavaScript become more and more popular, there are a lot of new frameworks,

38:46 new ideas coming out of the JavaScript, and there are new fancy ways to coding JavaScript,

38:53 like React, and so on and so on.

38:55 So, we decided to create something for JavaScript community as well, since we are all

39:01 coding JavaScript somehow, and want to learn how to do it in a more efficient way.

39:06 So, we just recently released JavaScript Checker for JavaScript players.

39:12 So, the Checker become a portal between Python coders, between Python Checker

39:20 and JavaScript Checker.

39:21 But, every portal is still independent.

39:24 So, in Python, we are talking only about Python.

39:27 All the solutions only about Python.

39:30 And in JavaScript, it's also independent.

39:33 So, yes.

39:34 Yeah, okay.

39:34 Yeah, very, very cool.

39:35 So, if you're into JavaScript, also, I'll do something here for you.

39:39 Nice.

39:40 Now, one of the things I like when I go to a mission is, if I go there, it has like a

39:46 summary description, then a button to solve it, and that's cool.

39:49 But it also has a GitHub link at the bottom to the actual problem, the verification,

39:56 and everything.

39:57 And they're stored in various places, but one of the places that has a whole

40:02 bunch of them is github.com/checkio-missions.

40:06 And you guys have many, many pages of the solutions and the starter code,

40:12 because often you start with starter code and little tests and whatnot.

40:15 I think that's a really cool touch that each one of these missions or puzzles,

40:19 rather, you can go and see the code for.

40:22 Yeah.

40:22 So, what we decide is we decide to open source those puzzles, and there are

40:29 some reasons for that.

40:30 first of all, while we're creating some puzzles, we often make some mistakes,

40:37 like we forgot to add some tests, and after you go through the solution,

40:44 you think, okay, this is the wrong solution, it shouldn't work.

40:49 And you go to a mission repository and see, okay, they don't have this test,

40:55 and they should have.

40:57 And you create a pull request to us that explains you guys should add this test,

41:02 and we add this new test for this mission and test all the solutions once again.

41:08 So, one of the reasons is so the community can improve our mission.

41:13 Yeah, I think if you're looking at a problem and you're like, oh, but it's not testing this,

41:17 and this person who says they have a solution, it's not really the right solution,

41:20 that can be frustrating.

41:22 so you could just go do a GitHub pull request and go, I'm at another test,

41:25 right?

41:25 Something like this.

41:26 Yeah, that's cool.

41:27 Also, what we allow our community is to provide a translation permission.

41:32 So, actually, you can, each mission has up to seven different languages.

41:38 So, you can choose which language you want to read this particular mission.

41:43 And we have a lot of Chinese translation, Russian, of course, Ukrainian,

41:47 Spanish, and German.

41:49 So, a lot of people can just commit a new translation just from GitHub.

41:54 They just go and create a new pull request with new translation and we just

42:00 merge this pull request and check have one more new translation.

42:05 This particular mission have one more new translation.

42:08 And, for instance, if I'm native Russian and Ukrainian speaker, I can see

42:14 translation, Russian translation, okay, this is not correct and go and make

42:19 a pull request in this translation and make this translation even better.

42:22 So, yeah.

42:24 Yeah, that is really cool.

42:25 Yeah.

42:25 And also, an additional way, additional thing that you can actually improve

42:31 in CheckIO is that we actually have a set of hints for some mission.

42:35 So, if you're stuck in a solving mission, we have a set of hints and that

42:42 allows you with small pushes that can get you in the right way by doing this

42:49 small push like, okay, maybe you should try to Google this thing.

42:54 Maybe, what do you think if we, here is the link on a Python tutorial, maybe you

42:59 can find something here.

43:01 So, those small pushes, we call hints.

43:04 And, you can do a pull request and give us some hints for this mission.

43:13 that's really cool.

43:14 Can I create my own mission?

43:16 Like, if I want to add a mission to the scientific expedition island, how do I

43:21 do that?

43:22 We have a set of tools for mission creatives.

43:25 And, actually, there are a lot of missions that was created by other users who

43:31 has an idea.

43:32 Sometimes, users can just send me an email.

43:34 I have an awesome idea, but I don't have time to create it.

43:38 Can you create it?

43:39 Yes, of course, we can create this mission for you.

43:41 But, sometimes, users just create those missions by themselves.

43:45 And, if you find in the mission, the right panel of the mission, there are

43:51 a page with after name on this page.

43:55 So, each mission has their own after who created that, who actually created this

44:00 mission.

44:00 Yeah, that's cool.

44:01 I saw that.

44:02 Is there criteria for taking a mission or not?

44:05 Like, if somebody makes a mission and it's basically the same as another,

44:08 would you say, thanks, but no?

44:10 Or, what do you look for when somebody comes with an idea?

44:14 We have some procedure in order to accept this mission to Checker Map.

44:21 So, every person who created this mission, he should submit this mission first

44:27 on the forum, in some specific section of the forum, and where experienced

44:36 players who played a lot in Checker, they, first of all, those group of people,

44:41 they are mainly for testing those candidate missions or whatever, candidate

44:47 puzzles.

44:47 Yes.

44:48 And almost all the time they can propose some changes.

44:52 The mission definition, puzzle definition is wrong, or maybe some tests are missed,

44:58 or whatever.

45:00 There are some various, so they are starting to discuss.

45:04 those mission after, he is taking part in the mission discussion, and after

45:10 this, we have pretty solid mission.

45:13 After that, our team member can improve this mission as well.

45:18 For instance, we can add some animation part in this part, or try it panel,

45:23 or maybe our designers want to create illustration for this mission.

45:27 So, we also take part in the mission creation.

45:31 And after that, we put this mission on the island.

45:34 And if you subscribe on Checker newsletter, you will get in use that we have

45:44 some new missions coming out, and you can be the first one who tried and played

45:49 this mission.

45:50 That's awesome.

45:51 Yeah, very cool.

45:52 I love it.

45:52 That sounds really great.

45:53 And I like that you add illustrations and stuff and kind of make it feel

45:58 more part of the thing once they add it.

46:00 Thanks.

46:00 We have very cool and very passionate designers team.

46:04 Yeah, the designers definitely are doing nice work there.

46:07 Like I said, the overall view of the islands is just totally beautiful.

46:12 It's great.

46:13 So, I want to touch on two things really quickly before we, maybe three,

46:18 before we call it a show.

46:20 So, one of the ones I wanted to ask you about is you said there's something like

46:25 a Czech IO classroom or something like that.

46:28 What's the story there?

46:29 Yeah, as I mentioned before, there are a lot of universities and some classes

46:35 and teachers who are using Czech IO as an additional material.

46:39 So, you know, guys, just take this site and you use whatever you want to use

46:45 and just improve your skills there.

46:48 so, we want to help those teachers in their class.

46:54 We give them an additional functionality.

46:57 We give them more hands-on on Czech IO.

47:00 So, if you are a teacher who is actually teaching class, you can put all

47:06 your students in Czech IO and they will be in some group.

47:08 And while they explore in the world, while they're solving puzzles, they can

47:14 interact with each other.

47:15 So, those activity pages that you saw, the whole activity become the class

47:20 activity and you see activity of each class member.

47:24 If you solve some puzzle, first you see solution of your classmates and then

47:30 you can go and check solution of other Czech users.

47:33 And what else we have?

47:36 We have this progress page.

47:39 So, in this progress page you can actually in one page you can see all the

47:45 missions that your class solved and all the students and you can see all

47:49 the intersections who solved each mission and you can go and see solutions

47:53 that were shared by this particular person.

47:56 So, what actually Classroom is doing is just give some, we don't want to

48:01 change checker for classrooms but we want to give more power to teachers

48:08 so they can keep their class together.

48:11 Yeah, that's really nice and if you go into one of the pages like your profile page

48:15 that has a footer there's a class manager at the bottom and it looks really

48:19 easy.

48:20 So, let me give you a few scenarios and you tell me if this makes sense is

48:24 one one thing I could do is I could create a class and the class could be

48:29 talk Python listeners and everyone who listens to the podcast could they

48:33 be in a class and go through it together and share ideas as a group?

48:37 Yes, yes.

48:39 So, if you are creating a class you have two options.

48:41 First option you can simply put all the emails that you think you want to

48:46 add in this class in the specific text field and then put some messages out

48:51 there and just send it out.

48:53 This is the first option.

48:54 And the second option you can just provide you with the link and this link

49:01 has a page of your class and some button below that actually tells I want

49:10 to join to this class.

49:11 The only thing that you should done after join you as a class creator should

49:16 go and approve this joining right?

49:19 I see.

49:19 And after that you can have the whole class just for your podcast listeners.

49:25 Okay.

49:26 Cool.

49:26 Yeah.

49:27 Also like for some of my online courses maybe I'll see if I can create a class.

49:31 I'll look into it.

49:32 That's very cool.

49:32 Thanks.

49:33 Yeah.

49:33 I will create additional video tutorial that I will explain all the features

49:38 and I will share it and check out so you can go there and see how exactly

49:43 it works and how you can use it.

49:45 Okay.

49:45 Excellent.

49:45 Yeah.

49:46 And I'll try to link to that if the timing lines up.

49:48 Cool.

49:49 So that's one thing I wanted to cover.

49:51 The other is can you give us a look behind the scenes at the technology involved?

49:55 Like are you using Django?

49:57 Are you using Docker?

49:58 Like how's Python in the backend working?

50:00 Like those kinds of things.

50:02 Yeah.

50:02 I would love to.

50:03 So we are using Django for web part.

50:08 Also for running coding solutions, running user solutions.

50:12 We're using Twisted and we're using Docker.

50:15 So every mission is covered in Docker container and running in the Docker

50:25 container.

50:25 And all these runs and all those runnings are actually managed by Twisted

50:33 server.

50:34 And that's cool.

50:35 Is that also for Empire of Code?

50:38 Yeah.

50:39 The same kind of things actually working for Empire of Code but we make it a little

50:45 bit different for Empire of Code.

50:47 We actually every mission is actually Docker container and for every mission we

50:53 have somehow prepared the Docker container before the run.

50:57 And it's actually a little bit more efficient.

51:01 I'm not sure.

51:02 I think this part may be too much detail.

51:04 Yeah.

51:05 We don't have to go into too much of the details but I saw it will take a few

51:09 moments for us to deploy your army to this asteroid.

51:13 I'm thinking oh is that a Docker container because it's running your code strategy

51:17 and stuff like that.

51:18 yeah we had a lot of complaints from why don't you show me progressively

51:25 how my army is going.

51:26 Yeah we are actually running all the code and then show you the result.

51:31 Yeah cool.

51:33 Awesome.

51:34 All right well we're getting pretty much out of time so I think maybe we'll leave

51:38 it there.

51:38 But Alex this has been a super interesting look where Check.io came from and where

51:44 it's going.

51:44 So thanks for that.

51:46 Thank you.

51:46 Thank you for inviting me here.

51:47 It was great.

51:48 It was a big pleasure for me to share all the ideas.

51:52 You're welcome.

51:52 Now before I let you go I have two questions I always ask my guests.

51:55 The first one is I just checked there are if I look at pypi.io which is the

52:01 shiny new Python package index.

52:04 It's still it says it's in beta but the backing data store is the production data

52:08 store so you might as well use the pretty one.

52:10 If you look there there's 88,000 plus packages today which is amazing.

52:16 It's so amazing right?

52:17 And of those there's tons that you're exposed to that people maybe don't know about.

52:22 Is there a favorite one you're like hey everyone should know about this but they

52:25 probably haven't heard of it.

52:25 I think everybody heard about Django so I think this is my favorite package

52:30 that I'm using a lot so yeah Django is one of my favorite and I don't have any

52:36 fancy one that I think everybody should use.

52:39 Yeah all right so Django check it out very cool.

52:41 And if you're going to write Python code and it's not in your online editor

52:45 what what editor do you open up?

52:47 I'm using PyCharm.

52:48 This is definitely one of my favorite code editor.

52:51 Yeah I love PyCharm too.

52:53 I use it for almost all my Python work and it's one of those things that you

52:58 kind of have to take a moment and learn but as you learn more features they add up you're

53:02 just like okay I have to use this thing.

53:03 It's very cool and I think it's awesome that they're partnering with you so well

53:08 done JetBrains guys.

53:08 That's great.

53:09 Yeah thanks.

53:10 All right Alex it's been a fun conversation.

53:13 thanks for being on the show.

53:13 Thanks for having me here.

53:15 You bet.

53:15 Bye-bye.

53:16 Bye.

53:16 This has been another episode of Talk Python to Me.

53:20 Today's guest has been Alexander Leibach and this episode has been sponsored by Hired

53:25 and SnapCI.

53:26 Thank you both for supporting the show.

53:28 Hired wants to help you find your next big thing.

53:31 Visit Hired.com slash Talk Python to me to get five or more offers with salary and equity

53:36 presented right up front and a special listener signing bonus of $2,000.

53:39 SnapCI is modern, continuous integration and delivery.

53:44 Build, test, and deploy your code directly from GitHub all in your browser with

53:48 debugging, Docker, and parallels included.

53:50 Try them for free at snap.ci slash talkpython.

53:53 Are you or a colleague trying to learn Python?

53:56 Have you tried books and videos that just left you bored by covering topics point

54:00 by point?

54:00 Well check out my online course Python Jumpstart by building 10 apps at talkpython.fm slash

54:06 course to experience a more engaging way to learn Python.

54:10 And if you're looking for something a little more advanced, try my Write Pythonic code

54:13 course at talkpython.fm/pythonic.

54:16 You can find the links from this episode at talkpython.fm/episodes slash

54:22 show slash 75.

54:24 Be sure to subscribe to the show.

54:26 Open your favorite podcatcher and search for Python.

54:29 We should be right at the top.

54:30 You can also find the iTunes feed at /itunes, Google Play feed at /play, and

54:36 direct RSS feed at /rss on talkpython.fm.

54:39 Our theme music is Developers, Developers, Developers by Corey Smith, who goes by

54:44 Smix.

54:44 Corey just recently started selling his tracks on iTunes, so I recommend you check it

54:48 out at talkpython.fm/music.

54:51 You can browse his tracks he has for sale on iTunes and listen to the full-length version

54:55 of the theme song.

54:56 This is your host, Michael Kennedy.

54:58 Thanks so much for listening.

55:00 I really appreciate it.

55:01 Smix, let's get out of here.

55:04 Staying with my voice.

55:05 There's no norm that I can feel within.

55:07 Haven't been sleeping.

55:08 I've been using lots of rest.

55:10 I'll pass the mic back to who rocked his best.

55:13 Developers.

55:16 Developers.

55:17 Developers.

55:18 Developers.

55:19 Developers.

55:20 Developers.

55:21 Developers.

55:21 Developers.

55:22 Well, first developers, developers, developers.

55:25 We'll be right back.

55:25 Thank you.

Talk Python's Mastodon Michael Kennedy's Mastodon