Skip to content

For Course Staff

Lisa Yan edited this page Dec 17, 2024 · 17 revisions

This section aims to give guidance to course staff and course instructors who are using this app to manage exams. You will learn about the basic and advanced features and some common workflows.

If you are looking to view/update classroom layouts: Seating Spreadsheet (requires UC Berkeley login)

Basic Guide

Step 1: Logging in

You will always need to login with your canvas credentials in order to access the app. This credential will determines your course staff identity and give you access to relevant courses to manage. You will manage all course you are staffing in this one single app!

image image

Step 2: Working with Course Offerings

After logging in you will be able to see a list of enrolled courses (we call it "course offerings"). Each row shows you a course start date and the course name.

image

If you don't see the "Staff Course Offerings" you are looking for, it means this tool has not been set up for that course yet. Click "Import Courses From Canvas" to set up a course to be used with the seating tool. You have to be a staff member of that course in Canvas (bCourses).

image

Click into any offering listed under "Staff Offerings" you want to work with to start managing exams for that offering.

Step 3: Working with Exams

You will see a list of existing exams created for this offering, if other course staff have already logged in and created some. Click into any of them to start working with the exam.

image

If nobody has created any exam under that course, the list will naturally be empty. If you want to create a new exam, click the "ADD EXAM" button. You will see a form. Simply type in relevant information and click "CREATE".

image

name of exam is a unique id used internally in the app, while display_name is what students see.

After the exam is created, you can see it in the list.

image

You can star or delete exams on this page too. Starring an exam won't do anything other than a visual effect. Sometimes you want to star an exam to denote that this exam is the most current one. There is one active exam per course at all time, and that row is highlighted yellow.

Step 4: Working with Rooms

After clicking into an exam, you will see a list of existing rooms already imported for this exam. They represent the actual rooms in which students sit for this exam.

image

For our newly created exam, both list are empty. You will want to import rooms and students so you can start assigning seats.

Click the "ADD ROOMS" to import a room. There are multiple ways to import a room but for this guide, we will use the most common way, which is importing from the room master sheet.

image

Simply check the room you want to use for this exam, and type in the start time and duration (these are optional) for using this room, and click "IMPORT".

image

Now, room should be imported.

image

You can edit room information or delete room on this page too. Of course you can add more rooms by following the same procedure. The same room can also be added multiple times as long as they have a different start time.

Step 5: Working with Student Roster

Now, you should import student roster to the app. Go to student page and see a list of students already imported by navigating from the top navigation bar.

image

Most likely, for a newly created exam, no student has been imported yet. Please be aware that rooms and students for different exams are all independent, even for exams in the same course. This is because all the same set of students will take all exams of a course, and most likely different exams use different sets of rooms too.

Click the add student icon (the little head) to import students. There are multiple ways to import students as well, but in this guide we will use the most common way - importing from canvas roster.

image

There are various import strategies to configure, but we just leave everything as default as we are = importing the first time. They will be more relevant if we import rosters multiple times and needs to resolve conflicts.

Simply click "IMPORT". This pulls the student rosters from the canvas API and populate them into the app. It might take some time, and when it is finished you will be directed back to the student list page.

image

Now, all students are imported and show up in our application.

You might see import errors. That is because canvas student roster sometimes has insufficient information (a student without email or without name, for example). If this happens you will be notified. Make sure to check through the errors and make sure everybody who wants to take the exam is added.

You can edit or delete student information on this page.

Step 6: Edit Student Preferences and Assigning Seats

As mentioned before, student roster could come from different sources (Google Sheets, csv upload, Canvas API Roster etc.) but they will be consolidated within the app itself. We encourage you to use the app data as the single source of truth.

Students are uniquely identified by their canvas ID (bcourse ID). If the same students are imported multiple times with different info each time, the conflict must be resolved somehow. This tool allows various strategies to resolve conflict (merge, overwrite, ignore etc). For more information, read advanced topics below.

Let's continue with our simple example. Now, after importing student list, you may need to tweak student preferences (e.g. lefty, righty, front, back, etc.) in app to indicate specific preferences.

