WEBVTT

00:00.000 --> 00:13.680
Hello, welcome. This is Ada Botz, the award-winning system for connecting a bot inside a

00:13.680 --> 00:19.600
voxel world with a real integrated development environment. We use this for teaching. I use

00:19.600 --> 00:25.080
this in my household for teaching our children, but it's also excellent for teaching adults,

00:25.080 --> 00:32.040
anyone who wants to learn Ada. I can of course highly recommend it. So what is Ada Botz?

00:32.040 --> 00:40.520
It is programmable bots in a voxel world. Originally it was using minecraft, but then I switched

00:40.520 --> 00:48.360
to using mine test, which is now rebranded to Lewante because it's open source. It is programming

00:48.360 --> 00:55.800
with Ada Botz is visual 3D problem solving. You encounter something in that world with your

00:55.800 --> 01:01.880
children, with your students, and then you try to think about programmatic solutions to that.

01:01.880 --> 01:07.480
Like you get stuck in somewhere down deep where you can't get out, you can get your bot to build

01:07.480 --> 01:14.440
staircase up and walk out. If you maybe your child wants to build a house, you can do that.

01:14.680 --> 01:19.320
Anything you can imagine, you can use as a programming challenge for your children.

01:20.920 --> 01:27.560
It's also real software development. As in, you connect these bots to a real IDE running a debugger

01:28.360 --> 01:35.400
with Git version control. It's not like visual dragon drop things. It's real code.

01:36.360 --> 01:44.840
So my teaching goals here is first of all, I want to do this because I got frustrated with

01:44.840 --> 01:49.800
there's so many systems out there for teaching children how to code that actually teach you

01:51.320 --> 01:58.360
a very specific domain, specific language, and you then have to translate your skills into

01:58.440 --> 02:05.960
real programming once you want to do that. What I also have found frustrating about other

02:05.960 --> 02:11.000
systems is that they were often this world garden where you kind of had to trust someone,

02:11.000 --> 02:17.480
someone on their word that they're not going to, you know, kind of rug pull or increase the price

02:17.480 --> 02:23.720
on a close source project. So I wanted from the beginning to build all this up as open source

02:23.800 --> 02:32.120
components so that the community can help and so that you can be, you can rest assured that

02:32.120 --> 02:37.000
the system will still be working the same way five years down the line, ten years down the line.

02:38.520 --> 02:46.360
You can free them is important to me, also inside of adabots. So inside Luanti, you have your own

02:46.440 --> 02:54.840
private server, you can walk around and do anything you like to do. I also really wanted to make

02:54.840 --> 03:00.040
an environment I could feel comfortable with my children interacting with. So I didn't want

03:00.040 --> 03:07.400
something with a bit glorified violence. I didn't want the focus to immediately be on you're

03:07.400 --> 03:14.520
going to be making a game. I wanted to have more freedom to allow the child to learn a real

03:14.520 --> 03:22.680
program in language and then start applying it to real problems. I also, as a parent who homeschools,

03:22.680 --> 03:27.640
I also realize it's really important to have a system that you just open it up, you just go to

03:27.640 --> 03:34.520
the website and you don't, you don't have to do all of the setup yourself as a user. So it's a

03:34.520 --> 03:43.400
plugin play system. Thanks to having a code editor in the works inside your browser and also a

03:43.400 --> 03:50.760
Luanti client that works inside your browser. That's the introduction of what adabots is. I'm going

03:50.760 --> 03:56.440
to go into a little bit of background where did I come from? How did I come to these ideas? And then

03:56.440 --> 04:02.120
I'm going to show you a demo and then I'm going to talk more about the principles and of course

04:02.120 --> 04:08.040
why I chose ADA as a programming language for this and finally a roadmap of things to come.

04:09.960 --> 04:17.240
This is me when I was eight. I was coding, well, I wasn't coding here. That came later.

04:17.880 --> 04:23.080
But I love that powerful feeling of entering a command into a dust terminal and just seeing it

04:23.080 --> 04:29.240
instantly executed. This wouldn't have been possible if it wasn't for my father knowing what these

04:29.240 --> 04:41.800
commands meant. Later on when we got Linux and it came on a CD was great and my mother showed

