Monitor performance issues & errors in your code

#75: Pythonic games at CheckIO Transcript

Recorded on Thursday, Sep 8, 2016.

00:00 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?

00:00 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 Lyabah 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.

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

00:00 [music intro]

00:00 Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries the ecosystem and the personalities.

00:00 This is your host, Michael Kennedy, follow me on Twitter where I am at @mkennedy, keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via @talkpython.

00:00 This episode is brought to you by Hired and SnapCi. Thank them for supporting the show on Twitter via @hired_hq and @cnap_ci.

01:32 Michael: Hey everyone. Thanks for listening, as always. Before we get to the interview with Alex, I want to give you a heads up on something I created just for you listeners. Near the end of this episode I speak with Alex about the class management and group management features in the game in Check IO. So I've decided to create a class that consists of all podcast listeners. If you want to group up with your fellow listeners and do some of these puzzles, you can use the following like to join up and share your updates and solutions. Just go to py.checkio.org/group/talk-python-listeners, create an account or log in and then say you want to join the class. You can of course find that link in the show notes as well. If you are 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 is university, high school or middle school courses. Now, let's talk to Alex.

02:21 Michael: Alex, welcome to the show.

02:22 Alex: Hi, it's great to be here, it's a big honor for me, thank you.

02:27 Michael: Oh, it's my honor to have you. I really appreciate you coming here, we are going to talk about programming, and games and some really interesting stuff that you guys have built over at checkio.org.

02:38 Alex: Yeah, I love to talk about it.

02:39 Michael: I bet, that's your baby, right. Ok, so before we get to talking about that, let's hear your story, how did you get into programming in Python?

02:49 Alex: Yeah, that was long time ago, in the high school, so I remember before that I was using my father's computer only for games, so I was beginner but at that time my friend came in and showed me his first code, it was Pascal, and I was so much amazed how easy it was, what cool things you can do by coding, and I started taking coding classes with him, so yes, it was the Pascal long time ago and then later on in my university it was Delphi, than PHP, Perl and then Python, and I stayed with Python for a long time, I love it.

03:35 Michael: Yeah, Python is really nice and definitely has some improvements on those other languages that you mentioned. But also the community is so excellent, right, it's really fun to work with the people who like Python not just the technology.

03:49 Alex: Yeah. I remember myself starting actually the Python, my first programming job actually was Perl developer in a bank, and so when I first time saw Python's piece of code I was amazed how beautiful it is, it was actually a real code, like it could be a poem or like a song, but it's not the code, because, before I was coding Perl for four years, and it was so beautiful, I was so amazed with it at the time. So I started doing some, started learning Python after work and eventually quit my job and started doing Python freelancing.

04:33 Michael: That's cool, was that like web development, or what kind of apps were you building?

04:38 Alex: Web development, yeah. Python, Django.

04:41 Michael: Ok, with Django, yeah. Nice.

04:43 Alex: I remember Django when it was new forms, like when this transaction- still my favorite framework.

04:52 Michael: You've moved on to building something that is actually a pretty incredible web app I must say, a couple of incredible web apps I guess, and whole interesting world here that brings all the stuff that he talked about more or less together and a Check IO, tell us what is Check IO?

05:13 Alex: So, back to the time when I was just starting learning Python, I think the first line of code was written during my first year of learning Python. So at the time, as I said, I was so much amazed how beautiful Python was, and I thought it should be a gallery, it should be a gallery of different Python solutions since it's so beautiful, and if I created a new solution I should share it somehow, I should show it and they should go through all other solutions and see how everybody else solved this particular puzzle. So this is why I created CheckIO and later on I have more people joined team, but yeah, the first version of Check IO wasn't that beautiful, but the core idea is still from the very beginning to the version that we have right now is that you should solve the puzzle and you can share solution if you want, but after you solve the puzzle, you can see solution of other users. You can discuss their solutions, there are several categories, for the solution, like clear code, creative code, speedy code, and I love this feeling, you know, when you are spending like five hours in a row trying to figure out how to solve this mission, this puzzle and later on, when you solve it, and maybe even you share your solution and then get into solution of other users, and you are like amazed, oh my God, it's possible to solve in two lines, I can't believe. And, why didn't I figure this out later, and I think this is the perfect learning curve, like when you are trying to figure it out by yourself, then see how some other users resolved it, and again and again, I think so, I know a lot of people who become a Python developers, very good Python developers through the CheckIO that way.

