Page 1 of 1

Client for kids programming

Posted: Fri Jan 10, 2020 17:48
by hilaire
Hi,

This is my first post to Minetest forum, so I hope I am posting at the right place. Correct me if I am wrong.

I will briefly present myself for the context. I teach math and ICT in junior high in Geneva. In my free time, I wrote DrGeo, a free interactive geometry and programming environment. As a teacher I am always interested to teach programming. I did some programming teaching with Python, Squeak, Scratch and DrGeo with Pharo language. A couple of years ago I used Minetest in a school project.

I am interested to explore the concept of a Minetest client whose interface is mainly user programming. The idea is no to build a mod, but to manipulate the avatar by programming, like a turtle. WorldEdit is the closest match I found.

Ideally the user will manipulate its avatar only by programming. For example to build a square tower 100 blocs in height, one will code something like:

Code: Select all

100 timesRepeat: [
    avatar goUp
    4 timeRepeat: [
        10 timesRepeat: [avatar dropBrick; moveForward].
        avatar turnLeft] ]
Were any attempts in this direction done in the past?

Thanks

Hilaire

Re: Client for kids programming

Posted: Fri Jan 10, 2020 18:17
by Krock
Hello and welcome to Minetest.

Here are a few mods that might be interesting to you:

basic_robot - Lua
miners_robots - graphical
turtle - Forth or custom assembly
turtleminer - graphical (WIP?)
simple_robots (fork) (based on simple_robots (forum)) - graphical (maybe?)

digtron - complicated, maybe programming?
mesecons - not building, but programming Lua controllers (Lua) and FPGAs for logic circuits

Shameless advertisement for the Mod Search Engine

In theory it is possible to expose and/or translate a custom language to Lua to manipulate stuff in-game, but I don't know of any mod that implements such a feature. Code based on user input also needs to be secure and breakable in execution (while true do end, for example).

Re: Client for kids programming

Posted: Fri Jan 10, 2020 21:26
by hilaire
Hi,

Thanks for the pointers to the mods. I did not realize their capabilities, it is impressive.

My initial naive thought was a dedicated Pharo based client communicating directly with the Minetest server. It will be used in place of the traditional Minetest cllient. Well a guest should connect to the traditional Minetest client for visual feedback, though.

This client will authenticate with the avatar credentials, then send to the server the commands resulting from the user programming. Debugging, step by step execution, error handling will be handled by this client.
In my understanding, it will not require Lua nor a dedicated mod.
No idea it is doable, though

Btw, is there a http api, or is it just udp level?

Thanks

Re: Client for kids programming

Posted: Fri Jan 10, 2020 23:59
by jp
At Kidscode (commercial fork of Minetest) we have developed an advanced programmable robot for kids.

Re: Client for kids programming

Posted: Sat Jan 11, 2020 03:50
by Sokomine
hilarie wrote: My initial naive thought was a dedicated Pharo based client communicating directly with the Minetest server. It will be used in place of the traditional Minetest cllient. Well a guest should connect to the traditional Minetest client for visual feedback, though.
Why not take a traditional turtle bot and let it look like a player's avatar? I think that would be way easier.

There's at least one player who modified his client's code so that his avatar flew over a server where contact with the admin was lost and the map could only be saved this way. So it's mostly doable - just a lot of effort and probably very prone to errors (avatar dying, beeing teleported by someone, disagreement of client and server about where the client currently is, ..). And if the children would try to connect to any regular server with such a client, they'd very soon get banned.
hilarie wrote: This client will authenticate with the avatar credentials, then send to the server the commands resulting from the user programming. Debugging, step by step execution, error handling will be handled by this client.
In my understanding, it will not require Lua nor a dedicated mod.
No idea it is doable, though
There's no need to fear lua :-) It's just another programming language. The avatar ought to be controlled by a lua mod on the server's side. How you control that mod and issue commands for it - that's your decision. Directly ingame might be easiest in most cases (I think most turtle bots work that way), but you can also use that mod as an API for your own client and let whatever interface you choose to program talk to the lua mod.
hilarie wrote: Btw, is there a http api, or is it just udp level?
The api is a lua mod. If there's any other protocol to talk (like i.e. IRC or HTTP), then it's usually through a lua mod as well.

