Month: March 2018

Running the PyCharm Edu Minetest course

Licence

If you want to run the PyCharm Edu Minetest course developed by Triptera you will need a licence. Licences are free if you are running the course in 2018. Please contact Triptera for a licence. Please provide details where you would like to use the software. The licence covers the “builder_police” mod for Minetest and the “Ninja 2 minetest course” for PyCharm Edu, both of which are available with open source. All other components are covered by free and open source licences. Support is available to assist you setting up the PyCharm Edu Minetest course.

What do students learn

Students doing my PyCharm Edu Minetest course learn the following mathematical concepts

  • 3 dimensional coordinate systems
  • formulae including uses of integer division and modulo and absolute values

They also learn the following python coding skills

  • program flow
  • variables
  • loops
  • conditionals
  • data types including ints, strings, lists, tuples, dictionaries, JSON strings
  • functions
  • modules

Minetest

Minetest is a Minecraft clone allowing players to build block structures in a virtual world. To set up your PyCharm Edu Minetest course server follow instructions at Python programming course using Minetest

Minetest is open source free software which runs on Linux, Mac, Windows plus it even runs on Android, iOS and Haiku. At CoderDojo we used to run this course in Minecraft but have now switched to Minetest because of its many advantages.

  • Minetest is free so ninjas don’t have to buy a Minecraft licence.
  • Minetest passwords can be set by server op. This is much better than Minecraft which would not ask for the password when ninjas were at home, but as soon as they joined our LAN at CoderDojo Minecraft asked for their password which they couldn’t remember.
  • Minetest can run on a LAN with no Internet access. Minecraft users would have to log in to the unreliable library wifi to enter their Minecraft password and then switch networks to our LAN to join the virtual world.
  • Minetest is better on low budget hardware. I was running a server on a 2GB RAM Core 2 Duo Linux Mint headless (no monitor) desktop PC.
  • Minetest has an excellent modding interface that encourages mods unlike Minecraft which obfuscates its java code to make modding harder. The Lua modding language has surprisingly good performance. I hadn’t used Lua before but I picked it up quite quickly and it is apparently common in other games which need scripting. I did have trouble getting network sockets working in Lua on Windows but eventually solved that problem.

Minetest does not do mobs (monsters and other non player characters) as well as Minecraft. Mobs in Minetest are not native so have to be implemented in mods using the Lua scripting language. This has not been an issue for this course which we run without mobs for better performance.

Op Commands

Running the PyCharm Edu Minetest course is mostly automatic. However there are a few custom commands you can enter through in-game chat to manage the world

/set_player_task player_name task_number
resets a players tasks (replace player_name with player’s name, task_number = 0 to start again)
example /set_player_task tim 1

/set_jail_free_task 1
sets the task a player needs to complete to get out of jail

There are also some useful built-in commands

/help
provides help on chat commands

/help all
lists all the chat commands

/help command
help on a specific chat command. e.g. /help time

/time 6:00
set clock to morning time so players are not in darkness. If this becomes onerous, consider setting the “Time speed” to zero in Settings > Advanced settings > Server / Singleplayer > Game > Time speed

/grant player_name irc_builder
gives a player privileges to use building commands over IRC (should be automatic for new players) will show player’s list of existing privileges.
example /grant tim irc_builder

/revoke player_name irc_builder
opposite of grant

/teleport player_name x y z
move player to new coordinates. e.g. /teleport tim 95 12 20 see help for variations

/setpassword player_name new_password
sets player’s password in Minetest. Password can not be blank or contain spaces if it is to work with ircbuilder.
example /set_password tim sesame

/privs
see what privileges you have

You can even send any of these commands to the server over IRC. Send private messages to the server botnick (eg mtserver). The first message is to login. The second and subsequent messages are the same as the chat commands but replace the / with cmd. Below is an example IRC session. Replace mtuser and mtuserpass with the minetest user and password you want to connect as. The minetest username can be different to the IRC nick name.

login mtuser mtuserpass
cmd privs
cmd time 6:00

You can even use python console to send commands if you don’t have an IRC client. mtuser needs to be the serverop player name

from ircbuilder import MinetestConnection
from coderdojo import ircserver, mtuser, mtuserpass, mtbotnick, channel
mc = MinetestConnection.create(ircserver, mtuser, mtuserpass, mtbotnick, channel)
mc.send_cmd("privs")
mc.send_cmd("time 6:00")
Categories: CoderDojo, Minetest

