MarkUs has evolved quite rapidly. The material below accumulated during that evolutionary phase. There may be information that is still useful, but in general the info below should be taken with a substantial grain of salt and not trusted.
MarkUs is a tool being developed by Karen Reid and others at UofT. The goal is to make submission, marking, and return of student assignments paperless. MarkUs currently includes the following features:
Answer: It was an issue with the way the flexible marking scheme was being used. The flexible marking scheme is more flexible since you're not restricted to 4 levels. It is better for entering autotesting marks. The graders say the 4-level scheme is "faster", but that's only because every time we used it, we had fewer criteria. So to make the flexible scheme better, simply get rid of or combine some criteria. Then the flexible scheme will be fast to use (due to fewer criteria), and students can get the exact autotesting mark they deserve (something the 4-level scheme cannot do).
We are currently (as of 25-Feb-2010) using version 0.6.0.
MarkUs is installed on markus002.student.cs.uwaterloo.ca. It's reached with the URL https://markus002.student.cs.uwaterloo.ca/. Byron and Omar can log into the account via ssh; others use the web interface to interact with it.
By default, MarkUs passes a userid and password to a program that is specific to the site that returns whether the user has been authenticated or not. Omar used a different approach, hooking up our standard Apache-based authentication tools. Once authenticated, he loads a customized version of the MarkUs login page with a "continue" button to fake out the system. If you use the URL https://markus002.student.cs.uwaterloo.ca?admin it will display options for logging in with your own username or
Users need to be identified to the system. The first admin is added using a command-line tool when the system is installed. Graders and other admins can be added by hand or uploaded. For students, there is a tool in cs135/markus/bin/parseStudentsToLoadIntoMarkus.py that reads the .classlist file and outputs a csv file that can be uploaded to MarkUs. The upload will either add or update students; so no need to exclude students already in MarkUs. However, the tool will not delete students not in the current list (i.e. student dropped out of the course).
The tutor in charge of MarkUs should know about SVN repositories and the svn command. There are many tutorials online that teach you about SVN.
MarkUs lets students work in groups. Most CS courses however require students to work individually. In this case, groups will still be created, but each student will be in a group by him/herself. The group name is the same as the student's Quest ID.
In MarkUs, login as Admin and go to Assignments > Groups. At the left, there are "Unassigned" and "Assigned" tabs. Students in "Unassigned" have never clicked the assignment link on their MarkUs homepage, while "Assigned" students have. In the right table, you can see all the groups and the members of each group. Recall that each student is in a group by him/herself.
MarkUs uses SVN repositories to manage each group's submissions. Each group has a repository with URL svn+ssh://markus@markus002.student.cs.uwaterloo.ca/u/markus/markus_csYYY_s/svn-repos-root/group_XXXX. Here, csYYY is your course name (ex. cs115) and group_XXXX is an ID unique to each group (ex. group_0322). The URL may change from term to term, because the MarkUs folder and file names may change. You can use the svn command on the URL given above. You can determine the group's group_XXXX id from the Submissions page in MarkUs.
Sometimes students will email you their solutions instead of submitting it on MarkUs. (They usually do this if MarkUs is down). After you get permission from ISC or instructor, you can add the student's solutions to MarkUs yourself:
When a student submits a file to MarkUs, a UW-added hook is run that copies the files from the MarkUs repository to the handin directory in the course account to facilitate compatibility with our testing infrastructure (public tests, autotesting). That is, MarkUs calls /u/markus/bin/post-commit. The name of this program is obtained from the config file in markus/config/environment.rb. The actual invocation is from markus/lib/repo/subversion_repository.rb. The post-commit script is used by all courses using MarkUs.
The post-commit hook does an ssh call to the course account to run /u/markus/bin/newMarkusSubmission.py with the path, username, and assignment directory as arguments. That program does one of two things. If it is the first submission for the assignment, it creates the appropriate directory in handin and checks out the files from the MarkUs repository (it's an subversion (svn) repository). For subsequent submissions, it simply tells svn to do an update.
If submission is not working as expected (for example if the students' code are not being copied into handin folder), please check the following. I will use CS 135 in Winter 2011 as an example.
An alternative solution is this. Create a temporary folder in handin (for example a5_temp). After the deadline, checkout everyone's submission to a5_temp. You should checkout the student's last submission before the deadline (use the -r argument for svn command). Then you can run the autotest on a5_temp whenever you want.
This procedure will guarantee that you mark all assignments that was submitted on time. In Winter 2011, there was an ssh problem which prevented newMarkusSubmission.py from being run. So the handin holder wasn't getting updated.
RevertToDueDateScript
The
RevertToDueDate
script (archived in the folder u/cs135/archives/1109/scripts) can revert a student's submission to a specific time. It should be run before
distrst
to avoid marking late submissions.
The variable "assign" and the command "svn update -r "{2010-10-20 20:05}"" should be updated each time before running the script. Double check to make sure it has the correct assignment number and due date.
assign="/u/cs135/handin/a05/" cd $assign for d in * do cd $assign$d svn update -r "{2010-10-20 20:05}" done
It is possible that a student submits after we run the
RevertToDueDate
script but before we run the
distrst
script, so that his/her late submission gets marked. Therefore, it is a good idea to choose a time that students usually do not submit assignments. For example, an early morning after the deadline.
A better solution is to integrate
RevertToDueDate
into
distrst
to produce a more powerful script, which reverts a student's submission and runs Auto-tests immediately after reverting.
The post-commit hook sometimes leaves the .svn permissions in the handin
directory in an inconsistent state by leaving them without write access for the user. This screws up subsequent updates. Until this can be tracked down, there is a script, /u/cs135/bin/handin_w_sweep
, that detects this anomaly. It takes the assignment number as the only parameter. Directories that have the permission messed up should be fixed with the following commands:
cd handin/<assign_dir>/<student_dir> chmod -R u+w .svn svn cleanup svn update
This script should be run and problems addressed before the automarking tests are run. Occasionally the fix, above, does not get everything. Likely it should be chmod -R u+w .
, but that needs more testing.
Sometimes additional tests were run and OUTPUT files need to be manually updated to the handin folder and MarkUs repository. Procedure: copy the output file to the student's handin directory (in W10 it is OUTPUT.txt)
cd handin/<assign_dir>/<student_dir> svn add OUTPUT.txt svn ci -m "Adding autotest output."
Sweep the handin directories for permissions problems; see above.
After autotests have run, a script ( /u/isg/bin/markus_testcommit <assign> <suite> <timestamp>
) copies the autotest output back into the repository the handin directory on the course account. It then tells svn to add the output and commit the changes to MarkUs' svn repository. When running the command, it's a good idea to redirect the output to a file in case you need to review it. We're still having problems with permissions and you may need to look at the errors.
Graders also like to see all of the submitted files collected in one file. This is done with /u/cs135/markus/bin/cat_submitted_files
. This script is still (as of 26-Jan-2010) a hack in need of work. For each assignment it needs to be edited to update the list of files to catenate together and the assignment number. Pay attention to the order of the list so it matches the order graders will want to see the files!
Important: Both of these scripts invoke svn. svn doesn't like to be invoked more than once on the same working copy. So... these scripts should not be run simultaneously. They run at different speeds and it's possible that svn will interfere with itself.
These scripts take a while -- on the order of 20 minutes to handle 150 students.
After the above files have been committed to MarkUs, the due date needs to be reset (to just after the time the last job finished) so that the graders see those files by default.
I would suggest replacing this script with a specialized RST suite, as this is already duplicating effort that RST is designed to do. Then, a special location for the file list can be designated for an ordered file listing (stored in a predetermined file name?), and all of the makeStarLine+file_cat effort can be handled very naturally via RST's keepFile interface in the computeMarks script.
ie, with just a few extra parameters to keepFile
and a bit of wrapping code, this essentially becomes for file in file_list; keepFile $file; done
and then an extension of the mechnanism already being used to check in OUTPUT.txt files can presumably be used to check in the generated OUTPUT.txt from this test run also (but importantly with a different file name!)
-- TerryVaskor - 01 Sep 2010
Set up assignment:
cat_submitted_files
.
OUTPUT.txt
files to make sure your autotest is valid, run MarkUsScripts#upload_marking_sub_command.
cat_submitted_files
should become the main reference, as the changed deadline may make the MarkUs system accept some late submissions. Also, please remind the graders to set the Marking State to Completed when they are done marking.
Graders need to be assigned in the Admin -> Assignments -> Graders view. To facilitate this, there is a script in the course account called markerallocation.py (located in cs135/archives/1109/markus) that will create a group/grader map that you can upload. To run the script, first download the groups list as a csv file by going to Admin -> Assignments -> Groups and clicking download in the top right corner. Next create a csv file with the names of all you markers in column A, and the number of students assigned to each marker in column B (see cs135/archives/1109/markus/marking_list_a10.csv for an example). Put both csv files in the same directory as where you saved markerallocation.py, and then open the .py in a text editor to change the file names so that they match those of your csv files. Open the terminal, navigate to the directory and run the script (by typing python markerallocation.py). The resulting file will be your group/grader map. Upload this map to the Graders view by clicking upload in the top right corner.
-- MaxTabordMeehan - 23 Dec 2010
For CS 115, a copy of markerallocation.py is at /u/cs115/marking/Marker_Allocation/markerallocation.py
Thanks CS 135
-- Nick Lee