Quercus: Hacking Manual for Instructors

I coordinate a large class (about 750 students, 4 lecture sections, 16 tutorial sections) and I want some info, which Quercus-out-of-the-box either does not deliver, or delivers in the format not suitable for my needs.

But before:

General Info

Quercus gets the students names and sections from ROSI once a day, arount 4 am (except Saturday-to-Sunday nights, some holiday nights and all nights when ROSI experiences technical difficulties)

Hacking Manual

Fortunately I can work UNIX-style with csv 1 exports:

Grades export like 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv

It has 2 header lines

Student,ID,SIS User ID,SIS Login ID,Integration ID,Section,... Points Possible,,,,,,,,.....

regular lines like

Generic, Joe,000000,1000000000,generic,,MAT244H1-F-LEC0101-20199, and MAT244H1-F-TUT5103-20199,,,,,,,,,,.... Generic, Jane,000000,1000000000,generij,,MAT244H1-F-LEC0101-20199,,,,,,,,,,....

and the last line similar to the regular line but for /Users/victor/Desktop/MAT244-2019F/Teaching-General/Quercus-coordinator.mdStudent, Test who is enrolled into all sections.

Here the first students is enrolled into both LEC and TUT and the second one only to LEC.

Group roster export (otr the whole class) like users.csv with the header like

Student,ID,SIS User ID,SIS Login ID,Section,Email,First Name,Last Name

it actually does not show any section but it shows email.

I want to know how many students are not enrolled in any tutorial and their list:

% grep LEC 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv| grep -v Student| grep -v TUT |wc -l % grep LEC 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv| grep -v Student| grep -v TUT % grep LEC 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv| grep -v Student| grep -v TUT > TUTless

Similarly, I want to know how many students are enrolled into LEC5201 and one of the tutorials TUT5101 , TUT5102 since they are in conflict

% grep LEC5201 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv| grep -v Student| grep TUT51

etc

Now I want to have a list of emails of students who are not enroleed in any tutorial, to send them an email:

First,

% grep LEC 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv| grep -v Student| grep -v TUT | cut -f4 -d, > TUTless

gives me a list of their students IDs. Now bash script (for other shell modification required)

% for  ID in `cat TUTless` ; do
grep  $ID users.csv | cut -f6 -d, >> emails ;
done

provides me with the list of emails

Using Groups to Manage Sections

Coordinator decides to manage sections by himself/herself and stop using ROSI/ACORN. Do it when students cannot use ACORN anymore to enrol into class and to change sections, unless you have really good reasons to do it earlier2. Usually it is 2 weeks from the first day of the classes.

I took

% cut -f5,7 -d, 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv > roster.txt

which created a file with lines like this

johndow4,MAT244H1-F-LEC5101-20199 and MAT244H1-F-TUT0501-20199
janedow5,MAT244H1-F-LEC5201-20199

where the first student enrolled into tutorial section and the second did not (despite several emails to such students).

Using text editor allowing grep search and replace all (I use BBEdit on Mac) I cleaned this file to

johndow4,TUT0501
janedow5

just removing MAT244H1-F-LEC([0-9]+)-20199, and, MAT244H1-F-, -20199. Then I used

% grep TUT roster.txt > roster.csv

removing students who have not picked up tutorials.

johndow4,TUT0501

Next, I created in Quercus People > Groups an empty Group Set Tutorials and using UT Advanced Group Tool > Import Group Roster > Batch import rosters into multiple new groups I uploaded roster.csv.

Thus John Doe got into Group TUT0501 and Jane Doe was one of the student with 'Unassigned Students'. There were also few students who enrolled into LEC5201 and TUT5103 which are incompatible, I displayed them as already described

% grep LEC5201 2019-09-05T0434_Grades-MAT244H1_F_LEC0101.csv | grep TUT5103 | cut -f1,2 -d,

and removed them from Group TUT5103 thus adding them to 'Unassigned Students'.

Next I considered groups occupying the same time slots, since all groups TUT0x02 were created after most of the students enrolled into class, they were very small but their TUT0x01 counterparts overcowded, so I moved some students from TUT0x01 to TUT0x02.

Further, I assigned groups to Unassigned Students' selecting for this small Tutorial groups which had no conflicts with any of Lecture section. Fortunately, there was enough og such groups (otherwise I would need to check if there is any time conflict).

Finally, using UT Advanced Group Tool > Clone Groups into Sections > Clone Groups into Multiple New Sections I cloned all my groups. So, John Dow had three groups

MAT244H1-F-TUT0501-20199
MAT244H1-F-LEC0201-20199
ΩCLONED: TUT0502

because I moved hom to TUT0502 (otherwise he would have

ΩCLONED: TUT0501

And then I sent an Announcement to the students, explaining what I did and that People > Groups provide the most current and authoritative info, while People should be used as an auxiliary tool. I explained that ACORN changes will have no effect and to change their assigned Tutorial section they should email me.

During the day I got some emails asking me to change tutorial sections, which I either complied in full or partially (moving to TUT0201 rather than TUT0202)

Using Groups to Manage Sections: Morning After

The trouble came next morning (because ACORN was still active)

Some students had only

ΩCLONED: TUT0502

section because they dropped the class but were kept in the Quercus because they have section attached .

And there were plenty of 'Unassigned Students'. Those were students who enrolled into class during the previous day.

I made a list of droupouts

% grep -v LEC 2019-09-06T0434_Grades-MAT244H1_F_LEC0101.csv | cut -f1,2,7 -d,

and moved all of them to new DROPUT Group.

Then I created a list of new students who selected a Tutorial section

% grep -v CLONED 2019-09-06T0434_Grades-MAT244H1_F_LEC0101.csv | grep TUT |cut -f1,2,7 -d,

and moved them to the tutorial groups of their choice (sometimes into groups occupying the same time slots)

Next I created a list of new students who have not selected a Tutorial section

% grep -v CLONED 2019-09-06T0434_Grades-MAT244H1_F_LEC0101.csv | grep -v TUT

and moved them to new groups of my choice.

Next I killed DROPOUT group, thus moving all its inhabbitants to 'Unassigned Students'.

And finally I used UT Advanced Group Tool > Clone Groups into Sections > Synchronize

Some of the dropouts disappered from the Quercus list, some did not (but they disappered next morning).

And then I sent an Announcement to the students, explaining what I did.

And this every morning!!! On the other hand, next year there will be enough tutorial sections from the very beginning (but may be LEC5201 could change its schedule which I will ask when the dust settles) and there will be no need to manage tutorial sections that early.

Using Groups to Manage Sections: Warnings

I made several mistakes and I am placing here some warnings:

  1. If you create the group, say, TUT0501, then clone it into section, ΩCLONED: TUT5101, and then remove this group, the section is not removed automatically and students will be in this section permanently, unless you clean-up.
  2. To avoid this, if you want to remove cloned group, first using UT Advanced Group Tool > Clone Groups into Sections > Remove Section remove it, and only then remove the group.
  3. However if you forgot to remove section before removing the parent group, you need to clean this mess: go to Settings > Sections and you will see here all sections, including this ghost section:

ΩCLONED: TUT5101 (56 Users ) ✎ ×

If it is empty, you can remove it; if it is not you press its name, manually remove each student (the list of students is truncated to 25, so if there are more students you will do it by iterations), and only after you empty the section, you will be able to remove it.


  1. This is plain text comma-delimited UNIX file 

  2. However I had a really good reason to do it from the first days of tutorials for MAT244 @Fall of 2019: many tutorial sections were added only after most of the students enrolled into class.