07:20 Michael: Yeah. It's really cool, so maybe I should just try to give like a visual description of the experience, yeah? So you come in, you create an account, and then you land in this world of floating islands, and it has this very 3D feel with animations and stuff, even though it's in a flat webpage, you know, it's not like a Flash game, it's html5 or something like this, yeah? Yeah, with canvas and what not, cool. And so you have these worlds, and each world represents a set of similar programming puzzles, did you ever play the game Myst? One of these super beautiful but puzzle oriented games and it feels like a little bit like that for code, like you go to these different parts of the world and you go in and you get these different puzzles, right?

08:10 Alex: Yeah, yeah. By solving those puzzles on each island, eventually you can get more islands open around this island, and you can explore more and more islands around-

08:21 Michael: Yeah, it's quite neat, I think you know, you go into these puzzles, and I guess, there is probably five to twenty puzzles per a little island and you go in there, and they are ranked in levels of difficulty and category so something like data structures, and some are finding bugs or things like that, right, and you also have a difficulty level.

08:41 Alex: Actually, all the time we are trying to experiment with different kind of puzzles so and some part of checkIO you can find like mission like you said, you just need to fix the bug on the solution so we actually give you a solution, it's almost working, there are some that doesn't work, so your mission here to fix those bugs, there are some other missions that you actually don't share your solution, but you can get more points for this solutions, it depends on the rules, so for instance, we can ask you try to solve this puzzle in the shortest way possible, so your solution should be as short as possible. I call that code and go puzzles. And, after you solve you can see how short are solutions of other users, and you think oh my god, I think I'm like spending all night and get 50 symbols and someone finds out how to make in 12, I can't believe.

09:51 Michael: Yeah, it's really amazing, and like you said, you basically, you write the solution and it's run buy the system, now we could talk about how you write your solution and all that in a moment, but you write some Python code that solves the problem under the conditions the inputs and outputs that you are supposed to, which usually they are pretty self contained, it's not too elaborate, so but they are kind of tricky in some interesting way and then once you are done, you can categorize your solution if you want to share it, if you want to publish it, as like you said, like really concise really efficient, that you can just leave it and say I have no idea what you would call this but it works. Things like that. And it reminds me you know, you can go through the solutions and you can see other people's solutions and my feeling is it's a little bit like the Mark Twain quote that says "I'm sorry I wrote you a long letter, I didn't have time to write you a short one" you know, that kind of thing like I go through and I solve it and like oh yeah t his will totally do it and then you just flip the next line and it's like filter this one line and you are like wow, ok. It also, I think it's really interesting and it sort of touches on this concept of Pythonic code, by looking to the solutions, right?

11:08 Alex: Yeah, so in the new Python release we try to do this new ideas so we actually put submission, it has three stages, so int he first stage it's the collecting mode if you see 11:21 [indiscernible] you should share your solution first no matter what. So, then we have collecting mode. [indiscernible] mode, so you might not share your solution, but you should definitely solve this no matter what. And, then you can go and see later 11:39 [indiscernible]. But we may some other checkIO, users we are trying to figure out of all this solutions we pick some solutions that we think are the most different, it might be not as perfect as it should be, but they are definitely unique in the whole spectar of solutions.

12:08 Michael: Ok, that's interesting, so you try to provide like a variety of answers to people?

12:13 Alex: Yes, yes. So all the time you see, when you check editors solutions you see only different and only unique solutions that we find in the checkIO. So this is the third stage of each mission.

12:27 Michael: It is really interesting, so I learned a lot when I solved some of the problems and publish it, and I realized that there were biases in the solutions I was creating and I didn't, I didn't realize they were biases, like for example, on one of them that I was working on, I was trying to do stuff what I felt like was the most efficient way, not in lines of code but what I thought would be like the most efficient algorithm for like maybe large data sets or whatever, and that resulted in I don't know, maybe eight lines of code, and then other people were doling the answers with like a list comprehension in one line, but I am like oh but that's going to be way slower, but you know, I guess it depends on what you are aiming for right, like if you are aiming for super readable and you know you are not working with a 100 000 lines, you are working with 500, then probably that solution is way better and so it just, I thought it was interesting that it brought out little biases that I had in ways of approaching problems that I didn't it's not like i started out to say oh this would be way more efficient if I do it this way so let me try this, it's just that's the way I started writing the code; so that was really interesting.

13:35 Alex: Yeah, this is why we created 13:40 [indiscernible] depends on your, what was your goal while you created this solution. Some of the people just love to create crazy solution, like one-liners or just try to make it as confusing as possible I would say, so we have one of the most famous users on CheckIO Veky, and I want just to say hi to him, I'm sure he's listening to this podcast, so he has the biggest amount of followers in the game, and he loves to create the most crazy solutions, so I think the creative category we created just specifically for Veky. Yeah, for those unique people who love to create some unique solutions we'll 14:27 create they're competing with each other in creativity.