04:41.800 --> 04:47.240
me more of that. So I was very privileged to have two parents with a lot of technical background.

04:50.440 --> 04:57.080
Years later, fast forward to our meeting major and my brother and I were really doing

04:57.080 --> 05:04.440
our best to waste our afternoon. We had a Minecraft server and we loaded this mod called computer

05:04.440 --> 05:14.440
craft on it and it makes these bots inside the world and they can move around and they can place blocks

05:14.440 --> 05:23.160
and they can mine and before long we weren't doing anything by hand anymore because you know why

05:23.240 --> 05:28.840
go through all that arduous process and going down into the mines and mining things and placing blocks

05:28.840 --> 05:35.960
when you could just write one program and then go to sleep, log off in an hour or the next morning

05:35.960 --> 05:42.360
you come back and the whole structure is built. So here we have a maze built here and if you were

05:42.360 --> 05:48.520
at fall STEM two years ago you might have seen some of these mazes because then we had a stand

05:48.520 --> 05:54.040
and we challenged people a lot of children came through as well and we're challenged to get

05:54.040 --> 06:00.120
their bot outside of the maze and you could win a little prize for that. But one thing I really

06:00.120 --> 06:04.920
didn't like about computer craft and still don't like about computer craft is the interface to

06:04.920 --> 06:12.520
programming. So this is how I was programming these bots. You have just this text,

06:12.920 --> 06:22.040
Lua code which it does duct typing so it's not strict at all it doesn't check anything for you.

06:22.840 --> 06:26.280
You just have to make sure that you know what you're doing and you have to scroll around

06:26.280 --> 06:32.600
in this little window inside the game of Minecraft and I thought well how can I improve that you know

06:32.600 --> 06:42.280
it's really difficult being a Minecraft mod where you had to edit jar files in there and

06:42.600 --> 06:54.600
this is already very good for what it is. But a few years later I was at 80 Europe and I was able to

06:54.600 --> 07:02.280
participate in a remote IO tutorial by my fellow months and this is a great software project that

07:02.280 --> 07:07.880
solves a kind of similar problem at least I realized I could apply his solution to my domain.

07:08.840 --> 07:14.360
His problem was he does does a lot of embedded programming and you have this chip that you want

07:14.360 --> 07:19.880
to run your program on. But first of all you have to cross compile and then upload to the board

07:19.880 --> 07:24.920
and then if you want to debug you actually have to connect two little wires to the j tag and it's

07:24.920 --> 07:34.440
really complicated to do that. So what Philip thought of and what I'm calling fetch evaluate execute loop

07:34.440 --> 07:40.760
kind of like a repal it's like a repal but it's two different systems. So you have on the board

07:40.760 --> 07:45.960
you have just this super simple little program that's just asking for instruction and then executing

07:45.960 --> 07:54.120
it and then sending back over the in this case over USB and paint line onto the computer

07:55.320 --> 08:00.120
and then on the computer you can have your whole dev environment including a debugger and you can

08:00.760 --> 08:07.320
you don't need to build anything for specifically debugging on the chip. So yeah check out Libs

08:07.320 --> 08:15.800
simple IO if you want to do IO programming in ADA because it makes it a lot easier you can also

08:15.800 --> 08:22.840
take the same program and just compile it with a different implementation back end and upload the

08:22.840 --> 08:29.320
same program to the board itself so that so for development you have a quick cycle where you

08:29.400 --> 08:35.720
can just edit and run but then you can use the same code to deploy. So I realized that

08:36.840 --> 08:47.480
I could do exactly the same in the empty. I also realized I weed my dependence on Microsoft products

08:47.480 --> 08:53.960
a little bit by moving to an open source lightweight C++ clone of Minecraft.

08:54.680 --> 09:02.120
Um, I'm not getting any dirty looks oh maybe one there's a little anti developer in here

09:02.120 --> 09:10.360
and they are not a Minecraft clone. They're a voxel engine but neat thing is it's so lightweight

09:10.360 --> 09:16.600
I'm able to actually compile it for the web and so if you go to adabots.net you don't have to do any