First off, we will add a "Righty" prefernces to all students. Click the pen icon on top of the roster, check "Edit all" and put "Righty" for "New Wants".

Wants and Avoids comes in comma-separated form. For example, if a student should avoid "righty" and "broken" seat, you should type in "righty,broken" in the "New Avoids" field.

The room wants and room avoids present you a list of room this student should want or avoid. When you have multiple room sessions for an exam, you might want to force allocate certain students to a room - then this feature will be useful.

image

Click "MAKE EDITS" to submit.

image

Now all students wants "Righty" table. Then, we tweak a specific student to prefer "Lefty" and avoid "Hallway". Simply click the edit icon (the pen icon) on student row to do so. You will be directed to a similar edit page but this time you are only editing that one single student. Again, when you are done editing, click "MAKE EDITS" to submit.

image

All changed will show up on the updated student list. Keep editing until you finalize all student preferences.

A question for course staff to think about is how you would gather student preferences. Assuming we don't have too many unique preferences here, you may want to ask students to fill out a google form and give them checkboxes, then read information from the google form submission and fill up their preference in our app manually. You don't have to edit one by one; the app supports bulk editing.

If the scale is large, this app supports importing and exporting Google Sheet or CSV. For bulk editing student preferences, you may want to export the roster from app, make edits (manually, or by your in-house scripts, or whatever), and import again. Make sure they are in the correct format. For details please see the advanced topics.

Step 7: Assigning seats!

If you are now sure about your student and room data, click the "Assign" button (the checkbook icon) to start assigning seats.

image

Just click "ASSIGN" to assign seats.

image

Oops. We see an error. This ususally means we don't have enough seats to fit certain student preference. Indeed, we have a student who wants LEFTY seat, but if we look into the room we have imported for this exam, there is no LEFTY seat at all!

image

Every seat is RIGHTY. To resolve this issue, you probably need to discuss with the other staff to see if you could make an accomodation for this student. Either get a new room with LEFTY seats, or make a special arrangement for this one single student. In this guide, we will assume that the course staff is able to get another small room with LEFTY seat. We will import that room.

image

Now go back to student list and attempt assigning again. Now it works.

image

Everybody has a seat now.

Step 8: Emailing Students

You are done assigning! Now, you can click the "Email" button to bulk send out emails to students about their seat assignments.

Minimally, you need to put in a sender's address. It is recommended to also cc all email to an instructor/admin inbox so that you know which emails are sent.

image

You can also edit the email template. For example, add some signature, add some other information to include, etc. The stuff in {{ }} are placeholders that gets substituted when email sent out. There is a "PREVIEW" button to let you preview the html content.

image

Double check, and click "SEND"!

Woohoo, we got the email :)

image

Remember, you can always re-trigger email sending individually by clicking the email icon on the student row.

Step 9: Getting Seating Chart & Public Seat URL

You can project the seating chart to the audience during the exam. Simply go to the respective room page.

image

Public single seat urls that are student-facing can be retrieved by exporting the student roster from the student page.

Now you are done with the basic guide.

Advanced Topics

Importing From Google Sheet/CSV

You could import students or rooms from a public google sheet or from uploading a csv file, or even from typing in some csv rows (suitable for small scale, i.e. adding 1 students). Please note that the google sheet needs to be public.

Google sheet or CSV all use the same format. When you are creating your custom google sheet or csv file, you will need to be aware of the format of google sheet or csv file:

After you prepared your sheet, simply enter google sheet url and tab name/upload the csv and import. Or, if you are using csv, upload it to import.

Student sheet format

image

Regardless using Google sheet or csv file, the student sheet needs to have the following headers: email name student id canvas id.

All remaining headers are treated as student preference values and are optional (with a few reserved keywords: ['email', 'name', 'bcourses id', 'canvas id', 'student id', 'emailed', 'seat id', 'assignment', 'session name', 'room name', 'seat name', 'public seat url']).

