Application Program: Test of ability with arithmetic
Discussion has been moved to IS THIS PAGE DEAD? (in the discussion page).
Here is an idea for an application program for the laptop. As well as being a useful application program to have available, we hope the development of this application program will be an important opportunity to gain valuable experience is the development of applications for the laptop, covering such topics as design, documentation, localization and finding out whether a team of enthusiasts from around the globe can put together an application which will be of practical usefulness to the project.
Please join in and edit this page so that the development of the application program can gradually proceed by using the knowledge and skills of many people.
- 1 How do we start?
- 2 An attempt to produce the documentation
- 3 Localization into various languages
- 4 Design of the program
- 5 How would the program look when running on the laptop?
- 6 demo source
- 7 Coding the program
- 8 Testing the program
- 9 Certification of the program
- 10 Publishing the program
- 11 Deploying the program
- 12 Verifying the program
How do we start?
Is the best way to write the documentation first, in English? If all strings are included in English then maybe people who do not have English as their native language yet who know English will choose to translate the strings into their native language. We hope the availability of those strings in various languages will help a programmer who knows the linux system and has sufficient knowledge of the laptop to produce an application program which will run on the laptop in a variety of languages. How would that be done? Would the strings be built in to the application program or would they be in an external file? Building strings into the program would make the program more self-contained yet putting the strings in a file would mean that localization to another language would be more straightforward. Is it best to start with, say, a Spanish version or a Portuguese version with the strings built in to the program as a first stage with the strings in an external file being a second stage, or should the attempt be made to go straightaway to an application program where the strings are in an external file? What is the best way to localize an application program on the linux platform?
- I would suggest using gettext() (see glibc info pages). The English strings are stored in the program and used as the keys to look up localized strings in separate files. This would mean that it is best to write the program to use gettext and and start with the English version. (I believe that using a different language in the program would make English localization impossible, though there may be a way around this.)
An attempt to produce the documentation
Here is an attempt at the documentation.
Application Program: Test of ability with arithmetic
This program provides a child with the opportunity to test his or her ability to perform basic arithmetical calculations using pen and paper and then enter his or her answer into the computer and receive feedback. The program starts by asking how many digits should the numbers use. The program then generates questions at random within that constraint. The program compares the answer provided by the child with the correct answer which it has computed. Feedback is either that the answer entered is correct or the correct answer is provided. Please note that the program does not state Incorrect or Wrong.
NEEDS MORE IN THE SECTION ABOVE.
How should the program be terminated? Should it be for a fixed number of questions? How is the way to choose whether to have addition, subtraction, multiplication, division questions or a mixture of addition and subtraction questions or a mixture of all four types of question? What strings are needed for that choice to be made?
The following strings are needed. In each case NN refers to numbers expressed using digits. These numbers could vary from one digit to many digits.
How many digits should the numbers use?
Please key your answer into the computer and then press the enter key.
Please add NN to NN and then enter your answer into the computer and then press the enter key.
Please subtract NN from NN and then enter your answer into the computer and then press the enter key.
Please multiply NN by NN and then enter your answer into the computer and then press the enter key.
Please divide NN by NN and then enter your answer into the computer and then press the enter key.
The answer which you entered is correct.
The correct answer is NN.
- I would suggest writing the problems in symbols (which don't need localization).
As well the text strings mentioned above, the following string is needed. It would be convenient for this to be the first string in the list, as that could become the practice for other application programs as well.
The program could start by extracting the Unicode code points of ten individual digits to be used in the display. The same Unicode code points could be used for interpreting user responses as numbers. For some languages, such as Spanish and Portuguese the string could be localized as 0123456789 just as used for English: however, for languages written in other than the Latin script, the string may well be different from 0123456789 for localization in that script.
As the program has division it might be a good idea to have a second string which consists of the decimal point, also including various other characters which might possibly be localized.
First attempt at defining that string.
The . in the above string is for use as a decimal point in numbers, not as a full stop at the end of a sentence. Thus localization is needed for use in producing a number such as 3.5 as the correct answer to the following request.
Please divide 7 by 2 and then enter your answer into the computer and then press the enter key.
- I believe you want to look at the locale support in glibc.
since these are randomly generated numbers, what about recuring digits? .. is the child suppose to answer 3 1/2 or 3.5 when s/he is asked 7 / 2?
then what about 10/3? or what might be easier actually, is to say 7/2 = 3 remainder 1 any thoughts on this?
- This is a good point. The questions could be produced using random numbers such that the answer and the number by which the first number is divided are random whole numbers and the first number is produced behind the scenes by the program before the question is asked by multiplying together the two random whole numbers. Thus the question asked would be such that the answer would always be a whole number. However, that method does not address the fact that real world divisions do not always work out as whole numbers. However, the idea for this application program is to try to get something started and perhaps to test out the ready-to-test idea if peope think that the ready-to-test idea is something worth trying to put into practice. It might well be that if the basic program could be implemented, tested and deployed that a second stage could be to have a program where divisions do have an answer which is not just a whole number. More information about the ready-to-test idea is available on The ready-to-test idea page of this wiki.
- This page already shows that people are willing to provide the translations of the sentences so that the application can be produced in many languages. As far as I know, the application has not been coded and got running on the OLPC platform. This could be for a variety of reasons: one might be that the idea of having the program implemented is not thought to be a good idea by people who could implement it. However, it might be that people have lots to do and that things have priorities and that implementing this application program just does not have enough priority at present, and possibly may never have that priority. It is not clear to this writer as to whether the design of the OLPC laptop software system is yet at the stage where this application program could be implemented if someone wanted to implement it: however, this writer is no expert on the OLPC laptop software system so maybe someone who has knowledge of the OLPC laptop software system will comment upon that aspect by editing this text please.
as stated previously, this is an informal discussion of what could develop to be a very useful application. But what we really have to do is make sure to design something properly from scratch, thats why so many design questions are being asked about program structure/development ideas. I would be happy to invest some time to make a mockup of the program if we actually decided what the best way of going forward is.
- Thank you for your offer. Could you please say what you feel needs to be decided about what is the best way of going forward and any preferences which you have as to which way those decisions should go. Some decisions may be constrained by the features of the OLPC laptop, both its hardware and its system software.
-my current issue is that as it stands the application won't fit the bill of creativity, and the constructionist methodology. I'm just wondering how long time will the child sit and answer the questions before getting bord. Especially if the questions are repetative, and s/he doesn't get enjoyment out of doing it. What I'm trying to say, is maybe to keep the childs attension the program needs to be more like a game, and maths is a sneeky thing that they have to do to get to a goal. I.e. not doing maths for maths sake, but for enjoyment.
Also, maybe when an incorrect answer was typed, as well as displaying the correct value, display how the solution might have been calculated. For example:
please add 132 to 84, ... ? 206
The correct answer is 216
132 + 84 = 2+4=6 30+80=110 100 =100+110+6=216
please multiply 6 by 3, ... ? 20
The correct answer is 18
6 * 3 =
6 + 6 + 6 = 18
Coming back to the idea of keeping the childs intrest, maybe make it layered
level 1: addition of up to 20 (4+14=18, 10+10=20 ...)
level 2: subtraction from 20 (17-4=9, 15-10=5) note for level 2, should we allow answers to be negative? i.e. we do not throw away a question that asks: 4-9? -5
level 3: addition to 100 (34+49=83, 21+12=33 ...)
level 4: level 3 but subtractions
level 5: addition of negative numbers ( -2 + -2 = -4, -7 + -10 = -17)
level 6: mixture of negative and posative numbers: ( -25 + 34 = 9, -29 - 24 = -53 )
level 7: multiplication table, up to 12*12
level 8: basic division (25/5 = 5, 42/7=6)
level 9: totally random questions from any of the previous levels.
level 10: ready to test, 50 questions from level 9, to be able to claimb ready_to_test
When the child starts the program, they are asked what level they want to play at, and (should they be able to progress to the next level if they get mistakes?)
Also, if the levels are timed, and the time is displayed after each round, the child will wish to push so that the time is even shorter, (making them play the game and do more maths without being aware of it.)
Maybe a top scores file should be kept to show the childs performance on each level, so that they can show this to their friends and create a healthy atmosphere of educational competitiveness. (Need to make sure the file can not be easely modified by an editor, i.e. it should be encrypted.)
Thank you for your comments.
> -my current issue is that as it stands the application won't fit the bill of creativity, and the constructionist methodology.
Well, as it stood before your notes were added, the application did not relate to creativity and the constructionist methodology. Whether every application needs to have creativity and the constructionist methodology could perhaps be discussed. The idea for this application program was that it could relate to the ready to test idea, of which there is more information on The ready-to-test idea web page of this wiki. There has been no comment, whether from OLPC management or the community, on whether the ready-to-test idea is something which it is thought could be useful or whether it is not what is wanted. If it is thought to be a useful idea worth developing then this application program could possibly be a useful start.
Your ideas for the levels are fine in themselves: however they would make the application larger and at present the application is not implemented at all. Part of the idea of this application is that it could provide experience in getting an application produced as a group project. Adding the extra levels means much more programming work, though maybe people would be willing to put in the effort to produce the larger program with the levels in it whereas they might not be willing to put in the lesser effort to produce the testing-only program.
> Maybe a top scores file should be kept to show the childs performance on each level, so that they can show this to their friends and create a healthy atmosphere of educational competitiveness.
Well, my own view is that the claimed "healthy atmosphere of educational competitiveness" is not necessarily good for everyone. It is good for people to achieve, yet is it good to always put people in an order of achievement? For example, in the training for assessors in the National Vocational Qualification system in the United Kingdom (NVQ being for 16 plus into adulthood skills assessment) assessors are not to say to candidates anything comparative such as "you are the best I've assessed today" as a student is assessed as to whether he or she has demonstrated competence in the performance criteria in which he or she is being assessed and either he or she has done so or he or she has not demonstrated that competence during that particular assessment: also, assessment is in relation to the performance criteria, not in relation to other candidates. I accept that not everyone shares this view. Whilst recognizing that an individual top scores file for the child could possibly in some circumstances be good, that top scores file could possibly lead to pressure from some parents and maybe anguish for the child if individual top scores files for a group of children are combined into a league table for the group. Education is for every child and having league tables means that most of the children would not be at the top of the league table and someone is at the bottom: not everyone can achieve as much as can some.
I feel that a lot depends upon whether the OLPC management and the community feel that the ready-to-test idea is worth pursuing. If the consensus is that it is worth pursuing then implementing this application could become an important stage in the development of the OLPC project. If the ready-to-test idea is either thought not worth pusuing or is just left without comment then maybe this application will not be implemented. At present I am unable to get any further with implementing the application because I do not know enough about the OLPC system and the way to write the software. Maybe by suggesting this application program I have tried to throw a forward pass too far forward and the result is that no forward progress can be made at this time.
- I dont think we should rely on the ready-to-test to make us or break us, we should go ahead with the development of the application, and if the ready-to-test ever gets off the ground, im sure it could be encorpurated into this program.
Afterall free software has never been to target a particular deadline, and people come and go, but at least if we make a mockup then at least we got something.
Sorry for double posting (other post is in the talk page)
Localization into various languages
The OLPC project includes India as a launch country.
English is one of the official languages of India. Into which languages does the program need to be localized for use in India?
india no more: http://hardware.silicon.com/desktops/0,39024645,39160928,00.htm
The strings and their translations
Please see the translations page. Application_Program:_Test_of_ability_with_arithmetic_string_translations removed them from this page to abstract away the details, so that it is easier for people to get a quick overview.
Design of the program
Here is an attempt to produce the design of the program in a sort of pseudocode with notes. Please join in and edit this attempt so that hopefully we can get a good design.
Clear the screen.
Read in the file containing the strings. At present that is 10 lines of text in the format that the strings are being localized into various languages in the Localization into various languages section of this wiki page. In that section the presence of a number in denoted as NN. Yet how should the strings be encoded in the localization file?
For example, the string of which the English version is as follows.
Please add NN to NN and then enter your answer into the computer and then press the enter key.
Will that translate into all languages as three parts, part 1 NN part 2 NN part 3 if one considers that each part could potentially be empty? If so, should that sentence be in the localization file as one string with what is NN in the Localization into various languages section replaced by a | character? The sentence above would be represented as follows in the file.
Please add | to | and then enter your answer into the computer and then press the enter key.
Another possibility would be to break the string into three lines, though that could potentially produce problems if a langauge into which the strings were localized had part 3 as empty. So maybe the use of the vertical bar as a delimiter would be the best way.
However, there may perhaps be in existence standard ways of expressing such information. Does anyone know the situation about that please?
Break the first string into 10 individual characters so as to produce 10 individual characters in an indexed array. If the 10 characters are the same as 0123456789 then a flag DIGITS_AS_ENGLISH is set as true, otherwise it is set as false.
Break the second string into 6 individual characters so as to produce 6 individual characters in an indexed array.
MORE NEEDED HERE
XML comes into mind, and in particular, it sounds like we need a file similar in structure to rockbox's multi lang file http://www.rockbox.org/twiki/bin/view/Main/LangFiles why reinvent the weel when we have Bridgestone :) Also, we would want to keep the children motivated and eager to use this application. A little game that comes to mind that I use to play at school, which always kept me entertained is Chefren`s Pyramid, which I thought is a novel and interactive way of learning maths. http://www.r-e-m.co.uk/cgi-bin/xrem/M_1/T_25127/G_3 We need to keep the children entertained so giving them a goal (even if it might be hard to achieve) is preferable to simply questions and correct answers on the screen. Anyone with experience in mathematical games (building/playing/anything)?
what about gettext?
How would the program look when running on the laptop?
There are some very elegant mockups in the SugarDesignReview2 page of the screen display when using the laptop for chatting.
How would the display look when running this program, for example, in terms of whether the display would fill the whole screen or would the program run on a panel with a header line at the top and "tabs" for changing programs at the bottom? Windows does it in a way with which many readers are familiar, yet how will the OLPC laptop running linux do it please? Some mockup pictures for this program, perhaps showing the display for adding 17 to 29 after the child has entered the answer 46 and just before he or she presses the Enter key, would be useful. Certainly, if someone could produce the pictures then that would be great, yet if the basic information is provided as to how the program would run then the graphic art could be done by others. In particular, sizes of the screen and any message bars in pixels would be useful.
When it comes to producing the artwork in several languages the method described in the following linked document may be useful.
A master drawing could be produced first and made available and then versions of the finished mockup could be produced in various languages. Those in latin script could all use the same font in the same size and colour and the one in Chinese could be made in the same size and colour as best it can be achieved.
Please see/and comment on English console demo Application_Program:_Test_of_ability_with_arithmetic_english_demo
Coding the program
Newsflash: 18 May 2006 0724Z
There is a discussion about the Python programming language in the Software_Ideas_-_Education page, in the section about Java not being available.
It is being asked as to whether Python is the programming language which would be used to implement this application program for the laptop.
Testing the program
Certification of the program
In order to ensure that this application program has provenance of being of an acceptable level of quality it would be good if the program could pass an assessment made by the management of the One Laptop per Child project. There could be a procedure through which an application program which is purported to be ready for publication and deployment must satisfactorily pass in order for it to become of OLPC Quality Application Program certificated status.
That procedure could be specified in an OLPC Quality Application Program Procedure page. At present, ideas for such a procedure could be put forward in the OLPC Quality Application Program Procedure Ideas page.
Publishing the program
If this program can achieve the certificated status of being an OLPC Quality Application Program (if such a status becomes instituted as an available goal) then it could be published in the OLPC webspace in a part of the webspace from which all OLPC Quality Application Programs could be obtained.
Deploying the program
The program would become deployed by people obtaining copies from the OLPC webspace. In this manner the deployment of the program would be decided by local people on the basis of their local needs.
Verifying the program
If open source software is to be used there should be a way to verify that programs have not been tampered with. Eventually one child will get a version that intentionally or unintentionally reports the correct answer every time, does not grade accurately, or allows them to cheat in some way. There needs to be a way to prove that a program is origional especially if it could be used for testing purposes. Open source is good, but atsome point people will take advantage of it. I know I would have.
- This is indeed a difficult problem. It is a problem not only for this program but for many programs. Here is an idea for a possible solution. Comments on whether it is feasible are invited. Would it be possible for there to be a special, variant, version of the laptop, say moulded in a colour different from the laptops issued to the children, which is read-only of files, with files being obtainable only over the internet and then only from one particular webspace? This special, variant, version is herein termed a "provenance laptop". The system software for such a provenance laptop could be in read-only memory. Thus, if the idea is feasible, a child could obtain files from a provenance laptop with confidence. The provenance laptop might, from time to time, need to be transported several miles to a place where files could be obtained from the internet. However, the availability of a provenance laptop facility in a rural school where there is no direct connection to the internet could be a good second best to having a direct internet connection. The provenance laptop could be used to select which files are obtained from the one particular webspace. The one particular webspace could either be a special webspace run by the government of the country where the laptop is deployed or a special webspace of the OLPC project run by the OLPC management under secure conditions, depending upon the policy choice of the government of the particular country.