09:16.600 --> 09:22.040
of the setup because automatically in the background a Docker image spins up with your

09:22.040 --> 09:30.680
mind test server in it and in your browser you can have a mind test client. Sorry for saying

09:30.680 --> 09:36.520
mind test so much it's lo empty. It just changed its name this year so anyway so this is the

09:36.520 --> 09:41.560
architecture we have a server running and that contains bots and those are doing this little

09:41.560 --> 09:48.760
fetch evaluate execute loop and then you have a client that connects to that to look around in the

09:49.320 --> 09:55.640
world and on a to about something that you can have one for each child as you like and then you

09:55.640 --> 10:01.880
have your code edits are running on your own machine that compiles a program that runs on your own

10:01.880 --> 10:10.120
machine which sends these instructions to the bot. Anyway what it makes for because the children don't

10:10.120 --> 10:15.160
understand all of this architecture behind it of course but what they understand is that here's a

10:15.160 --> 10:20.360
fun entertaining world where they can all log in and they can see what they're doing and each one

10:20.360 --> 10:28.440
can be doing their own tasks and so here's a bot next to a tree that has just been cut down and that

10:28.440 --> 10:34.200
that's a simple you know check if there's wood in front if so mine it and go forward and then

10:34.200 --> 10:41.640
start a loop going up as long as you can mine a block above you then mine it and go up so that you

10:41.640 --> 10:49.480
know take out the whole tree and yeah I'll I'll I'll show an an actual demo that's

10:50.600 --> 10:55.400
better than just explaining it so if you sign up on a to bots.net give me some of your money

10:56.520 --> 11:02.360
it's an open source project okay but what we do is software as service really we

11:03.240 --> 11:09.480
set it all up for you if you sign up on a to bots.net you get in the middle here a

11:09.800 --> 11:15.480
you can add as many students as you like and you get two buttons one to open of the

11:15.480 --> 11:21.720
mind-test world and that opens in your browser and the other one for VS Code web which also opens

11:21.720 --> 11:28.600
in your browser and they're connected to each other so here's an empty program shell here and we're

11:28.600 --> 11:35.720
going to run through a non-trivial program without pressing any of the buttons which is just for

11:35.720 --> 11:41.560
introducing the child to what the bot can do you can just press the buttons so that in that way

11:41.560 --> 11:46.040
I can start already when there are five years old just understanding the concepts of what we're

11:46.040 --> 11:51.560
going to do of course you need to wait until they can read and write and type before you do this

11:52.440 --> 11:58.120
so let's build a bridge that one doesn't work but okay this is the bridge we're going to

11:58.520 --> 12:03.320
be building first we're going to place a block we're going to go up and then forward and we're

12:03.320 --> 12:08.760
going to do that in the loop and you can see that that will make a staircase if we put that in the loop

12:09.320 --> 12:14.840
but we only want to do it three times because if you just to loop that'll be infinite so we put in

12:14.840 --> 12:22.040
four i in one dot dot three then we're going to build the the flat part of the bridge like this

12:23.480 --> 12:29.240
again a loop just two instructions in there and when we get to the end we're going to go down and

12:29.240 --> 12:37.080
note that we'd go for one one to two because otherwise the the floor is already already made there

12:39.240 --> 12:44.040
this entire thing we're just going to give it a name we're going to put it in a procedure

12:44.040 --> 12:49.000
called pass that's one pass over the bridge and then what we're going to do is

12:50.760 --> 12:56.600
we'll line up for a second pass next to it so we'll go forward we'll go down we'll turn left

12:56.600 --> 13:03.400
we'll go forward we'll go left and now we're set up to do another pass I'll skip over that

13:05.880 --> 13:09.880
so now we've done a second pass we're going to line up and we're going to make some barriers on

13:09.880 --> 13:15.400
the side so that you can't fall off the side so easily and again we're going to

13:15.720 --> 13:26.360
you okay you can kind of see it moved around it's just shifted over to the left and up one

13:28.360 --> 13:35.080
okay and if you do another pass on top then we've got our barrier and all the time when you're doing this

13:35.080 --> 13:39.720
you can just comment the code that you've already run and you can press and buttons with your child