14:34 Michael: Yeah, I think it really does bring out a lot of interesting stuff. Would you say- it seems to me, tell me if I have the right sort of feeling I did start at the beginning so I kind of feel like I can at least guess that this that CheckIO is really good for people that know something about programming, but in order to do it you kind of need to know a little bit- almost a little tiny bit of Python rules right, like how to define code blocks or suites, and how to perform conditionals, so it's not like I'm bored with my job in finance, and I've never touched a line of code but I want to come learn it, you've got to be a little bit into programming.

15:19 Alex: Yes. I do have this question a lot why we are not teaching Python, and I do have a lot of questions like this.

15:27 Michael: Well, you are teaching Python, you're just not teaching 0 to like the very first step.

15:34 Alex: Yes, this is what I love yeah, yeah. So, we are not teaching like you said, we're not teaching from 0 to some point, so I do believe that in internet out there, there are so many places where you can learn how to code, but there are so few places where you can actually learn how to create, how to produce a code with a good quality, and yeah, and I believe that checkIO is one of those places. So, this is our go-to not maybe to teach you how to code, we'll teach you how to create a good coding solutions.

16:08 Michael: Yeah, I think that that's correct, you're right there are so many places to learn to code these days if you were kind of like a career switcher, I kind of think of people as they're like- I know that I want to get into program I have no idea what that means, like that level there, you probably got to start somewhere else, but I heard someone say one of my listeners suggested that I reach out to you again and we get this show put together and I sorry I don't remember who it was, but thanks contacting me on Twitter. And they said look you guys really have it right, you have it so that you want to just keep learning, and you want to make learning the code addictive and fun, and I think that's a way more important service than teaching people what a variable is or what a string is, or you know, what the concept of an if statement for example.

17:00 Alex: Yeah, this is actually one of the reasons why a lot of teachers and a lot of universities, teachers recommend us as an additional way to learn coding, so because we don't provide any learning materials or something like that, it we probably, we don't have any conflicts with what they are teaching, we just give them an additional way to learn. So if you are right now, if you're learning how to code and even from zero, you should definitely start practicing right from the very first day, and you should learn, you should find some places to do it and CheckIO I think is the perfect place to do it.

17:42 Michael: Yeah, it's definitely a good place to start because often people start one 17:46 the code because they've got some grand idea but the grand ideas- it can be so overwhelming because you don't even know where to start, but CheckIO the missions are sufficiently self-contained that it doesn't feel like oh, there's no way, like where do I even start right, like you can get started and it's pretty structured, so I think it is a great place to learn. Let's talk about the experience of doing the exercises.

18:09 Alex: Ok

18:11 Michael: I go to my little island which like I said is beautiful, it's got little clouds and staff, and I pick my challenge, my puzzle, and then it takes me to an online editor, right?

18:23 Alex: We have an online editor, and actually, at the same time with online editor we also have web plugins, and with those web plugins that you can install in your Chrome browser or Firefox, you can use your local editor actually, so you don't need to actually if you started doing some big solution or working on a big problem, you most of the time use your local editor, so we give you this opportunity to use your local editor and then you just open the checkIO and you see your code right from your local editor in our web editor.

19:00 Michael: Oh, ok that's awesome, so like if I'm using PyCharm or Sublime text or something like that, I can just sort of download it and somehow the web plug-in keeps my local version and my checkIO version at sync?

19:13 Alex: Yes, yes we synchronized both of those solutions, so right after you make some changes in our web version of checkIO, this goes to your local editor as well. So it's very easy for you to solve and actually since you mentioned PyCharm, we also partner with PyCharm and also and the whole partnership starts with PyCharm education. So we have this PyCharm has a plugin for PyCharm education and using those plugins you actually can solve puzzle actually by using PyCharm, so the whole checkIO interface those mission descriptions, the island structure, animation, it all goes to write in your PyCharm editor. And you can solve quoting puzzles right from there.

20:09 Michael: Oh, that's pretty interesting. I didn't realize that you guys integrated with PyCharm education edition. So, people heard me go on and on about how I like PyCharm, and as I like a proper editor but they have an alternate version for education that has these like lessons built into it, and so you guys have integrated with those lessons in some way?

20:28 Alex: Yeah, they have this ability to create plugins for the PyCharm educational, and right when I figured out that PyCharm my favorite editor created the educational version, and I was is so crazy, I should find a way to be part of this, and yeah, I contacted them we started doing those plugins, and eventually yes, the plugin was released and we're both happy.

