Electronic Hand In System
This document explains how to use the lab supported hand in system installed in /s/handin. It does not include information on other systems that may be used by individual instructors.
Handing In Homework
Handing in assignments is simple. First add the following line to your .bashrc.local file:
export PATH=$PATH:/s/handin/bin
or .cshrc.local file for tcsh/csh users:
set path = ($path /s/handin/bin)
Then run the following command:
handin -c <class_name> -a <assignment_name> -d <directory>
Where:
-
<class_name> is the full name of the class -- cs354-2, cs540-1.
-
<assignment_name> is the name of the assignment. This will be given to you by your instructor.
-
<directory> is the path to the directory where all your files are located.
handin will go through the specified directory and hand in all the necessary files.
To use handin for Windows classes: From the command prompt, or from Start->Run, run the following command:
S:\handin\bin\handin -c <class_name> -a <assignment_name> -d <directory>
Please note that the directories would need to follow Windows conventions.
e.g.
U:\private\assignment1
Setting Up Handin Directories
NOTE: If you are the TA for this course, you must be in the "TA's" pts group for the course in order to read the rosters files and that pts group must have "all" acl's on the directory where the handin directory will reside. This must exist prior to runing the handinsetup program. To check on your pts membership run /usr/afsws/bin/pts member <your_login_name>. If you are not in a pts group called <instructor>:<csNNN>-tas (where NNN is the class number) then you will need to ask that instructor to add you to their "TA's" pts group before setting up handin directories. The command /usr/afsws/bin/pts adduser <your_login_name> <instructor>:<csNNN>-tas will accomplish this.
The
handinsetup program in
/s/handin/bin is used to create handin directories. This brings up a GUI form for you to fill out.
- Class Name -- The name of the class. This must be a valid course name/number like cs354-1. 354 or cs354-001 will not work.
- Instructor -- The username of the professor/lecturer;
- Assignment Name -- The name given to the particular assignment. Give this to the students -- they'll need it to hand things in.
- Handin Directory -- Where the handin directories will be located.
- Instructor Group -- A PTS group containing all the instructors.
- Automatic Closing -- Checking this box and filling in a time/date will create a cron job to automatically close the directories. Automatic closing will only work on research Unix workstation -- not the instructional Unix workstations (first floor labs).
- Stash a Ticket -- Not necessary unless you're using automatic closing.
- Roster -- The file containing a list of all logins (standard setup would be something like
/p/course/rosters/csXXX-instructor/csXXX-00X-000-logins NOT roster)
- Allowed Files -- A comma separated list of files/wild-cards. Only these files will be handed in.
If you fill in just the class name and instructor most everything defaults to reasonable values. The only things you'll need to change are the closing time, allowed files and assignment name. Click Create and everything will be set up.
You will need the administer ('a') AFS ACL in order to properly set up handin directories, or else you will not be able to set permissions on students' directories. It is best to have 'all' access to accomplish this.
The assignment information gets put into the file
~<course_name>>/public/.assignrc. It is a plaintext file so you can use your favorite pager or editor to view the file to satisfy your desires as to how an assignment has been set up.
WARNING: Editing or removing this file can cause problems with handin, especially with regards to students handing assignments in. Please exercise caution and make a backup if you try to modify the file. Do so at your own risk.
NOTE: If you're setting up handin directories for a Windows class, run handinsetup on a Unix/Linux workstation. There have been problems trying to set directories up in Windows. However, the students will still be able to hand in their assignments properly on Windows.
Adding/Removing Students
Chances are, lots of students will add/drop your class during the first few weeks. The handin system has a way of keeping up with roster changes automatically --
handinadd. The
handinadd program re-reads the roster file and rebuilds all the handin directories you have created. Since the roster files in
/p/course/rosters get created just after 12:15 am, set this program up to run some time after that.
Run the command:
handinadd -c <class_num> -i <instructor>
where
<class_num> is the
full class number and
<instructor> is the CS login of the instructor. This will create new directories for all new student that match the permissions of the existing directories -- if the assignment is closed, the new directories will be closed as well. If a student drops the course, all their handin directories
/path/to/student/etc/ will be moved to
/path/to/.student/etc/. Their existing work will be saved, and if they re-add the class handinadd will restore it.
Closing Handin Directories
If you set up automatic closing in
handinsetup you don't need to read any further. At the time you selected handin directories will be closed and you will be sent an email with details. If you want to do things manually it's almost as easy.
Run:
handinclose -c <class_num> -a <assignment>
where
<class_num> is the class number and
<assignment> is the assignment name.
Extending the System
The handin system is designed to be easily extended and customized on a per-course basis by the instructor. It does this by loading in a Perl module written by the instructor and calls functions at various points in the handin process.
This is an advanced feature. If you make a mistake here you could have problems creating handin directories or your students may be unable to hand anything in. The CSL is unable to help debug everyones extentions, so from here on out you're on your own. This feature makes it easy to do advanced stuff with handin, but also makes it easy to break everything -- beware.
There are two files of interest in
/s/handin/etc --
handinext.pm and
handinextblank.pm. Copy the blank one to
~<class_num>/public/handinext.pm. Its comments describe when and how each function is called. If you don't understand the comments you probably shouldn't be attempting this. Edit the file to add whatever functionality you want (see the example at
/s/handin/etc/handinext.pm) and test.