Perhaps you ought to take a look at the raspberryjammod. If you get it to work, that mod might already do all you asked for.

Re: Client for kids programming

Posted: Sat Jan 11, 2020 10:46
by hilaire
Sokomine wrote: Why not take a traditional turtle bot and let it look like a player's avatar? I think that would be way easier.
Yes, that's an option. The programming environment may be limited, though.
Sokomine wrote:There's no need to fear lua :-) It's just another programming language. The avatar ought to be controlled by a lua mod on the server's side. How you control that mod and issue commands for it - that's your decision. Directly ingame might be easiest in most cases (I think most turtle bots work that way), but you can also use that mod as an API for your own client and let whatever interface you choose to program talk to the lua mod.
I need time to digest this.
Lua is fine but I am inclined to think this layer may not be necessary.
Sokomine wrote:
hilarie wrote: Btw, is there a http api, or is it just udp level?
The api is a lua mod. If there's any other protocol to talk (like i.e. IRC or HTTP), then it's usually through a lua mod as well.
Hum, let me rephrase my initial question.
Are not both server and client written in C++. How do the client communicate with the server if not through UDP. I guess this communication part is written in C++ too. Is it just bare bone UDP[1] or does it use a higher level protocol as HTTP for client-server communication?

[1] https://dev.minetest.net/Network_Protocol

Re: Client for kids programming

Posted: Sat Jan 11, 2020 15:19
by Sokomine
hilarie wrote: Yes, that's an option. The programming environment may be limited, though.
Depends what you've got in mind. If your intention is to create an AI that behaves like a (young, not too socialiced) player...even that has been done in lua (see AliveAI).
hilarie wrote: Are not both server and client written in C++. How do the client communicate with the server if not through UDP. I guess this communication part is written in C++ too. Is it just bare bone UDP[1] or does it use a higher level protocol as HTTP for client-server communication?
I'm no expert on MT's network protocol. AFAIK it's mostly UDP. When connecting to a server, media data (textures and models) are sent to the client if the client hasn't already cached them. This media transfer can use HTTP. During gameplay, the client sends commands to the server about what the player did, and the server sends mapblocks, player position data, formspecs and the like. And all that's of little relevance to your stated goal of teaching children to program because making sense of that kind of information would be more in the line with learning to control a game client with AI. That's...very...far from the visual programming intended for children for which programming is something new.

The Lua api is very powerful. You can use it to establish your own network protocol and client.

Re: Client for kids programming

Posted: Sat Jan 11, 2020 15:31
by rubenwardy
hilarie wrote: Is it just bare bone UDP[1] or does it use a higher level protocol as HTTP for client-server communication?
Minetest uses a custom protocol over UDP to do networking. This protocol has a higher level and a level level to it. The lower level deals with channels and reliability, the higher level deals with comands like "set this node" or "move to this position".

Re: Client for kids programming

Posted: Sat Jan 11, 2020 18:57
by hilaire
rubenwardy wrote: Minetest uses a custom protocol over UDP to do networking. This protocol has a higher level and a level level to it. The lower level deals with channels and reliability, the higher level deals with comands like "set this node" or "move to this position".
Thanks for the updates.
I guess this is the relevant doc https://dev.minetest.net/Network_Protocol?
The higher level protocol is likely the place to look at. I will start with authentication then.
Sokomine wrote: player position data, formspecs and the like. And all that's of little relevance to your stated goal of teaching children to program because making sense of that kind of information would be more in the line with learning to control a game client with AI. That's...very...far from the visual programming intended for children for which programming is something new.
I am not looking at kid programming a client nor at visual programming for kid, but textual programming for kid. With an appropriate DSL kid will code the avatar to move, dig, build. It will be done within the Pharo live programming environment where you can easily step, debug, etc. Like it is done for interactive geometry programming with DrGeo but code will be simpler as for example:

Code: Select all

../..
100 timesRepeat: [
    avatar goUp
    4 timesRepeat: [
        10 timesRepeat: [avatar dropBrick; moveForward].
        avatar turnLeft] ]
The trickier code to write is likely the communication part with the server, I am not much used to that. The DSL part should be easier.
I am still exploring the feasibility, though.

Re: Client for kids programming