20:56 Michael: That's nice, I'm going to have to check that out now.

20:59 Alex: So yeah, and the one more unique idea for checkIO editor that we are using and users love it, is that for some of the missions we create this try panel. So, let me tell you the idea- so we wanted to present the solution you are trying to solve with some interface, so we create for almost each coding puzzle we create some interface; for instance if you need to find all the unique symbols in a piece of text right, we give you this text input and you can put your text in this input and then click tests, and it gives you the result, what symbols were unique in this particular text, and in order to get the result, those interfaces actually are using your code the code that you have written in the editor. And for instance, one other mission that is one of my favorites is open labyrinth and there you have actually the whole labyrinth created, and the idea for puzzle is to find their way to get out of the labyrinth, and in this interface you can create your own labyrinths after clicking solve you see how some arrow, small tiny arrow is trying to find a way out of the labyrinth by using actually the program that you created. So, in such a way we're trying to show you that every piece of code has an interface that probably is going to use your code, it's not just this boring function.

22:48 Michael: Right, take these numbers, search on those numbers, but something more advanced?

22:53 Alex: Yes, yes.

22:53 [music]

22:53 This portion of Talk Python To Me is brought to you by Hired. Hired is the platform for top Python developer jobs. Create your profile and instantly get access to 3500 companies who will work to compete with you. Take it from one of Hired users who recently got a job and said, "I had my first offer on Thursday, after going live on Monday and I ended up getting eight offers in total. I've worked with recruiters in the past but they've always been pretty hit and miss, I've tried LinkedIn but I found Hired to be the best. I really like knowing the salary upfront, privacy was also a huge seller for me." Sounds awesome, doesn't it? Wait until you hear about the signing bonus- everyone who accepts a job from Hired gets a $1000 signing bonus, and as Talk Python listeners it gets way sweeter. Use the link hired.com/talkpythontome and hired will double the signing bonus to $2000. Opportunity is knocking, visit hired.com/talkpythontome and answer the door.

22:53 [music]

24:01 Michael: So, the editor is really cool, and the fact that you integrate with the local editors I think is even better, and I noticed that at the top is says you can import some modules or create additional functions or things like that, or classes or whatever?

24:16 Alex: Yeah, that was set of modulus that we allow you to import.

24:21 Michael: Yeah, that's what I was going to ask, like surely pretty much the standard library for the most part, but then are there external open-source ones as well?

24:29 Alex: A lot of users have to add SciPy.

24:33 Michael: Sure, some of the machine learning stuff maybe yeah?

24:35 Alex: And Numpy so we integrated all of those modules for them, and even for Python version, for Python we created the specific category for those solutions, we call it third-party solutions, and if you are using those kinds of modules, we encourage you to share your solution in those categories.

24:58 Michael: Okay.

24:59 Alex: For those categories, you can check solutions that are using various models.

25:04 Michael: That's really cool. Now, another thing that I see up at the top that is it makes me smile, is in this editor, and if you've ever used something like jsfiddle it's a little bit like that with multiple panes, and so on if you haven't checked it out, is it has sort of navigation and one of the dropdowns at the top is it says I can pick my Python version and I could pick Python 2.7 but the one that I have active is actually Python 3.6 alpha 3, that's pretty awesome that you guys are like running such a new version of Python 3.

25:38 Alex: Yeah, we're trying to keep Python version as fresh as possible, so users of checkIO can play with the precious Python version as early as possible, and show some awesome solutions with new cool Python features that coming out soon.

26:02 Michael: That's really cool, so if you want to say look, I'm going to demonstrate how much easier this problem is to solve in Python 3.6 than it was in 3.4 or something, you can do that, right?

26:11 Alex: Yeah, yeah.

26:12 Michael: How awesome. Ok that's really cool, so once I get my solution I write it and I can play around with it at my console or my local editor, I mean the online terminal console or my local editor; and then once it passes, it gives me a couple of options right, I can basically just save it or I can publish it and share it with the world, right?

26:37 Alex: As I said, this is the very first idea of checkIO the core idea of sharing code solution with other users, so this is where you can share your code, pick a category, which category actually you want to share your cold, it can be a clear solution if you think this is code the most appropriate for actually production code, this can be creative solution like one line or some crazy idea, some funny solution, it can be speedy when you are focusing so no matter how clear it is I only want to create the solution as fast as possible, and as I mentioned just earlier, third-party solution, when you're just using some additional modules. And we also have uncategorized, when you are not sure which category you want to share, you just want to share this solution, maybe later on you want to share with your friends as well. So we create this category for you as well. And after you share or maybe after you 27:46 told you can get into solution of other users, this is actually where all the magic happens. You actually can see solutions of others upload, download solutions you can make code reviews and sometimes we have so crazy code reviews, very detailed, like every line why it's good, why it's bad and very educational part of checkIO is actually inside of these solutions sharing, and you can actually follow some of the people some of the people at CheckIO and you can filter all the solutions by only people you follow, so it's easy for you to find your favorite solution.