PyCharm Edu review

PyCharm Edu is an Integrated Development Environment (IDE) for python which has the additional ability to run courses for learning python programming. It also enables teachers to create those courses. PyCharm Edu is cross platform, running on Linux, Mac and Windows.

At CoderDojo I am mentoring ninjas in coding python so I thought I would try PyCharm Edu. To create a course, I created a series of tasks. Each task is a python program with sections left out to be completed by ninjas (answer placeholders). A task has a task description to explain to the ninjas what to do, and a series of tests to determine when they had completed the task. Each answer placeholder has hints to help solve it, some text which needs to be replaced by the ninja and even the correct answer. The tasks have to provide enough information for the ninja to understand what needed to be done, but not enough that the answer was trivial.

Writing the tests was challenging. The tests needed to check for all possible correct answers. For example, if the correct answer was “x+y” then I should also accept “y+x” or “y + x”. I solved this problem by using the python eval() or exec() to test the value of functions or the effect of statements rather than compare the exact characters typed to the answer.

For example, here is how I used eval() to test for where the correct formula should be (x+y).

def test_formula_1(ninja_answer):
    list_data = [{"x": 5, "y": 15}, {"x": 10, "y": -5}]
    global_data = {}
    correct_answer = "x+y"
    for data in list_data:
        try:
            guess = eval(ninja_answer, global_data, data)
        except NameError:
            failed("NameError: should only be in terms of variables " + ",".join(data.keys()) + " but includes other variables. Your formula: " + ninja_answer)
            return False
        correct = eval(correct_answer, global_data, data)
        if guess != correct:
            failed("Incorrect answer for data " + str(data) + ". Correct answer: " + str(correct) + ". Your answer: " + str(guess) + ". Your formula: " + ninja_answer)
            return False
    return True

The types of tests I used to check for correct answers were

  • Exact match – when a string value or number value had to be exact
  • Partial match – when only start of string or end of string important
  • Formula correct – using eval()
  • Statement correct – using exec()
  • Printed output correct
  • Effect of program – eg results in Minetest world

When the ninja (student) is running the course they have access to a full python IDE, including command completion and debugging. As a teaching aid one of the most useful features is the console where ninjas can test individual python statements. The console has a sub-window showing variables created in the console and their values, great for teaching how variables work.

The ninja can see the code for the current task and a task description describing what they have to do. In the diagram below notice the sections of code with thin rectangles around them. These are the answer placeholders that the ninja needs to replace to solve the task. They shouldn’t need to type outside these rectangles, although they can if they want to embellish the program.

While attempting a task they can do the following actions:

  • Get hints on an answer
  • Reset the task to undo all their changes
  • View the answers (after which they must reset the task)
  • Run the program with output going to a local window (ctrl-shift-F10)
  • Check the task which assesses how well they have done by running tests
  • Advance to next or previous task

Advantages of using PyCharm Edu over web python tutorials or text editors:

  • Course can be customised
  • Student learns a proper IDE. Useful for developing bigger python projects later
  • Python console with variable values display
  • Syntax colouring and formatting recommendations
  • Command completion
  • Logic checking such as:
    • variables declared before used
    • import statements used or missing
    • spelling of function names and variable names
  • Python virtual environment support
  • Automatic installation of modules listed in requirements.txt either from pypi or LAN
  • More reliable and functional than Python IDLE
  • Better debugging than Thonny

Problems with PyCharm Edu

I did find some problems with PyCharm Edu. However, Jetbrains have been excellent at responding to my issues in this free software.

  • PyCharm Edu is usable but expect occasional hang or lack of responsiveness.
  • PyCharm Edu turns off a lot of menu items by default to avoid confusing new students. They can be turned back on in preferences.
  • PyCharm Edu and PyCharm Community Edition don’t have the same support for flask or django development found in PyCharm Pro. I was still able to do some flask development.
  • Unable to display local images in task descriptions. This feature is apparently coming in an update due in a couple of weeks.
  • “Play” button for running tasks mostly didn’t work. However, ctrl-shift-F10 achieved the same functionality reliably.

Conclusion

PyCharm Edu is my choice of tool for teaching python and I am sure most of the problems will be addressed in time.

Categories: CoderDojo, Minetest