So far everything we've done has been just in the interface tab and the problem is that when we write all those commands in the command centre and then we close NetLogo, as you may have found out, when you come back in it's no longer there and you no longer have those commands. So what we need to do is start editing in the code tab, which is where we can then save the results into a model file so the code that we're writing will be preserved... for when we want to modify it again in the future. So let's click on the code tab. The code tab is where, as you might expect, we actually write the code. What we do is define procedures. Procedures are like new commands for the NetLogo model. There are two procedures that we almost always define right off the bat, they are the same as the two buttons you see in almost every NetLogo model, setup and go. You define a procedure by starting with the word 'to' and then you write the name of the procedure ('to setup') and then when you're done with the procedure you write the word 'end'. So I'm going to go ahead and put stubs in for our setup and go procedures. And as you can see, NetLogo automatically indents you a couple of spaces, this is standard NetLogo style to indent a little bit each procedure or sub-piece of code. That way it makes it easier to see when the format is changing. One of the first things you always write in the setup procedure... is the 'clear-all' command, or you can abbreviate it to 'ca' if you want, and what that does is destroy the model state as we talked about, and start the model all over again. And then, once you have the model state changed back to the initial state, now I can go ahead and start writing my model, because I know the world is blank. So I can do that, for instance, by creating a group of new turtles, 'crt 100' and one thing that we could do within that, that we haven't talked about before, is immediately ask those turtles to do something. So I can put these square brackets right after the 'create-turtles' command and that's as if you're putting an implicit 'ask' to the turtles I just created. So, for instance, I could ask them to set their xy coordinates to random values 'setxy random-xcor random-ycor' I could also ask them to change their color, for instance, to blue 'set color blue' and I can have them change their shape. We haven't talked about this yet, but NetLogo comes with a wide variety of shapes that you can use for your turtles, the standard triangle you've been seeing is the default shape, but if you go up to the 'tools' menu, and then go down to 'turtle shapes' editor you can see a bunch of other shapes that exist within the system. One that I often use is the 'person' shape, so you can set the shape to 'person' 'set shape "person"' And now that I've written this code, I can hit the 'check' tab and what the 'check' tab will do is check to see if there are any syntax errors. Right now there are not... but let's say I forgot the hyphen in 'random-xcor', it would tell me that the command, 'RANDOMXCOR', doesn't exist, and then I might be 'oh yes, there needs to be a hyphen there', and once I put it back in, it's OK. So that allows me now to create my basic first command, and if I go back to the interface tab now I can type 'setup'... and there you go - I have 100 little people scattered throughout the world. Now unlike the triangles shapes, the people do not have a particular direction, so they're always facing up, even though they are actually facing different directions it's just the objects themselves are what NetLogo calls non-rotatable, they just stay upright in this particular context. That could be fine, it's up to you as to what kind of shapes you want, if you wanted to change that for some reason, you can go to the turtle shapes editor, go down to "person" hit 'edit', and make them rotatable. That will allow them to take on a particular heading. But let's leave it as it is for now. So we have a setup procedure, let's write our go procedure, and we'll just write a simple command, ask turtles forward 5 right random 90 degrees 'ask turtles [ fd 5 rt random 90 ]' and now, if we go back to the interface tab, we can type 'setup'... and then 'go', 'go', 'go', and we can see them moving. If you want to see them moving a little bit, you can run the speed slider down... and you can see them actually moving around a little bit more. Now once we've created these two commands, setup and go we probably want to interact with them more directly through the interface tab, rather than typing 'setup' and 'go' all the time, and we can do that by creating two new buttons in the interface tab, which we talked about before. When we create a button we have to specify what command it is going to execute. So in this case we want one button that is going to execute setup, and we want one button that executes go. So now if we hit setup and go we keep running the commands. Now one small note. You can right-click or control-click to pull up 'edit' on a button, I could give the button a different display name from the command that's executed, so this could be 'My cool go', and that's what it will say, even though it's still executing the command 'go'. If you don't put anything for the display name it will just use the command as the name. There's also a button here called Forever What Forever does is say 'keep executing this command until I push the button again' So if I hit setup now, and then I hit go you'll see it just keeps running, and then when I hit go again it stops. At this point you probably want to save your model, so go up to the 'file' menu and pick 'save', and then you can give your model a name. So I'm going to go to my desktop, and call the model 'my-first-model.nlogo'. And you might also want to start updating the info tab at the same time, to explain what going on, so this is 'my first model to explore Netlogo'. The reason why you want to update the info tab is because you want to make sure... that you always have documentation that matches up with the model. One other small note, as you continue to do this, you might start to do things like 'my first model to explore NetLogo version 1' and then when you make some major changes you might want to save the new model as 'my-first-model-1' or '...-2', this allows you to keep old versions that you have around, of course you could also use a more sophisticated version control system like svn or git or something like that as well. That's a basic introduction to how to write code in NetLogo. In the next talk we're going to discuss how to define properties within the code tab that you can then use within your model.