28:27 Michael: Yeah, that's cool, you've got like an activity sort of stream of activity on there, it will show you like this is the activity around the various puzzles you've solved, or you can follow people and things like that right?

28:41 Alex: One of the earliest features as well, somehow it became naturally, like if I love what some of the users is doing, I want to follow him I want to know first what other solutions this guy have made and what code reviews he is, doing which solutions he likes and doesn't like, and that's why we created this activity so you can follow your friends, maybe your classmates, maybe your teacher actually, or maybe just a random guy who is just using like Veky.

29:16 Michael: Yeah that's cool. So the other thing I can do once I publish it is like I can start cycling through solutions that are either similar or different than mine, and maybe I find one that's like oh that is so much more clever than what I had done, maybe you could follow that person and just see what they're up to, right?

29:32 Alex: Yeah, we actually in activity line we actually can propose you some of the users to follow, it depends on maybe you have some intersection with this user during the game, like you liked his solution a lot or you with this person actually give you some code reviews or whatever, any kind of intersection. So, when you next time get to your activity feed, we can propose you, maybe you want to follow this guy since you have so many common interest, so yeah.

30:06 Michael: Yeah, yeah, very cool. You also have levels like it reminds me of playing the Muds we had level 1 to 20, and there's just a few people are 20 that's cool. Switch gears from the checkIO puzzle story for just a moment, the other thing that you can do in addition to solving these puzzles and this Myst-like sort of visit the island style, is there's more of a tower defense World of Warcraft type of game that you've also created that has to do with code, why don't you tell people about that?

30:37 Alex: So about a year ago maybe more, we created one more game, Empire of Code, so the idea of those games was what can happen on intersection of some popular game like Tower of defense, like Clash of clans so we used Clash of Clans or Boom Beach as they came based game part of this, and add coding there, and what kind of game we can create, what can it be. So, we started working and this is what happens, so Empire of Code is intersection or you can say it's mixing of game strategy like coding like Boom Beach and coding.

31:21 Michael: So, when you get started out you have like a base and you can build attack type units like people and what not in defensive ones like a little turrets and what not like a standard tower defense game, but then how does coding fit into this?

31:38 Alex: This is a good question. One of the ideas behind the Empire of Code is that you actually can play this game even without coding, so you should somehow know how to call in order to progress in the game. In Empire of Code- you don't need to, you just play the game as long as you want, but eventually some puzzles can pop up and tell you okay you can improve this building, if you solve this puzzle, you may not, but if you solve this puzzle there is building the produce resources for your troops can produce in a more efficient way, so you are like okay, good to know I'll get back to it later, or maybe you can start right away. So this is one part where coding actually can be used. And in our part of the game, it is that actually in order to control your troops in the game you should do coding, so only coding, you can control your troops on the bottle so I say it again you can control your troops in the battle by code so you can say, okay, this can go at that point and then I'd like this tower by reading a code; but at the same time, we give you some basic strategy that you can use without coding, so use whatever strategy you want. And they awesome part of this the whole game is that the whole game is the competition between two forces, Python and JavaScript, so right after you finish the tutorial, you should choose which side you want to join, if you join the Python side, you can concur Python basis, you can only concur Javascript basis, and if you choose JavaScript side you can only concur Python basis. So it's pretty fun as well.

33:39 Michael: That's really awesome. So these puzzles you solve around like your buildings and structures and whatnot is that a little bit like letting you mod the game like you can change the behavior of the thing, or is it more just like you solve the puzzles and it gets more power? Like can I write an algorithm that would change the way like say a tower works, or do I just like solve the puzzle and then the tower goes up a level or something?

34:04 Alex: Thank you for this question. Actually, for towers that defend your base there are actually two kinds of puzzles; the first kind of puzzles is after you solve this puzzle the tower becomes stronger, or it has more health, and it's hard to destroy this tower. And then our part of this tower is you actually can write this strategy, as well as like you are creating strategy for your troops in the battle you can create strategy for your defend tower, so for instance it can be okay if I see a heavy boat running on me and some small boats that are also running on me right now, I would like to destroy those small boats first and then I start doing like I start destroying and start attacking those heavy balls because it's more efficient in that way, so you can play this strategy defense based- does it make sense?

