Learn How to Program Computers with Jujitsu University Note that Jujitsu University does not teach you Jujitsu, nor is it an accredited university. This guide is designed for people with no education in anything at all. No programming knowledge, no maths skills, no accounting, geography, history, nothing. After following these steps you will have an understanding of how computers actually work, which is more than many university graduates (in non-scientific subjects) have. Note that this document would ideally be used by a teacher, who presents just a bit at a time to the student, and then watches the student experiment with the new knowledge/concepts. This document was written by Paul Edwards and is released to the public domain. To convert this document into a language you understand, you can use http://translate.google.com/ BEFORE we can begin, the following is required: Someone with some basic computer skills needs to set your computer up. You need to have basic computer skills yourself so that you know how to use the mouse etc. Acquiring the skills required for the above tasks is beyond the scope of this document. Here is what is required for your computer to be set up: Create a folder somewhere on your PC, e.g. c:\learnp Download the following software and save it into that folder: http://sourceforge.net/projects/bwbasic/files/bwbasic/version%203.00/bwbasic.exe/download That completes the setup. NOW WE CAN START. Open a command prompt window. On some computers you can do this by going start, programs, accessories, command prompt. On other computers you can hold down the "Windows" key and press the letter "r" and then type in "cmd". The person who set up your computer should tell you how to do this. Go to the directory (folder) that was previously created, e.g. by using the following command sequence: c: cd \learnp Your screen should look something like this: C:\Users\Paul>c: C:\Users\Paul>cd \learnp C:\learnp> Type in the following command: dir And see if you can see if you can see a file called bwbasic.exe. You should see something like this: C:\learnp>dir Volume in drive C is OS Volume Serial Number is DE22-8195 Directory of C:\learnp 2015-05-31 15:12 . 2015-05-31 15:12 .. 2015-05-12 21:41 278,528 bwbasic.exe 1 File(s) 278,528 bytes 2 Dir(s) 53,421,408,256 bytes free C:\learnp> If you do not see such a file, then your computer has not been set up properly and you cannot continue. Now type in the following: bwbasic It should display the following: C:\learnp>bwbasic ######## ## ## ## ## ### ######## ######## ######## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ######## ## ## ## ## ## ## ## ###### ######## ## ## ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######## ## ### ### ## ## ## ######## ## ## ######## ### ###### #### ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ######## ## ## ###### ## ## ## ## ######### ## ## ## ## ## ## ## ## ## ## ## ## ######## ## ## ###### #### ###### Bywater BASIC Interpreter, version 3.00 Copyright (c) 1993, Ted A. Campbell Copyright (c) 1995-1997, Jon B. Volkoff Copyright (c) 2014-2015, Howard Wulf, AF5NE bwBASIC: type in the following: bwBASIC: print "hello" When you hit enter, it should respond like this: bwBASIC: print "hello" hello See how it printed the word "hello" on the screen? This is how computers work. All computer programming is about giving some commands/instructions to the computer and then the computer goes and does it. The command we are using here is "print". The word has a meaning in the English language, which is to use a machine to write something in ink on a piece of paper. That is the printing process. When we use the computer we do something similar to the printing process. But instead of printing on paper, we want the word to appear on the computer screen. You can see that we have been successful in achieving that. Look carefully at the command: print "hello" See how it has double-quotes (") around the word? That is just the way the command works. It doesn't really matter why it was designed that way. You just have to know the rules. And this is the rule - always put what you want printed, inside two double-quotes. If you forget to put double-quotes, look what happens: bwBASIC: print hello 0 Try that out yourself. Leave out the quotes and you can see that it doesn't display the word "hello" at all! It instead displays something quite different - the number 0! Definitely not what we wanted! It doesn't really matter why the computer works this way. You just have to remember the rule - always use double-quotes. Computers require the rule to be followed EXACTLY all the time. Any small mistake and the computer will get confused, and print something very strange. Even stranger than the number 0. Let's look at another example: bwBASIC: print "hello there" hello there bwBASIC: print hello there ERROR in line 1: in bwb_exp(): incomplete expression. STACK TRACE: 1:print hello there bwBASIC: You can see that if you remember to put double-quotes, it prints what you were expecting, ie the two words - "hello there". But if you leave out the double-quotes, you instead get something very strange indeed. That is called an "error message". Every time you make a mistake when doing computer programming, either something strange happens (like the number "0" being printed), or you get an error message. Look closely at the error message: ERROR: in bwb_exp(): incomplete expression. Do you understand what the error message means? No. You do not. Nobody knows. Not even a computer programmer knows what that means. That happens a lot in computers. The computer gets VERY confused when you make a mistake, and prints something very strange. So 90% of the time, do not bother reading the error message. You will never understand it. Even after many years of computer programming, you will still not understand it. If the message said "you forgot to put double-quotes", then it would be useful to you, and you could fix your mistake. But this is the difference between computers and humans. Humans (at least, ones who know how to program computers) can look at this: print hello there and see immediately "oh, you forgot the double-quotes". But computers are basically really really dumb. They normally cannot guess what you have done wrong. They just generate a strange error message, or do something strange, and give up. Actually, they don't always give up. Sometimes they will go into a loop, repeating the same thing again and again, and you need to reboot (or switch off) your computer to stop the program. Do not be concerned about why this happens. All you need to remember is that computers are very simple and cannot help you if you do something wrong. You will need to find the mistake yourself, and you need to follow the rules exactly, otherwise you cannot continue. Let's try some other things with the "print" command. Try this: bwBASIC: print 4+7 11 You can see that the computer knows how to add up already if you ask it to do so. Try this: bwBASIC: print "one","two","three" one two three This time, instead of giving the "print" command just one thing to print, we gave it a list of 3 things to print. It is possible to give the "print" command a list, by using the comma (,) to separate things in the list. But note how the computer printed the list. It put a lot of space between the things in the list. So that's just another rule to learn - when you print a list of things, there is a lot of space between them, which is probably not very useful. Now try this: bwBASIC: print "one"+"two" + "three" onetwothree Here we use the "+" between items to print. And you can see that what "+" does is join the items together, and you can see that this time there is no space at all between the items, instead of lots of space. Even if you put a space on the left and the right of the "+" sign it doesn't make any difference - no space is printed. So what do we do if we want a space? It is now that you really begin programming. It is questions like this that programmers face all the time, and need to come up with a solution themselves. See these possible solutions: bwBASIC: print "one "+"two" one two bwBASIC: print "one"+" two" one two bwBASIC: print "one" + " " + "two" one two Of course you could simply have typed in: bwBASIC: print "one two" Later on (when "variables" are introduced), you will see why we didn't use that simple solution. And that's enough of the print command, although you should probably try the command some more times to make sure you understand it well. You now need to type "quit", which just means that you have finished executing commands: bwBASIC: quit C:\learnp> This puts you back to the command prompt. You can now type "exit" to end the command prompt. C:\learnp>exit Now let's put the knowledge we have gained so far, and create a real program. A program is simply many commands put together in a single place, instead of executing them one at a time. So start notepad, by (on older computers) going start, programs, accessories, notepad. On modern computers try doing Windows + R and typing "notepad". Now type in the following: print "hello" print "to everyone" print "one","two" end Save your file as c:\learnp\myprog.txt Open the command prompt again, go to c:\learnp again (remember from before, the commands are "c:" and "cd \learnp"), and confirm that you can see the file, by typing the "dir" command again: C:\learnp>dir Volume in drive C is OS Volume Serial Number is DE22-8195 Directory of C:\learnp 2015-05-31 15:19 . 2015-05-31 15:19 .. 2015-05-12 21:41 278,528 bwbasic.exe 2015-05-31 15:19 60 myprog.txt 2 File(s) 278,588 bytes 2 Dir(s) 53,420,306,432 bytes free C:\learnp> You can verify the contents of the file by going: C:\learnp>type myprog.txt print "hello" print "to everyone" print "one","two" end C:\learnp> now type in: C:\learnp>bwbasic myprog.txt hello to everyone one two C:\learnp> If you typed the program in without mistake, you should be able to see the above. This is exactly what we expected, given the commands that we put into the program. These are basically the same sort of commands we were typing in before, and we saw the result of them before. When you put it into a program, you should expect the exact same thing to happen. And we do see that! You can ignore the Copyright/header messages. They always come up. If you made a mistake, like this: C:\learnp>type myprog.txt print "hello" prin "to everyone" print "one","two" end (you can see that on the second line, we have mistyped "prin" instead of "print"). Then when you go to run the program, you get an error message: C:\learnp>bwbasic myprog.txt ILLEGAL COMMAND AFTER LINE NUMBER: 2 prin "to everyone" (you can see the error message above - the computer gets very confused about that second line. It is not smart enough to see that you left out the letter "t" even though it is so clear to a human) You should practice making a mistake like the above, so that you are familiar with how to recover from that situation. Ok, let's open your program in notepad and change it so that it looks like this: C:\learnp>type myprog.txt print "start" print "please type your name" input x$ print x$ print x$ print x$ end Here we have introduced a new command, called "input". "input" means that you want the user (you, in this case), to type in something, e.g. the answer to a question. You can see that we're going to print out the message "please type your name". This lets the user know what the program is expecting them to type (ie, their name). Let's look at that command more closely. input x$ So there is the command, ie "input", and something else, called "x$". This may look quite strange. The "x$" is called a VARIABLE, and this is very very important in programming. You see, it is necessary for the computer to be able to work for EVERYONE, regardless of what their name is. But the only way we can know what someone's name is, is by asking them. Then we need to store that answer somewhere. The place where we store it is called a variable. We may need to store lots of different information. E.g. not just someone's name, but also their telephone number. So we create two variables, one for the name, and one for the phone number. It is not important what these names are. The names could be first_name$ and phone_number$. Or x$ and y$. In the example I used x$, but it is more usual to make the name more meaningful, so that you can remember what it is used for. Most programs have lots and lots of variables, so it is necessary to give them good, descriptive names. But this program is simple, so x$ is good enough. The variable name ends with a "$" sign to let the computer know that we are expecting an answer made of characters, e.g. "John", instead of an answer that is just a number, like 78. If the answer is a number, like "how many children do you have?", then you would not put a "$". You would just put x. Or num_children. But there's no need to worry about that for now. For now it is enough to know that we need to put a "$" as the last character of the variable name. So what we're expecting to happen when the line: input x$ is executed, is for the computer to allow you to type an answer, e.g. maybe your name is John, and for those 4 letters to be stored together in the variable called x$ so that we can later do something with x$. A very simple thing we might do with x$ is to simply print it out. And that is exactly what we do on the next line! print x$ Notice how we didn't use double quotes. Ie we didn't say print "x$". Previously we said that you should always use double-quotes, otherwise it won't work. You'll get an error or a strange result. But this is an exception. If you put just a variable name by itself, the computer (ie the print command) knows that you want to print the CONTENTS of that variable. Ie the name you stored previously. E.g. the 4-letter word "John" might have been stored previously. So this command is just telling the computer that we want "John" printed on the screen. We have this exact same command 2 more times, ie the next lines are: print x$ print x$ That's a total of 3 lines all with the exact same thing on it. So what does that mean? Simple! We want to print the user's name 3 times. Let's run the program now, so that we can see it in action! C:\learnp>bwbasic myprog.txt start please type your name ? See what has happened. We had a print command for "start", so we see "start" printed on the screen. We had a print command asking the user to type in their name, and we can see that on the screen too. What you weren't expecting was to see a "?". That is just a feature of the computer (programming language). Whenever the computer sees "input" it automatically realizes that it needs some information from the user of the computer. Rather than just be quiet and wait for the user to start typing something, it is instead noisy, and says "I have a question for you - I am waiting for you now". Other programming languages (there's a huge list available here: http://www.99-bottles-of-beer.net/) do not print that "?", but this one does. In the same way that humans have many different languages in the world, like English, Chinese, Spanish, French - computers have many different languages too. So this language (called "Basic") sees the word "input" and automatically prints "?" to try to encourage the user to start typing something. It has no idea what the user is going to type, and it has no idea what the programmer is expecting the user to type. The only thing it knows is that the answer needs to go into x$. So now it is time for the user (you) to answer the question that the computer is trying to ask (because of your program). Let's say your name is "Elizabeth", not "John". Let's see what happens: C:\learnp>bwbasic myprog.txt start please type your name ? Elizabeth Elizabeth Elizabeth Elizabeth C:\learnp> As you can see, the name "Elizabeth" is printed out 3 times (after you type it in once). This is exactly what we were expecting. Try it with your own name and it should all work fine. Let's now add another line to your program. Just before the "end" type in: print "i think " + x$ + " is a great name" You have previously seen how we joined together items in a list, such as "one" and "two", to make "onetwo". This time we are doing something a bit different. One of the items in the list is the variable name we used before - x$. So just as before, since the variable name does not have double-quotes around it, it means that we want the CONTENTS of that variable used. And how do we want the variable used? We want it combined with the words "i think" on the left, and the words "is a great name" on the right. So what are we expecting as a result? Well, it obviously depends on what the person's name is. But let's say once again that the person's name is "John". We're expecting it to say "i think John is a great name". Let's try it. C:\learnp>type myprog.txt print "start" print "please type your name input x$ print x$ print x$ print x$ print "i think " + x$ + " is a great name" end C:\learnp>bwbasic myprog.txt start please type your name ? Mary Mary Mary Mary i think Mary is a great name C:\learnp> If you didn't get that result (for your name) then it means you have made a mistake in typing in the new line. You need to look very carefully to see what you have typed wrong. The computer can't tell you what you've done wrong. Only your skill as a programmer can find out what is wrong. Mistakes in computer programs are called "bugs". Trying to find bugs is called "debugging". Now let's introduce a new concept - repetition. You can see that when we wanted the name repeated 3 times, we just typed the command in. But what if we wanted that repeated 10 times instead of 3? Or 10,000 times? It is not practical to type the repeated thing in multiple times. Fortunately there is a way of telling the computer you want something repeated. One way is as follows: C:\learnp>type myprog.txt print "start" print "please type your name" input x$ for y = 1 to 5 print x$ next y print "i think " + x$ + " is a great name" end C:\learnp>bwbasic myprog.txt start please type your name ? john john john john john john i think john is a great name C:\learnp> Can you see how that was done? Here's the relevant code: for y = 1 to 5 print x$ next y It is called a "for loop". In the for loop you use a variable (in this case "y") which starts off having the value "1" and each time around the loop it gets incremented by 1. Let's make that clearer. C:\learnp>type myprog.txt print "start" print "please type your name" input x$ for y = 1 to 5 print y, x$ next y print "i think " + x$ + " is a great name" end C:\learnp>bwbasic myprog.txt start please type your name ? john 1 john 2 john 3 john 4 john 5 john i think john is a great name C:\learnp> You can see the counter ("y") being printed out each time through the loop. That's because of this line within the loop: print y, x$ You can see that we're not just printing the name (x$). We're also printing the loop counter ("y"). Now that we've covered the "for" command, let's introduce another construct - "IF". In English we may say IF your name is John you must be a man. Let's put that exact concept to work: C:\learnp>type myprog.txt print "start" print "please type your name" input x$ if x$ = "john" then print "i think you are a man" elseif x$ = "mary" then print "i think you are a woman" else print "I'm not sure whether you are male or female" end if end C:\learnp>bwbasic myprog.txt start please type your name ? mary i think you are a woman C:\learnp>bwbasic myprog.txt start please type your name ? john i think you are a man C:\learnp>bwbasic myprog.txt start please type your name ? fred I'm not sure whether you are male or female C:\learnp> So you can see from this code: if x$ = "john" then print "i think you are a man" how we are checking the name entered by the user and if it is John, we conclude that it is a man's name. This technique can be repeated to cover many more male names that the program can recognize. We have also introduced the concept of "ELSEIF". If the first "IF" is not satisfied then the computer executes the "ELSEIF" statement, and this structure can be repeated until you have covered all the names you wish to have special coding for. Let's now use the "WHILE" construct. C:\learnp>type myprog.txt print "start" while x$ <> "quit" print "please type your name" input x$ if x$ = "john" then print "i think you are a man" elseif x$ = "mary" then print "i think you are a woman" else print "I'm not sure whether you are male or female" end if wend end C:\learnp>bwbasic myprog.txt start please type your name ? paul I'm not sure whether you are male or female please type your name ? john i think you are a man please type your name ? mary i think you are a woman please type your name ? quit I'm not sure whether you are male or female C:\learnp> See this line: while x$ <> "quit" That says that while the x$ (name) variable is not equal (<>) to the word "quit", execute everything until you hit the "wend". This loop will repeat infinitely until the user types the word "quit". This concludes the basic concepts in the BASIC language. You have now moved from white belt to yellow belt at Jujitsu University: https://en.wikipedia.org/wiki/Rank_in_Judo#Australia People don't write serious software in BASIC, they instead use another language, like "C". Here is that last program converted to C: C:\learnp>type myprog.c #include #include int main(void) { char name[100] = ""; printf("start\n"); while (strcmp(name, "quit") != 0) { printf("please type your name\n"); scanf("%s", name); if (strcmp(name, "john") == 0) { printf("i think you are a man\n"); } else if (strcmp(name, "mary") == 0) { printf("i think you are a woman\n"); } else { printf("I'm not sure whether you are male or female\n"); } } return (0); } C:\learnp> So save the above program as "myprog.c" in the "learnp" directory. Then find someone who knows how to download a C compiler, such as Borland C++ 5.5: http://forms.embarcadero.com/BCC32CompilerDownload Then compile the program like this: C:\learnp>bcc32 myprog.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland myprog.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Here's what is produced after compilation: C:\learnp>dir myprog.exe Volume in drive C has no label. Volume Serial Number is 4ABA-BE3B Directory of C:\learnp 2013-06-16 12:29 66,048 myprog.exe 1 File(s) 66,048 bytes 0 Dir(s) 687,535,136,768 bytes free And to run it, we just type the name: C:\learnp>myprog start please type your name paul I'm not sure whether you are male or female please type your name mary i think you are a woman please type your name john i think you are a man please type your name quit I'm not sure whether you are male or female You can match up virtually every line in the C program to the BASIC version. Note that unlike BASIC, you need to define all the variables you use. So here is the "name" variable being defined as 100 characters in size: char name[100] = ""; Once you understand the above C program, you have moved from yellow belt to orange belt. At this point it is better that you (effectively) switch operating systems, not just language. Instead of programming in BASIC on Windows, we will instead start programming in C on MVS. Even if you end up getting a job as a Unix C programmer, this will ensure that you don't pick up any bad habits like using open() instead of fopen() to open a file. Someone needs to set up your computer first so that you can run MVS/380. You can learn about that operating system at http://mvs380.sourceforge.net Once you have MVS/380 installed properly you should be able to use the "runmvs" command. This uses batch processing instead of interactive, ie you need to put all the answers to the questions in advance. Also the method of compilation is more complicated than just running bcc32 and running the program by name. We instead use a scripting language called "JCL" which is quite primitive. Here is the required JCL to compile and execute the above program: //MVSGCCR JOB CLASS=C,REGION=0K //* //* Compile a C program then run it //* //CCOMP PROC GCCPREF='GCC',PDPPREF='PDPCLIB', // COS1='-Os -S', // COS2='-o dd:out -', // P='' //* //CREATE EXEC PGM=IEFBR14 //DD1 DD DSN=&&LOADLIB,DISP=(,PASS), // DCB=(RECFM=U,LRECL=0,BLKSIZE=6144), // SPACE=(6144,(100,100,44)),UNIT=SYSALLDA //* //COMP EXEC PGM=GCC, // PARM='&COS1 &COS2' //STEPLIB DD DSN=&GCCPREF..LINKLIB,DISP=SHR //INCLUDE DD DSN=&PDPPREF..INCLUDE,DISP=SHR //SYSINCL DD DSN=&PDPPREF..INCLUDE,DISP=SHR //OUT DD DSN=&&TEMP1,DISP=(,PASS),UNIT=SYSALLDA, // DCB=(LRECL=80,BLKSIZE=6160,RECFM=FB), // SPACE=(6160,(500,500)) //SYSIN DD DUMMY //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //* //ASM EXEC PGM=ASMA90, // PARM='DECK,NOLIST', // COND=(4,LT,COMP) //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR,DCB=BLKSIZE=32720 // DD DSN=&PDPPREF..MACLIB,DISP=SHR //SYSUT1 DD UNIT=SYSALLDA,SPACE=(CYL,(20,10)) //SYSUT2 DD UNIT=SYSALLDA,SPACE=(CYL,(20,10)) //SYSUT3 DD UNIT=SYSALLDA,SPACE=(CYL,(2,1)) //SYSPRINT DD SYSOUT=* //SYSLIN DD DUMMY //SYSGO DD DUMMY //SYSPUNCH DD DSN=&&OBJSET,UNIT=SYSALLDA,SPACE=(80,(240,200)), // DISP=(,PASS) //SYSIN DD DSN=&&TEMP1,DISP=(OLD,DELETE) //* //LKED EXEC PGM=IEWL,PARM='MAP,LIST' //SYSLIN DD DSN=&&OBJSET,DISP=(OLD,DELETE) //SYSLIB DD DSN=&PDPPREF..NCALIB,DISP=SHR //SYSLMOD DD DSN=&&LOADLIB(CPROG),DISP=(OLD,PASS) //SYSUT1 DD UNIT=SYSALLDA,SPACE=(CYL,(2,1)) //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //* //EXECC EXEC PGM=CPROG, // PARM='&P', // COND=(0,LT,LKED) //STEPLIB DD DSN=&&LOADLIB,DISP=(OLD,PASS) //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSIN DD DUMMY //* // PEND //* //S1 EXEC CCOMP,P='' //COMP.SYSIN DD DATA,DLM='$$' #include #include int main(void) { char name[100] = ""; printf("start\n"); while (strcmp(name, "quit") != 0) { printf("please type your name\n"); scanf("%s", name); if (strcmp(name, "john") == 0) { printf("i think you are a man\n"); } else if (strcmp(name, "mary") == 0) { printf("i think you are a woman\n"); } else { printf("I'm not sure whether you are male or female\n"); } } return (0); } $$ //* //EXECC.SYSIN DD * paul mary john quit /* //* // Save this as myprog.jcl and then use this command: C:\learnp>runmvs myprog.jcl output.txt Now open output.txt using notepad and you should see the results of running your program near the end. After you have found the expected output, thus you now know how to program on MVS, you move from orange belt to green belt. At this point you need to hone your skills in C, and to some extent JCL. You will hone your C skills by doing some other tutorials from the internet. If you have any problems following the tutorials, you can ask your questions (ie questions about programming in C on MVS) here: https://groups.yahoo.com/neo/groups/hercules-os380/info Note that if a tutorial asks you to open a file called "input.txt" you will instead need to code that as something like "dd:input", and in the JCL you need to create an INPUT DD statement modelled off the SYSIN DD statement. You should now do any C tutorial that you can find on the internet. Here are some examples: https://en.wikibooks.org/wiki/C_Programming https://www.learn-c.org/ http://fresh2refresh.com/c-tutorial-for-beginners/ https://web.archive.org/web/20170218194459/http://www.iu.hio.no/~mark/CTutorial/CTutorial.html https://web.archive.org/web/20160316102327/http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/ None of the above sites are affiliated with Jujitsu University. If you are intested in learning more about the JCL scripting language, you can try reading this IBM manual: http://www.bitsavers.org/pdf/ibm/370/OS_VS2/Release_3.8_1978/GC28-0692-5_OS_VS2_MVS_JCL_Rel_3.8_Apr84.pdf Note that IBM is not affiliated with Jujitsu University either. The above C tutorials are not the definitive definition of the C language. The most definitive (ie as close to the C90 standard aka ISO/IEC 9899:1990 aka ANSI X3.159-1989) version available online is this: https://web.archive.org/web/20160304075258/http://flash-gordon.me.uk/ansi.c.txt Note that neither the ANSI nor ISO C committees are affiliated with Jujitsu University either. After you have gone through the above, or some similar tutorials and are confident in the C language, you move from green belt to blue belt. After you are familiar with the MVS operating system you move from blue belt to brown belt. Black belt is achieved if you ever manage to correct information from Gerhard, somitcw or Tony in the hercules-os380 group.