Forum archive 2000-2006

Arnold K. Pizer - Tutorial on managing a WeBWorK course

Arnold K. Pizer - Tutorial on managing a WeBWorK course

by Arnold Pizer -
Number of replies: 0
inactiveTopicTutorial on managing a WeBWorK course topic started 4/27/2000; 3:51:08 PM
last post 4/27/2000; 3:51:08 PM
userArnold K. Pizer - Tutorial on managing a WeBWorK course  blueArrow
4/27/2000; 3:51:08 PM (reads: 2942, responses: 0)



Informal instructions for using WeBWorK



Quick Overview

This document gives details on how one professor actually uses WeBWorK. See the WeBWork on line documentation for more information on almost everything. Also the online discussion group is a good place to go for help.


First Things First

First of all I have a private copy of my course (mth140apriv) so that I can easily test out new problems, set up exams, etc. in my private version without fear of interfering with the version (mth140a) students are using.



Secondly I put /www/webwork/system/scripts/ in my path. This way I can run the necessary WeBWorK command line scripts without typing their full path names. Actually at this point, most things involved in running a WeBWorK course can be done over the web, so there is not too much need to run command line scripts. Go to the professor page to see all the web based routines. To see what your PATH is, enter the command echo $PATH.

I use the following scipt quite a bit. For a full list of commands (really perl scripts) with descriptions, some of which are only used when setting up a, see "List of Utility Scripts".



If I forget the correct syntax for a script, I just type the script name without any parameters. An error message will be output giving the correct syntax. E.g.



See Setting up a WeBWorK course for information on setting up a course.

I set up my private mth140apriv course exactly the same way as I set up the mth140a course except that (1) the base course directory is /www/webwork/courses/mth140apriv and (2) the classID is mth140apriv. I use MTH140A as the group for both courses.



The classlist file is mth140a.lst. First I get a semicolon delimited classlist file (ClassRoster.txt ) from the registrar, remove the header material, and then enter ClassRoster.txt mth140a.lst Pizer
This sets the section field to "Pizer" and leaves the recitation field empty for all users. See Classlist format for information on the format for the classlist file. Once an initial classlist file has been created, it can be edited on the server with a text editor or (from the classlist page) downloaded to a local computer, edited, and then uploaded again. Then I edit mth140a.lst adding myself (login = apizer, studentID = 111-11-1111, section and recitation left blank). The classlist file mth140a.lst goes in the templates directory.

At another institution I would edit the script so that it could handle the format of the registrar's classlist or, more likely, I would use Excel or another spreadsheet program to get the classlist into the required form.




I work in the templates directory which contains the mth140a.lst file. To set up the classlist database and initialize the passwords, enter the command mth140a mth140a.lst
This gives every user their studentID as their initial password. E. g. the initial password for apizer is 111-11-1111 (including the dashes (-)).

I then give myself "professor" privileges by: mth140a apizer

Note that if you are have "professor" privileges, you can add classlist data to the classlist database via the web from the classlist page. This is actually the prefered method since it gives you much more control over the processes.