35:13 Michael: Yeah, that's really cool. And you can, basically when you get into an area you can say attack with this strategy, and then you can actually it has like a little editor for each strategy, right?

35:25 Alex: Yeah, yeah and one of awesome parts that I love a lot- do you remember I said that this is actually competition between two forces, Python and Javascript, but actually if you are playing for Python you can ask your Python fellows that are also playing this game can you test my defense strategy and they actually play against your strategy but the difference is they are not going to lose their troops, and you're not going to lose any of the resources in any case, so you can use your teammates for testing your strategies, for testing your defense and attack strategy

36:04 Michael: Yeah, that's really cool. It seems like a fun game I wasn't able to play it super far into the game, but it's definitely a cool idea, I like it, and it's also a web-based game right?

36:14 Alex: Yeah, it's completely web based HTML 5.

36:14 [music]

36:14 We all want to ship our software faster, respond to user request quicker and build an edge on the competition. But the faster you go, the more likely a bug or issue will slip by and cause your users' grief. I have the same trade-offs with my Talk Python websites and infrastructure. That's why I use Snap CI. Every time I check into github, Snap CI springs into action. A clean copy of code at github, a Python 3 virtual environment is created all the packages and dependencies are installed, the unittests are run. Finally, I am notified in Slack and in many bar on my Mac about the outcome. That how I know it's safe to ship a shiny new version of my web app. Ship your software faster with the 30 days free trial at snap.ci/talkpython.

36:14 [music]

37:19 Michael: Can I play it on like a tablet or phone, but on the browser on them?

37:24 Alex: It's not very adapted for Iphone right now, but we're working on it, the most efficient way to proclaim this game is from your desktop.

37:36 Michael: Yeah, sure, something with a keyboard and a mouse, cool. So, you haven't brought it up because it's you know not super relevant to the audience necessarily, but one of the things you guys did just add, you touched on it here, is you've recently added Javascript support, like it used to be just Python for say like the checkIO puzzles, but now you have Javascript version as well, right?

37:55 Alex: Yeah, so in checkIO we decided not to create a lot of languages at one time, so a lot of coding puzzles, coding games, or something like that, they're adding many languages at one time, so 20 different languages, you can use any of your favorite languages in order to solve the puzzle. First of all, we were in Python, we tested a lot of different ideas, what works and what doesn't work. And then, later when we figured out okay we have pretty solid ideas, and we can replicate it; the next language to try for us became a JavaScript, so we decided to start growing of JavaScript community, since Javascript became more and more popular, a lot of new frameworks new ideas coming out of the JavaScript and there are new fancy ways to code in Javascript. So we decided to create something for Javascript community as well, since we all code in Javascript somehow and want to learn how to do it in a more efficient way. We just recently released Javascript checkIO for JavaScript players. So the checkIO became a portal between by Python coders and between Python checkIO and JavaScript checkIO, but every portal is too independent so in Python we're talking only about Python, all of the solutions are only about Python, and in JavaScript it's also independent.

39:34 Michael: Yeah okay, very cool. So if you're into JavaScript also something here for you. Nice, now one of the things I like when I go to a mission is if I go there, it has like a summary description, than a button to solve it and that's cool. But it also has a github link at the bottom to the actual problem, the verification and everything, and they're stored in various places, but one of the places that has a whole bunch of them is github.com/checkio-missions and you guys have many pages of the solutions and the starter code because often you start with starter code and little tests and whatnot. But I think that's a really cool touch that each one of these missions or puzzles rather you can go and see the code for.

40:22 Alex: Yeah, so what we decided is we decided to open source those puzzles and there are some reasons for that. First of all, while we're creating some puzzles we often make some mistakes, like we forgot to add some tests and after we go through the solution you think, okay, this is the wrong solution it shouldn't work, and you go to mission repository and see ok, they don't have this test and they should have and you create a pull request to us that explains you guys should add this test, and we add this new test for this mission and test all the solutions once again. So one of the reasons is so the community can improve our mission.

41:13 Michael: Yeah, I think if you're looking at a problem and you're like, oh but it's not testing this and this person who says they have a solution, it's not really the right solution- that can be frustrating, and so you could just go to a github pull request and go I'm at another test, right, something like this.

41:27 Alex: Also, what we allow our community is to provide a translation permission. So actually, you can each mission has up to seven different languages, so you can choose which language you want to read this particular mission, and we have a lot of Chinese translation Russian, Ukrainian, Spanish and German, so a lot of people can just commit a new translation just from github, they just go and create a new pull request with new translation and we just merge this pull request and checkIO have one more new translation. This particular mission have one more new translation, and for instance, if I'm native Russian and Ukrainian speaker, I can see Russian translation, ok this is not correct, and go and make a pull request in this translation and make this translation even better.