13:39.720 --> 13:45.640
as you write the things in the code to explain what you're adding but at the end of it you have a

13:45.640 --> 13:56.600
program that does the entire yeah it does the entire bridge in one go so you can

13:58.360 --> 14:05.800
I'll I'll quickly go through why we chose Ada it's a strict it's a very a type safe language

14:06.760 --> 14:14.680
it's high level it's you know it's tried and tested I have vehicle from from 81 and it's still

14:14.680 --> 14:20.280
runs that means it was built right and it's the same with Ada you know the latest standard is from 2022

14:21.160 --> 14:27.720
but there's so much materials around and it's got so many of the basic principles right from the start

14:27.720 --> 14:33.880
like being case insensitive it's it's a no-brainer having words for everything instead of curly

14:33.960 --> 14:41.320
braces that helps a lot in teaching because the case insensitive every child when they first write their

14:41.320 --> 14:47.800
program they write it not caring about the casing every time and it just works in Ada

14:50.920 --> 14:55.080
I've already talked about this so I'm just quickly going over but I'll just say that children don't

14:55.080 --> 15:01.480
like to be coddled they they want to to really be a software developer so we let them do that

15:01.800 --> 15:07.400
so we made the safe environment for your children where you can learn it's plug and play

15:09.000 --> 15:15.640
and we have a lot coming so I'm just going to open it up to questions since we only have a few minutes left

15:16.520 --> 15:23.320
yes so you mentioned that this is a real so basically the way I understood that is that the

15:23.320 --> 15:29.720
cold runs outside of the Microsoft server and it impacts probably like a lua of very simple

15:29.720 --> 15:38.520
that just receives from us and can the plot into like detect on a per se if it's environment

15:38.520 --> 15:44.440
because I've worked on like what's the front inside of the client so it's for like a cheating on

15:44.440 --> 15:51.960
server that I know it so basically they they're able to like look at what's around them and then

15:51.960 --> 15:59.800
react to that yeah I think that would probably be like beneficial for this project and one thing

15:59.800 --> 16:08.120
I'm wondering about is if you think that the if they can interact or if they can perceive the environment

16:09.800 --> 16:17.640
do you think that this sort of like remote model will be a performance enough to allow for like

16:17.720 --> 16:23.160
context thoughts because working and I've not given just like between like C++ and lua

16:23.160 --> 16:27.800
crossing the boundary for every block that you want let me just repeat your first question first

16:27.800 --> 16:34.040
can the bots perceive the world yes they can they can look in the same spots there's they can

16:34.040 --> 16:41.160
dig and they can place okay so it's very limited yeah right now it is it's actually on the road map

16:41.160 --> 16:48.760
to right there third point is to actually see players and see a long way away and I have an idea

16:48.760 --> 16:54.840
in mind of an expanding cone of nodes that it is able to see so it can look through air and water

16:54.840 --> 17:01.400
but not anything else and then it just returns a list of all the objects it your program does get

17:01.400 --> 17:07.480
very complicated very fast but of course I mean we we envision this also being used for adult students

17:07.640 --> 17:15.800
universities in in high schools I'll also give you here a promo code if you're one of the

17:15.800 --> 17:20.920
200 first people to sign up this one isn't on the online version of the slides but it's

17:20.920 --> 17:33.000
fast in 25 gives you 25% off your first year and also yeah I'll just say this because the video

17:33.080 --> 17:39.160
isn't loading but my children had a great idea after rebuild a spiral staircase and they kept

17:39.160 --> 17:45.160
falling off in the middle of the staircase I said let's build blocks there and they had already

17:45.160 --> 17:50.360
seen how complicated it gets when you build because you have to walk backwards as you build

17:50.360 --> 17:56.200
above below an in front in order to not run into your own blocks right so they said how about

17:56.200 --> 18:01.480
we just have four blocks simultaneously dropping sand below and that's perfectly possible and

18:02.360 --> 18:10.840
that's in the video here there's four blocks next to each other so your program can address

18:10.840 --> 18:26.920
multiple bots simultaneously using tasking in Ada any other questions and thank you

18:31.480 --> 18:33.480
you

