QZB design thoughts v.1 (some things from below were rethinked. I leave it here so the evolution of thought could be seen) Hi! As I promised, I prepared some more specifications for the QuiZ-Browser I plan to write (with the help of other co-developers). (In fact, its quiz server/client...) What you find below I started formally, but then it was too complex to write formally, so I used examples wherever possible. (By the nature I am an idea-generator, so it is sometimes hard to me concentrate on some other type of activity ;-) But I'll try hard.) I wish interested people could look into it and tell me where things could be made better. I even thought about new protocol. Something like DDTP (didactic data transfer protocol), which could add security features to the scene. (You known, test contents are to remain CLOSED otherwise they will not be tests any more!) I easily agree, that the project I code-named QZB (quiz-browser), seem banal and the easiest thing to do! However, its a most widely used type of software! And most needed too. (I know, there are lots of ways to it on Mac/Win. I even imagine some software already exists for the purpose on Unix. But we are making example open source project and nobody knows if it just fails in 4 weeks or will be a De-facto standard two years from now!!! And also this is not usual for OSS project to start from ground zero.) After I specified some examples on .qzb file (with data), I thought I must add some editor to help those teachers who don't think (like myself) that writing text files is great idea. The syntax of the .qzb file is far from final. Probably I should made it XML or SGML and use some editor for its creation. However, I am not closely familiar with these and I think it will not be a problem to add this feature in the future. I plan all coding to be done with, as I think, best language in this case - Perl, and Perl/Tk for the graphical interface. As an initiator, I will be in charge of development process and make final decisions. (this way we avoid unnecessary disputes.) I do not give any release dates this early, but later we will probably add some synchronization. Please, also keep in mind that most (if not all) of us have other duties and hobbies, so our pace will be not so predictable. ANY IDEAS AND HELP-OFFERS (WITH EXPLICIT MENTIONING OF WHAT PART YOU CAN HELP TO IMPLEMENT) ARE WELCOME! I myself will try server-side and Perl/Tk interface first. (I need to learn Tk in the process, BTW) Now I will wait for your response and think it over again before actual code appear. (Some parts can be done already. For example, I will be glad for the example how to insert different widgets into text-flow in Perl/Tk... I have seen the 'widget' progie examples, but can't figure out how to receive values back when user fills them). Another problem is where to keep the code online. I don't have any Unix ox on the net, so I can't organize CVS (even if I new how I can do it ;-) - I am familiar only with rcs). So, ./configure is something I am not great at... (if st all). I am familiar with RPM-packaging, so, it will be no problem for me to create one. Please, look if I something is missing from my specification. (I am too old to be ruthless hacker. Only 5 years ago I could just do it myself, but now its a lot more fun to do it together and put GPL on it.) (If you write to me privately on the topic, add QZB to the Subject - this way I will not miss. If you have something worth public to hear, I ask Douglas if we can use seul-edu. QZB sign will help too.) Hope to hear from you! Thank you for your attention! Sincerely yours, Roman A. Suzi -- Petrozavodsk -- Karelia -- Russia -- -- powered by Linux RedHat 5.1 -- ------------- Specification / README /TODO ---------------------
(code name = qzb) Description Description The program is intended to be used as a trainer/quiz/exam program, specializing on languages. It can be used as a browser of the didactic material, containing set of problems students are expected to solve or train on. Program can be run in different modes and with different front-ends. To facilitate usage of the program on client computers, CGI is provided as well. Platform Server-side: UNIX/Linux/Perl/web-server Client-side: UNIX/Linux/Perl/Tk, ncurses, or anything with decent WWW browser via CGI. Copying Author Roman A.Suzi (the initiator) Where to get? Extended description (for co-developers) ( == qzb == QuizBrowser ) The basic idea of the program is quite simple: it must be able to read problem set file specified and provide students with exercises from the file via one of the front-ends: ncurses-based, Perk/Tk (X)-based and web-based. Accordingly, we have different parts (* - not in the first release): qzb qzb.text qzb.X qzb.cgi * qzb.ed * qzb2ps * qzb2latex The three client parts run core part -- qzb -- to get the individual problem from the specified problem set file: sample_problems/*.qzb In this respect, qzb acts like well-known 'fortune' program with the exception that qzb is provided with some additional keys to arrange exercises in desirable manner and some special markup is used for additional information. As I see, these command-line switches of qzb are: -s #, --seed # -- random seed to be used (it is needed so different instances of training processes will be consistent) -t #, --req # -- task request number -r, --rnd -- retrieve random task which have not occurred in the instance (requires --seed) -f -- file with problem set -o -- output file (or standard if missing) Client-side have no switches, only qzb file specified. What it looks like? As this program is not very complicated, it is appropriate to provide some informal description (a scenario) of what users will see. First of all, a teacher prepares his own problem set file or chooses one of sample files. The teacher must have rw access to appropriate qzb directory or make his directory visible to special qzb user. (It is needed for task set security reasons). Students run a qzb (in one of the front-end variants) and choose which course they want to work, or the tutor prestarts programs for the exam. In case of www-frontend, it will look like going to some web-page with optional password. Web-interface course consistence is controlled by hidden values in the tag. All other information is provided in .qzb file. Now what each student will see at the screen. First of all, there will be some a (customized by a teacher) instruction, which is telling how to work with the qzb. Then student starts to work with the material. According to the data in .qzb file, the student will be faced with a series of 'cards'. Each card will contain a problem, which a student will be able to solve, inserting some text in the places of special icons with question marks OR choosing some values from multiple-choice widgets. There could be several places on one card, where student choice must be done. A student make through all the cards and gets a screen, which prints his scoring and/or exam results. Now, lets look into more details of the process. First of all, there could be several modes in which cards are presented: TM. Training mode. In this mode we tell our student he had some errors on the card, so TM.1. he must correct wrong places by continuing on the same card TM.2. right answers are presented to him and he proceeds to the next card CM. Control mode. In this mode we don't show a student his errors after each card, but give him detailed report later, so he can analyze his errors. *AM. Adaptive mode. It is like TM or CM mode, but the sequence of cards depends on the answers, given by the student. EM. Exam mode. It is like CM, but we aren't obliged to give out detailed error information EM.1. We show him the topics and number of errors he did in each topic EM.2. We just tell the student his score/exam result The adaptive behavior will not be implemented in the first release of the program. However, we must have its possibility in mind by allowing more flexible task-acquisition/classification scheme in the qzb server-end. N.B. Client-end of qzb is not processing rightness/wrongness of student answers. It is essentially a "browser", which is controlled by the "packets" it acquires from qzb server. This makes server-end more complicated, and clients more easy to implement. Client side is identified by the unique seed, which is also an ID of the client-instance. Now, to the types of quiz-widgets: - multiple (closed) choice list - placeholder to type-in correct answer. - checkbox * order-me widget: the student must sort entries in it by dragging * build-correspondence: the student is expected to make correspondence between entries of two lists. The correspondence doesn't need to be 1:1, it could be 1:M, M:1 or M:M. (* - these will not be present in release 1.0, just something we must have in mind, designing the qzb) (*)The qzb client must be able to show text (letters) as well as pictures. This will enable to make tests with some unusual characters. However, this is not the goal of release 1.0. As we plan to use full Unicode, many characters (math or transcription signs among them) will be possible to draw without any problems. Now, about how a teacher will prepare his own material. First of all, the material must be plain full Unicode text file with special convenient to humans mark-up in it. The possible example of sample file is given below. (It is not final and needs some polishing and critique! The final format must be easily extensible and have intuitive structure.) (Do we need a visual editor to it or internationalise "command=" things or both???) --- sample.qzb -------------------------------------------------------- [global] mode=CM # control mode timer=20m,"You have $timer to complete this test" select=5 # only 5 questions from random=y # shuffle [1] title=Instruction body= This is sample quiz file. And this is it's start card. Please read carefully the instructions below to answer correctly to the questions... == [2] title=Question 1 topic=anatomy body= Healthy human being has _1_ legs and _2_ head_3_. == [.1] choice="2","4","6" right="2" score=2 [.2] fill=7 letters right="1","one" score=1 [.3] fill=1 letter right="" score=1 [3] title=Question 2 topic=zoology timer=3m,"You have $timer to answer this question" body= Who lives in the sea (mark checkboxes)? _1_ salmon _2_ elephant _3_ whale _4_ dolphin == [.1] right=n score=1 [.2] right=y,n score=0 [.3] right=y score=1 [.4] right=y score=1 ............... [12] title=Results body= Thank you for your answers! You have earned $score points. It means, that $result == criteria=0,7,"you failed. Sorry..." criteria=8,10,"you passed! Congratulations!" # criteria=0%,69%,"you failed. Sorry..." # criteria=70%,100%,"you passed! Congratulations!" ---------------------------------------------------------------------- This format is raw yet. For example, how to provide more interactive diagnostics for a student's step/error? Computer replies must be smart, they are to give additional information, so the student could think again and fill the form right way. Probably, the may be specified as additional property to the "command=" lines of the questions. * Not to forget: - Font size and family/type must be in the preferences for the qzb-clients somehow... I don't want people complain that font is too large or too small... - The same with bg/fg colors... - Have i18n in mind. Anything user meets must be language independent. Even the last error dialog! (I don't yet know how to do it right: locales seem to change too fast in Linux...) *** MY NEW IDEAS on QZB *** I want QZB to be more flexible in scenarios so the questioning could be made more complex. After fiddling with different kinds of scenarios I came to the conclusion that there is a need to have at least two layers of control files: 1) question/task database ("content") 2) scenario file which will specify a certain quiz scenario, using questions from the database This way quiz questions could be accumulated and exchanged freely between educators while quiz procedure will be independent of problem content. Any ideas for the format of the taskbase file? What about scenario file? Example of _task file_ (task000): --------------------------------------------------------------- Subject: math Difficulty: 3 Comment: just an example of something simple 1.) How much is 2x2 ( ) 1 ( ) 2 ( ) 3 (x) 4 ( ) 5 ( ) 22 ... --------------------------------------------------------------- Example of _scenario file_ (mathquiz): --------------------------------------------------------------- Use: task000 Questions: 5 Order: shuffled Scoring: "+=1" Criteria: 0-2 : "2" : "bad!", 3 : "3" : "satisfactory." , 4 : "4" : "good!", 5 : "5" : "excelent!!!" Comment: this is an example (grades are 2-5, as in Russia or Sweden) --------------------------------------------------------------- It will be some markup language, as I see it now. And it need to be something like sdf (simple document format) or even more easy for enduser... * My definition of flexible was not developer-side flexibility but ability to organize questions in different ways. Its not so easy as it leads to enumerating possible types of ordering, counting scores, changing ordering on the fly (repetition, etc.), different kinds of statistics at the end... This is why it is not trivial. When I am __programming__ a quiz in, say, HyperCard, I can add as many features as I want because HyperCard is pogrammable and I can implement almost any type of (closed form) questionaire-type program... End-user is not to be faced with "if you want this, do it youself in language X"... So, I am going to continue compiling the list of features to include. They are from these categories: - type of question - question selection and ordering - reactions to student answers - collecting and presenting statistics (Don't forget some teachers do NOT like closed-form quizzes. They prefer to receive textual answers and analyse them themselves). * For example, for QZB may need control.html + ques*.html in order to generate a quiz from them! control.html will describe the discipline for question order, grading, repeating, etc. And ques-pages will do what they are supposed to do. So, the picture now is: {control,ques*}.txt ---\ {control,ques*}.html ---> *.qzb ---> http://...cgi-bin/qzb?somefile.qzb... \ + right answers file \--> qzb somefile.qzb \--> xqzb somefile.qzb with central line being first to implement.