42:24 Michael: Yeah, that is really cool.

42:27 Alex: Yeah and also in additional way, additional thing that you can actually improve in CheckIO is that we actually have a set of hints for some mission, so if you're stuck in the solving mission, we have a set of hints and that allows you small pushes that can get you in the right way by doing this small push like, okay maybe you should try to Google this thing maybe what do you think if we here is the link, on Python tutorial maybe you can find something here. So those small pushes we call hints. And, you can do a pull request, and give us some hints for this mission.

43:14 Michael: That's really cool. Can I create my own mission, like if I want to add a mission to the scientific expedition island, how do I do that?

43:22 Alex: We have a set of tools for mission creatives. And actually there are a lot of missions that were created by other users, sometimes user can just send me an email I have an awesome idea but I don't have time to create it, can you create it? Yes of course we can create this mission for you, but sometimes users just create those missions by themselves and if you find the mission at the right panel of the mission page with after name on this page so each mission has their own after who created this mission.

44:01 Michael: Yeah that's cool, I saw that. Is there a criteria for taking a mission or not like if somebody makes a mission and it's basically the same as another, would you say thanks but no, or like what do you look for when somebody comes with an idea?

44:14 Alex: We have some procedure in order to accept this mission to checkIO map. Every person who creates this mission, he should submit this mission first on the forum, in some specific section of the forum, and where experienced player who play a lot checkIO they first test those-

44:46 Michael: Those candidate missions or whatever, kind of puzzles?

44:48 Alex: Yes. And almost all the time, they can propose some changes, the mission definition, puzzle definition is wrong or maybe some tests are missing or whatever, there are some various, so they are starting to discuss. So those missions after are taking part in the actual mission discussion and after this, we have pretty solid mission. After that, our team member can improve this mission as well, for instance we can add some animation part in this part or try panel or maybe our designers want to create illustration for this mission; so we also take part in the mission creation. And after that, we put this mission on the island and if you subscribe on checkIO newsletter, you will get a news that we have some new missions coming out, and you can be the first one who try and play this mission.

45:50 Michael: That's awesome, very cool. That sounds really great, and I like that you add illustrations and stuff and kind of make it feel more part of the thing once they add it.

46:01 Alex: Thanks, we have very cool and very passionate designers team.

46:05 Michael: Yeah the designers definitely are doing nice work there. Like I said, the overall view of the islands is just totally beautiful, it's great. So I want to touch on two things really quickly, maybe three, before we call it a show. And so one of the ones I wanted to ask you about is you said there's something like checkIO classroom or something like that- what's the story there?

46:29 Alex: Yeah, as I mentioned before, there are a lot of universities and classes and teachers who are using checkIO as an additional material, so you know, guys just take this site and you use whatever you want to use, and just improve your skills there. So, we want to help those teachers in their quest, we give them an additional functionality, we give them more hands-on on checkIO so if you are teacher who is actually teaching class, you can put all your students in checkIO and they will be in some group, and while they explore in the world while they're solving puzzles, they can interact with each other, so those activity pages that you saw, the whole activity becomes the class activity, and you see activity of each class member. If you solve some puzzles, first you see solution of your classmates and then you can go and check solution of other checkIO users; and what else we have, we have this progress page, so in this progress page you can actually in one page, you can see all the missions that your class solved and all the students and you can see all the intersections who solved each mission and you can go and see solutions that were shared by this particular person. So, what actually classroom is doing is just give some- we don't want to change checkIO for classrooms, but we want to give more power to teachers so they can keep their class together.

48:12 Michael: Yeah, that's really nice, and if you go into one of the pages like your profile page that has a footer there's a class manager at the bottom and it looks really easy. So let me give you a few scenarios and you can tell me if this makes sense or not. So, one thing that I could do is I could create a class and the class could be Talk Python listeners, and like everyone who listens to the podcast, could they like being a class and like go through it together and share ideas as a group?

48:37 Alex: If you are creating a class you have two options; first option you can simply put all the emails that you think you want to add in this class in the specific text field, and then put some messages out there, this is the first option. And the second option is you can just, we just provide you with the link and this link has a page of your class, and some buttons be below that actually says I want to join to this class. The only thing that you should do after joining, you as a class creator should go and approve this joining, right, and after that you can have the whole class just for your podcast listeners.

49:26 Michael: Okay cool. Also like for some of my online courses maybe I'll see if I can create a class, I'll look into it, that's very cool thanks.

49:34 Alex: Yeah, I will create additional video tutorial that will explain all the features, and I will share it in checkIO so you can go there and see how exactly it works and how you can use it.