Posted: Thu Jan 16, 2020 13:30
by hilaire
rubenwardy wrote: Minetest uses a custom protocol over UDP to do networking. This protocol has a higher level and a level level to it. The lower level deals with channels and reliability, the higher level deals with comands like "set this node" or "move to this position".
Hi,

I try to figure out the content of the inital datagram to send to my server (a localhost instance).
So far, reading the code bellow (by the way the link in the wiki should be changed from src/client.cpp to src/client/client.cpp):

Code: Select all

void Client::sendInit(const std::string &playerName)
{
	NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size()));

	// we don't support network compression yet
	u16 supp_comp_modes = NETPROTO_COMPRESSION_NONE;

	pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u16) supp_comp_modes;
	pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX;
	pkt << playerName;

	Send(&pkt);
}
I send to the server the following datagram, built has:

- 1 byte: 2 "TOSERVER_INIT"
- 1 byte: 28 "SER_FMT_VER_HIGHEST_READ"
- 2 bytes: 0 "NETPROTO_COMPRESSION_NONE"
- 2 bytes: 37 "CLIENT_PROTOCOL_VERSION_MIN"
- 2 bytes: 38 "LATEST_PROTOCOL_VERSION"
- a byte sequence null terminated "Player name"

The server does not respond back. Am I missing something in this datagram?

Thanks

Re: Client for kids programming

Posted: Sat Jan 18, 2020 21:02
by hilaire
Any tips, even minimal, could be useful.
hilaire wrote:I send to the server the following datagram, built has:

- 1 byte: 2 "TOSERVER_INIT"
- 1 byte: 28 "SER_FMT_VER_HIGHEST_READ"
- 2 bytes: 0 "NETPROTO_COMPRESSION_NONE"
- 2 bytes: 37 "CLIENT_PROTOCOL_VERSION_MIN"
- 2 bytes: 38 "LATEST_PROTOCOL_VERSION"
- a byte sequence null terminated "Player name"

The server does not respond back. Am I missing something in this datagram?

Thanks

Re: Client for kids programming

Posted: Sat Jan 18, 2020 21:31
by Krock
The connection must be initialized first to make sure it's really the correct protocol:
https://github.com/minetest/minetest/bl ... txt#L8-L23

Re: Client for kids programming

Posted: Sun Jan 19, 2020 00:03
by texmex
Sounds like you’re looking for this: https://github.com/miney-py/mineysocket

Re: Client for kids programming

Posted: Sun Jan 19, 2020 17:55
by hilaire
@texmex, @Krock, tanks for the tips they look like valuable information I will use.

Re: Client for kids programming

Posted: Tue May 05, 2020 03:31
by acs
I am in a project in which the goal is to teach technology to kids (https://www.juntosdesdecasa.com/, Spanish). One of the workshops is about programming with Minecraft for kids, and for that, we are using Python and the Raspberry API created some years ago .

Luckly, Minetest has support for this API with the mod raspberryjammod pointed out by Sokomine. And this mod works in Minetest 5.1 (I have not tested it yet in 5.2).

With it, you can develop in Python and create things inside minetest in a pretty easy way. I am working in a project called McThings originally created for Minecraft, but that works out of then box with Minetest. Some Jupyter notebooks with samples. My goal is to have a framework for creating easily scenes inside Minetest based on already existing things. And the final goal is to teach kids programming with the motivation of doing it inside minetest/minecraft.

I hope it helps.

Re: Client for kids programming

Posted: Mon Jan 11, 2021 19:27
by Miney
texmex wrote:
Sun Jan 19, 2020 00:03
Sounds like you’re looking for this: https://github.com/miney-py/mineysocket
Hi, i'm the developer of Miney ( https://miney.readthedocs.io/en/latest/ ) and the mineysocket mod.

Miney will be the exact thing you are looking for.

The reason you don't hear about miney in the forum is, that i don't see it as stable and complete, as i wish. So i don't promoted it, until i feel ready.
I'm currently prepairing the release of version 0.3, that will have many changes in the API and many new feature (can be previewed in the dev branch). That will be the first version, that could be near a stable version, but i don't pressure myself.
The goal is to provide a well documented, pythonic and easy accessible API to minetest for Python.

I've just created a discord channel to get in touch with me: https://discord.gg/jCzZ7qs6ZT