Finally, I give myself the "professor view", i.e. when I view a problem or download a set, the file names of the source files will be listed. To do this, uncomment (i.e. remove the #) the following line in the file /www/webwork/courses/mth140a/ . Replace 'leeza', etc. by appropiate login names.


$PG_environment{'PRINT_FILE_NAMES_FOR'} = ['leeza','apizer','gage'];

Also in the file /www/webwork/courses/mth140a/ , edit the line

$Global::feedbackAddress = ',';
so that feedback from your students goes to you and not to Pizer and Gage!

Note that I am using my PATH (remember I put /www/webwork/system/scripts in my path). If I didn't set my path as above, I would have to use instead

/www/webwork/system/scripts/ mth140a mth140a.lst

Now I log into mth140a, change my password, then go to the Professor Page, build some sets if none exist, go back to the Professor Page and go to the Add Student(s) Page. I add TA's (moussa and douglass), and four practice users (login = practice1, sid = 000-00-000a, last name = PRACTICE1, first name Jane, etc). I keep the section and recitation fields empty for all users who are not real students.

Then from the command line I give the TA's "TA" privileges by running: mth140a douglass mth140a moussa

Finally I go to the Classlist page and enter missing student email addresses, etc. if I happen to know them. The students can add or change their own email address at any time, so this isn't critical.




Just go to the Add Student(s) Page and follow the instructions. If you want to build sets with different due dates, run the routine multiple times. Adding a student who is already in the course will not change any information already in the classlist database. Hint: If it is early in the course and you want to give new students the same due dates that current students have, add the new students from the Add Student(s) Page but do not build any sets for them there. Then go to the Build Problem Set page and (re)build the sets that were not built for the new students. (Re)building sets that have already been built will not alter any data for students already in the set.



If a student forgets his or her password, go the the Classlist page and give them a new password..



To change Jane Smith's login name or any other classlist information, go to the Classlist page.




Removing students is easy. Just enter the word "DROP" or the letter "D" (without quotes) in the status box for the student classlist information (from the Classlist page). You may want to enter a comment giving the drop date. You can later resurect the student by changing his or her status to C (for current). In that case, you may want to go to the Build Problem Set page (or Add Student page) and rebuild the sets that were not built for the dropped student. (Re)building sets that have already been built will not alter any data for students already in the set.



Often I select problems from the text book which I will modify into WeBWorK problems. First, I always work in my private mth140apriv course. I don't have any "practice" user's in mth140apriv so that even if a student finds out that mth140apriv exists, he or she will not be able to login to mth140apriv. After everything is working smoothly, I transfer everything over to the mth140a area.

Let's assume I am creating WeBWorK set9. I have to create a set9.def set definition file (see below) and problem template files. In order to create a problem template file (i.e. a .pg file), usually I start with a .pg file containing a problem similar to the one I want and modify it (see the list ofapproximately 2000 .pg files distributed with WeBWorK).

After creating all the .pg files, I cd .. to move up to the templates directory and create a set definition file. See Set definition file format for information on the format for the set definition file.


Actually most of the time I just copy files from the distributed library. In the example below I copied the directories (and their contents) setLimitsRates1TangentVelocity, setLimitsRates1_5Graphs, and setLimitsRates2Limits to my templates directory. I also copy the corresponding set definition files setLimitsRates1TangentVelocity.def, etc. (using e.g. cp -r path/setLimitsRates1TangentVelocity* . gets everything quickly). I may have to do a chmod after this to have the correct permissions. Then I just cut and paste from setLimitsRates1TangentVelocity.def, etc into set9.def


Here is a sample file, set9.def, containing 11 problems:


setNumber=9 ## optional and ignored - the name of the set is
## derived from the name of the file set9.def.
## In this the name of the set is 9.
openDate = 10/30/96 at 11:00 AM
dueDate = 11/11/96 at 1:00 PM
answerDate = 11/12/96 at 11:00 PM

problemList =

setLimitsRates1TangentVelocity/, 1
setLimitsRates1TangentVelocity/, 1
setLimitsRates1TangentVelocity/, 1
setLimitsRates1_5Graphs/, 1
setLimitsRates2Limits/, 1

setLimitsRates2Limits/, 1
setLimitsRates2Limits/, 1
setLimitsRates2Limits/, 1
setLimitsRates2Limits/, 1
setLimitsRates2Limits/, 1

setLimitsRates2Limits/, 1


Next I build the WeBWorK set. I have a short classlist file containing a couple of users and one professor, called mth140apriv.lst, which I used to initialize the mth140apriv classlist database. Building a set in mth140apriv will build it for these few users. From the web, go to the prof Page in mth140apriv, enter the "Build Problem Set Page", select set9.def and then build the set.


Now I connect to my mth140apriv site with my web browser and look at the new set. First do a Get Hard Copy. Often, I have made a LaTeX error somewhere. Or perhaps the group ownership and/or permissions of the files was not set correctly. If there are errors, they will be listed along with a copy of the TeX source file which was produced. If I can't see where an error occurs, select the problems one by one. After fixing any errors and obtaining a postscript version of the WeBWorK assignment, I look at the assignment for any errors in presentation. Sometimes, the output is not what I expect. In this case, in order to look at the TeX source file produced, I insert an intentional error at the end of the pg file just before the &ENDDOCUMENT; line. E.g. on 3 separate lines:


Do a Get Hard Copy again. The TeX source code will be output.

Next I do the assignment to check that WeBWorK and I agree on the answers. If I have time I might try another user or better yet ask the TA's to do the assignment before transferring everything over to the mth140a course.

Finally I move over to the mth140a area, copy set9.def from .../mth140apriv/templates to .../mth140a/templates. Also copy all the necessary subdirectories and their files (using cp -r) to .../mth140a/templates/,


Note that the .pg files must have permission 660 and group MTH140A in order for the webserver to be able to read and write to them and subdirectories should have permission 770. You can check permissions by entering ls -l . Permission 660 is listed as -rw-rw---- and permission 770 as -rwxrwx---. You can change the permission of all .pg files in setLimitsRates1TangentVelocity to 660 by entering chmod 660 *.pg when in the setLimitsRates1TangentVelocity directory. If you are lazy, you can set all permissions in templates to 770.

Then I build the set for real by entering the prof Page in mth140a, then the "Build Problem Set Page", selecting set9.def, and building the set. Next I precreate the latex2html images by entering: mth140a set9.def
Note that this takes a long time as latex2html is a "slow" program (it might take as long as 4-6 seconds per problem per student on a relatively fast server). is best run "niced" and in the background. E.g.
nice /www/webwork/system/scripts/ mth140a set9.def > set9.log &
which (under many shells) sends all messages to the set9.log file. However, once the images are precreated, the "typeset" mode is quite fast. If the images are not precreated, the first time a problem is output in "typeset" mode, all the images are created on the fly and there is usually a few seconds delay (which could be longer if lots of students are creating images simultaneously).

See Constructing Problem Sets for more information.


I give WeBWorK exams. Every student takes the same identical in class exam. I also produce a standard WeBWorK problem set using the exam questions so that on this set, each student has an individualized version of the exam questions. Student's have 30 hours after the in class exam ends to do the WeBWorK version of the exam. If they get a problem (or a part of a problem) wrong on the in class exam and the whole problem correct on their WeBWorK version, they receive 25% of the original value of the part(s) they missed on the in class exam. This seems to work quite well and is easy to administer. Mechanically, it works as follows. First I create a set of problems for the exam and check that they are OK. For example, I use exam2.def as the set definition file and in that file have setNumber = Exam2 as the first line. Don't put any spaces in the "setNumber", i.e. write Exam2 not Exam 2. I do this in my own mth140apriv area. I have a testexam.lst consisting of SS#'s 000-00-000n and login names apizern where n varies from 1 to 9. I also have a special file in the exam2 subdirector which identifies the exam, leaves spaces for the student's name and SS#, etc. In exam2.def, I have the line

setHeaderFile = exam2/
so that the special header file will be used. Then I build a problem set using this list. On the web, I look at the nine possible versions of the exam and pick one to use for the in class version and download two copies of that one. If for some reason I don't like the samples, I can go to the prof page and change the seeds of problems or I can adjust the pg files and/or delete and rebuild the set. This is usually not necessary. This is done in my private mth140apriv area that the students know nothing about and could not (not knowing my WeBWorK password) access even if they did. On one copy of the in class version, I write in by hand the correct answers (and as a double check enter these answers into WeBWorK to make sure they are correct). Next I xerox sufficient copies of the exam (both with and without answers) for the entire class. I transfer the exam questions to the inuse version of WeBWorK and then build the set again using the standard and mth140a.lst files. I am very careful to make sure that the open date in exam2.def is correct (I open it three quarters of the way through the in class exam). Then I run off paper copies (see down loading paper copies for an entire class) of the individual versions of the exam. The paper copies are printed in order, first by section name, then by student name. At the exam, after a student hands in his or her completed exam, I give the student a copy of the exam with answers and a copy of their individual version of the exam. Thus the student can immediately begin to work on problems which they got wrong on the exam. Giving students these two things is just a convenience for the students, but one which seems to be appreciated.

If I just wanted to allow students to check whether or not their answers were correct without telling them the correct answers, I would use the prof page to copy the seeds from the in class exam version to say practice1 in mth140a. That way, Exam2 for practice1 in mth140a would be identical to the inclass exam.



You can do scoring from the web. Go to the Professor's Page and then to the Scoring Page. You should realize that scoring a problem set is like writing grades into your grading book. It creates files (in a format a spreadsheet program can read and manipulate) which record grades at the time the scoring program is run. If e.g. you gave a student an extension but scored the set before the student completed the set, anything the student did after you scored the set would not be recored. You could aways score the set again or edit the scoring files. Also, the first time a mth140a_totals.csv file is created, student names, sections, and recitations will be taken from the current information. If you score a set after that, the new information is appended to the mth140a_totals.csv file by matching student ID's (often SS numbers). If you change a student's recitation (or name, etc) but keep their student ID, the new recitation will not be wriiten in the mth140a_totals.csv file. If students add or drop the course, this will be handled automatically. One thing you can do is to rescore everything at the end of the semester (first removing (and saving) the old mth140a_totals.csv file. Then all information will be current. The only drawback is that in doing so you would loose non WeBWorK informaton that you may have entered, e.g. exam graders. In practice, I start over just before the first exam. By that time there is very little switching around of sections and recitations. After that, I just edit the mth140a_totals.csv file by hand if necessary.


You can also do scoring from the command line (this is not recommended). To do so follow the directions below.

Usually I work from my templates directory (but this doesn't matter). To score set 6 enter: mth140a 6
This creates the files s6scr.csv, s6ful.csv, and s6bak1.csv in my scoring directory. You will be asked if you want to total the scores in the score file for this set, and append these totals to the cumulative totals file mth140a_totals.csv. I always answer Y. The first time you do this you will get a lot of messages of the sort:
No record for PRACTICE4 , ID = 000-00-000d,
in the mth140a_totals database. The record will be padded with blanks.

You can ignore all such messages. In general they have to do with automatically handling records for students who have been added to or dropped from the course.

All the scoring files are automatically put in the directory .../mth140a/scoring. In that directory I glance at the file s6scr.csv to see how the students have performed on set 6 (for more info I might look at s6ful.csv). Finally I send the students an email telling them their scores, etc. It's easy to use e.g. excel to add exam grades to the mth140a__totals.csv file. See Grading problem sets. for more information on scoring.



Go to the Send Mail page. See Sending e-mail to all students for more information. Here is a copy of the file email10-25-96.msg which is in the email subdirectory of the templates directory. :


Subject: mth140a: WeBWorK grades and new HW set


Dear $FN,

This email message should go to everyone in mth140a for whom I have
an email address.


A new WeBWorK assignment (assignment 8) covering the material from
this week's lectures is up on the WeBWorK system. It must be completed
by 2:00am Tuesday, November 5. Remember, assignment 7 must be completed
by 2:00am Tuesday, October 29.


Your score on WeBWorK assignment 5 was $COL[-3] points out of a
possible 15 points. Your score on WeBWorK assignment 6 was $COL[-1]
points out of a possible 10 points. Your score on Exam 2 was $COL[-2]
points out of a possible 100 points.

These scores should include any adjustments I have made. If there are
any errors in these scores, please see me.

Have an enjoyable weekend.


Professor Pizer

Now I send "personalized" email to my students by merging the above with the mth141a_totals.csv file.

Usually I want to be really careful, so I first send the email to myself by using a short testemail.lst which I created.

testemail.lst is a subset of the mth140a.lst consisting of 6 or 7 students, but with all email addresses changed to my personal email address so that all test messages are sent to me.



Sometimes (especially for exams), I want to create paper copies of an assignment. To do this go to the Download paper copies page.

<| Post or View Comments |>