49:46 Michael: Ok excellent, and I'll try to link to that if the timing lines up. Cool, so that's one thing I wanted to cover; the other is can you give us a look behind the scenes at the technology involved like are you using Django are you using Docker, like how's Python in the backend working, like those kinds of things?

50:01 Alex: Yeah, I would love to. So, we are using Django for web part, also for running according solutions, running users solutions we're using Twisted and we are using Docker. So every mission can be stored in Docker container and running in the Doctor container, and all this runs and all those runnings are actually managed by Twisted server.

50:35 Michael: That's cool. Is that also for Empire of Code?

50:38 Alex: Yeah, the same kind of things actually working for Empire of Code, but we make it a little bit different for Empire of Code, actually every mission is actually Docker container and for every mission we have somehow prepares the Docker container before the run, and it's actually a little bit more efficient. I'm not sure I think this part maybe too much detailed

51:06 Michael: Yeah, we don't have to go into just too much of the details, but I saw like it will take a few moments for us to deploy your army to this asteroid and I'm thinking oh is that a Docker container because it's running like your code strategy and stuff like that.

51:17 Alex: Yeah, yeah we had a lot of complaints from users, why don't you show me progressively how my army is going, yeah we are actually running all the code and then show you the result.

51:32 Michael: Yeah, cool. Awesome. All right, well were getting pretty much out of time so I think maybe we'll leave it there, but Alex this has been a super interesting look where checkIO came from and where it's going so, thanks for that.

51:46 Alex: Thank you, thank you for inviting me here, it was great, it was a big pleasure from in to share all the ideas.

51:52 Michael: You're welcome. Now, before I let you go I have two questions I always ask my guess; the first one is, I just checked there are, if i look at pypi.io which is the shiny new Python package index, it says it's in beta but the backing data stores the production data store so you might as well use the pretty one, if you look there's 88,000 plus packages today, which is amazing, it's so amazing right, and out of those there's tons that you are exposed to that people maybe don't know about, is there a favorite one you're like hey everyone should know about this but they probably haven't heard of it?

52:26 Alex: I think everybody heard about Django I think this is my favorite package I'm using a lot so yeah Django is one of my favorite, and I don't have any fancy one that I think everybody should use.

52:39 Michael: Yeah alright, so Django, check it out, very cool. And if you're going to write Python code and it's not in your online editor what editor do open up?

52:47 Alex: I'm using PyCharm. This is definitely one of my favorite code editor.

52:52 Michael: Yeah, I love PyCharm too, I use it for almost all my Python work, and it's one of those things that you kind of have to take a moment and learn, but as you learn more features they add you are just like okay I have to use this thing. It's very cool, and I think it's awesome that they're partnering with you so well done Jetbrains guys, that's great.

53:10 Alex: Yeah thanks.

53:10 Michael: Alright Alex, it's been a fun conversation, thanks for being on the show.

53:13 Alex: Thanks for having me here.

53:16 Michael: You bet, bye bye.

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

53:16 Today's guest has been Alexander Liabakh and this episode has been sponsored by Hired and Snap CI. Thank you both for supporting the show!

53:16 Hired wants to help you find your next big thing. Visit hired.com/talkpythontome to get five or more offers with salary inequity presented right upfront, and a special listener signing bonus of $2,000.

53:16 Snap CI is modern continuous integration and delivery. Build, test, and deploy your code directly from github, all in your browser with debugging, docker, and parallelism included. Try them for free at snap.ci/talkpython

53:16 Are you or a colleague trying to learn Python? Have you tried books and videos that left you bored by just covering topics point-by-point? Check out my online course Python Jumpstart by Building 10 Apps at talkpython.fm/course to experience a more engaging way to learn Python. If you're looking for something a little more advanced, try my Write Pythonic Code course at talkpython.fm/pythonic.

53:16 You can find the links from the show at talkpython.fm/episodes/show/75

53:16 Be sure to subscribe to the show. Open your favorite podcatcher and search for Python. We should be right at the top. You can also find the iTunes feed at /itunes, Google Play feed at /play and direct RSS feed at /rss on talkpython.fm.

53:16 Our theme music is Developers Developers Developers by Cory Smith, who goes by Smixx. Cory just recently started selling his music on iTunes so I recommend you check it out at talkpython.fm/music. You can browse his music there and listen to the full-length version of Developers Developers Developers.

53:16 This is your host, Michael Kennedy. Thanks for listening!

53:16 Smixx, take us out of here.

Back to show page
Talk Python's Mastodon Michael Kennedy's Mastodon