ePost: A Secure, Web-Based Grade Posting System for EECS@York 
Designed and Implemented by Hamzeh Roumani

Created SU00; upgraded SU02 (registration check, normalized tables, mark merging) - Upgraded SU07 (http authentication, impersonation, CPS generation) - Upgraded SU16 (passport-york auth)

ePost operates in two modes and switches automatically between them. In Student Mode it allows students to access their course marks after verifying their identity and ensuring that they are indeed registered in the course in question. In Instructor Mode it enables course instructors to impersonate any of their students (to see what they see) and to generate a course performance summary (CPS). ePost recognizes instructors through their ownership of the ePost directory or, for multi-instructor courses, if a file named <username>.allow appears in that directory.

2. WHY
ePost was motivated by the needs to (1) post marks on the Web while maintaining privacy, (2) keep records of all students (registered or not) yet allow only registered students to see their marks (a departmental requirement), and (3) to generate course performance summaries.

3. HOW
Simply embed one of the following two links in your course web page:

Where YYYY-YY is the year (e.g. 2016-17), T is the term (F|W|S), and C is the course number as it appears in the file system under /eecs/dept/course/YYYY-YY/T/C. Hence, the course number may include a section but does not include the EECS/COSC rubric. Note that the secure protocol, https, must be used to ensure the payload is encrypted.

The mark files must be created in a subdirectory ePost under C, and the directory and the files must allow the faculty group (and not others) to access them, i.e. something like this:

   cd /eecs/dept/course/YYYY-YY/T/C
   mkdir ePost
   chmod g+rx ePost
   cd ePost
   touch .ppy (needed only if you use Passport-York auth)
   (Create the mark files)
   chmod g+r *
Note that all the mark files (and .ppy if present) must be group "faculty" and must have read permission for that group.

For each piece of work P in your course, create a mark file named P.ePost, e.g. Midterm.ePost, Assignment1.ePost, etc. Any name other than data can be used as long as the extension is ePost. The mark file is a text file in which each record consists of two tab-delimited fields. Here is an example:
   cs654321        86
   cse12345        76
   +       Average is 59% 
   +       Histogram <href="">here</a>.
   +       CPS weight=30%: max=100: due=Nov. 9, 15: available=Nov. 25, 15
In a typical record, the first field is a student's username (the EECS username or the Passport-York username, depending on the authentication link that you adopts) and the second field is the mark. Only that student will be able to see such a record. In other records, the first field is a '+' and the second is some remark. Such records will be displayed for all students to see. The mark file can contain multiple records for the same student and multiple + records. ePost will display such records in the order they appear in the file. Note that since ePost displays everything in HTML, you can embed links as shown in the above example. The last + line in the example shows how Course Performance Summary data is recorded. Such a line is needed in each ePost file whose component appears in the CPS (for example, you need it in Midterm.ePost but not in Grade.ePost because letter grades are not recorded in the CPS). The CPS line contains five colon delimited fields: the weight of the component, the out-of mark, the date the piece of work was due, and the date the mark become available to the students. Whitespace in between tokens is ignored.

At the end of the term, you may want to consolidate all the raw tables into one consolidated, multi-column file so that it can be imported into a spreadsheet for grade computation. To do that, simply issue the epmerge command passing the course number as argument. The command will ask you to prepare a file (epList) containing all the .ePost files that you like to merge (without the .ePost extension), in the order that you like to see them merged. epmerge will merge not only the .ePost files that you indicate but also the student's registration data (yu email address, York ID, section, and name) as listed in the course distribution list. The command takes a second (optional) argument being the path to the distribution list. The default is /eecs/dept/dist but if you ran this command after the term has ended, you would want to provide a second argument, e.g. /eecs/dept/dist_archive/2014-15/W.

As an alternative to creating one text file per piece of work (the standard approach), you could create just one file named data.ePost. In it, you can have one or more lines per student and each line starts (in column #1) with the student's (EECS or Passport-York) username and is followed by the student's marks with arbitrary delimiters. Here is an example:
   +Login     Mid  A1   A2   A3   FNL  TOT  GRD  NAME
   +--------  ---  ---  ---  ---  ---  ---  ---  --------------
   cs654321   86   79   94   83   90   91   A+   Eve ...
   cse12345   76   59   64   83   78   77   B+   Adam ...
   +The midterm average was 59%
ePost displays the information in such a file using the pre tag so you can assume a fixed-size font. As in the multi-file case, the contract for ePost is to show student X all records prefixed either with X's username or with +. Note that neither distribution list merging nor CPS generation is supported for single, multi-column mark files.


ePost is a brainchild of prof Hamzeh Roumani