For example if a student's lefty column is marked true, that means this student wants this LEFTY seats. If false, it means this student should avoid LEFTY seat. Leaving it empty means this attribute won't appear in student wants or avoids at all. A student who wants LEFTY will be assigned to a LEFTY seat in our assigning algorithm. Preferences are case-insensitve.

Importing students this way has the benefit of importing their preferences as well so you don't need to manually edit them in app one by one.

Room sheet format

image

Regardless using Google sheet or csv file, the student sheet needs to have the following headers: row seat x y.

Each row in the room sheet represents a seat, the "row" and "seat" columns specify the name of a seat, for example, "row"=A and "seat"=1 then this seat is named "A1". The "x" and "y" are the coordinates in the seating chart. If "x" is left blank, it defaults to one space stage right (house left) to the previous seat. If "y" is left blank, it defaults to the Y coordinate of the previous seat.

All remaining headers of the sheet are treated as seat attribute values and are optional. For example if a seat's lefty column is checked, then that means the seat is LEFTY, and vice versa. Blank values means false.

The above describes adding "fixed seats" to a room, i.e., a seat with a fixed position and thus a name. We can also add "movable seats" to a room. Simply leave all row seat x y field blank, and only fill in the attributes. Such seat does not have name or position but still exist in a room and students might get assigned to it. Think about movable chairs in a room.

Importing rooms from master sheet is essentially still importing room from a google sheet, but the course staff over the years have compiled a master sheet for common exam rooms which can be accessed here, and this url is hardcoded into the app already for convenience. If you mapped out a new room, consider contributing to the master room sheet.

Import Strategy

Students are uniquely identified by their canvas Id. If rows with the same Canvas Id show up multiple times during multiple imports and their information differ, the conflict must be resolved. Here are the possible strategies for resolving conflicts this app supports. You can configure these while importing students.

  • Revalidate Existing Seat Assignments
    • True: Preferences might get updated after this import. choose True to revalidate the existing seat assignment (if any) against the new preferences. If not valid, assigment would be set to null.
    • False: no revalidation.
  • Student Basic Info Update Import Strategy / Student Preference Update Import Strategy
    • MERGE: New values would be used if present, unless new value is blank or not provided, in which case old values are used.
    • OVERWRITE: New values would be used. If blank, then the existing values would be nullified too.
    • IGNORE: only old values are used.
  • Seat Assignment Import Strategy
    • IGNORE: don't import seat assigment, even though it might be present in the import sheet.
    • FORCE: always import seat assignment, ignoring any preferences, existing or updated.
    • REVALIDATE: import the new seat assignment only if it conforms to the existing/updated preferences
  • New Row Strategy
    • APPEND: append in new students
    • IGNORE: don't append in new students that are not already existing
  • Missing Row Strategy
    • REMOVE: renove students that are missing from the new sheet
    • IGNORE: dont' renove students that are missing from the new sheet

Export

The import and export of students in this app is fully symmetric, in the sense that there is no information loss if you export a student roster (with preferences configured and potentially even some seats assigned) and import it again.

The exported sheet would have these columns: ['name', 'email', 'student id', 'canvas id', 'session name', 'seat name', 'emailed', 'room id', 'seat id', 'public seat url'] minimally, with any preferences being an additional column as specified in the import sheet format.

The session name seat name public seat url are just for course staff to read.

Room Preferences

Sometimes you have more than one room session and you want certain students to be only assigned to a particular session. For example, all DSP students should get to the DSP room.

This is possible. Simply edit student room wants and avoid to make sure the assigning algorithm only put them in certain rooms.

image

If you are using CSV or Google Sheet to upload room preference, you can. However, you have to figure out the internal Id of a room. For example, if you want to set a student to avoid Evans 10, and you know Evans 10 has an internal ID of 23, then just add a room:23 column and set it to false for that student row. Such a set up will be respected when importing and the app would figure out that this student wants to avoid Evans 10.

Movable Seats

There are many cases where exact seating location does not matter and only which room to go to matters. For example, you have a pretty small room with 10 or so seats and you just want to slot in 10 students and let the course staff on the spot to manage them.

This is possible. For details refers to this PR.