Frequently Asked Questions¶
Getting Started¶
How do I get started with Relate?¶
At the start of a course, there are a few steps required to get going. We assume that the Relate server is already installed and that you have a user account there. Your account will need to have sufficient privileges to create a course. (You can tell whether thatâs the case by checking that there is a âSet up new courseâ button at the bottom of the main Relate page. If you donât yet have sufficient privileges, ask your site admin.)
Getting everything set up¶
Start by creating a Git repository on a hosting site (Github, Gitlab, Bitbucket, or similar) for your course. Likely you will want this to be a private repository, to prevent students from seeing solutions to your assignments.
If you have a course repository from a prior semester, you can start by pushing its content to your new repository.
If youâre starting from scratch, you can use the sample course. You can either create your own and use it as a guide, or use it in its entirety and just make modifications.
Now you are ready to click that âSet up new courseâ button. Fill in the form that pops up. For the âGit sourceâ field, use the SSH clone URL provided by your Git host. It should look like this:
git@hostingsite.com:yourusername/yourreponame.git
or like this:
ssh://git@hostingsite.com/yourusername/yourreponame.git
To make sure Relate can access your course content, you will need an SSH keypair. Below the âSSH private keyâ box in the course creation form, there is a link to a tool (built into Relate) to help you create one. Open that link in a new browser tab. Copy the âprivate keyâ bit into the âSSH private keyâ box on the course creation form. Next, find the âDeployment keyâ section in the settings of your Git hosting site, and add the public key there. On Github, this is under âSetting/Deploy keysâ. On Gitlab, it is under âSettings/Repository/Deploy keysâ. For the title of the key, you may choose any description you like.
Fill out the rest of the form. You will want to pay special attention to whether you want your course listed on the main page, whether you would like it open for enrollment right away, who is allowed to enroll, and whether the site is restricted to staff. Nearly all of these settings can be changed later, under âContent/Edit Courseâ, so if you make a mistake, itâs note the end of the world. The only things that have to be correct at this point are the SSH settings, the course identifier, and the settings for âcourse rootâ and âcourse fileâ (for these last two, in all likelihood, the defaults will be just fine).
Note
The course identifier is final and cannot be changed once the course is created.
When choosing the course identifier, note that this will appear as part of the URL when students browse your course, so it is best to choose something that is easy to type and does not look out of place there, such as by preferring lower to upper case. It also has to be unique across the entire Relate site that you are using, so if the course you are teaching is expected to run multiple times, the identifier should likely include extra bits like the semester, and maybe even the name of the section.
A common pattern is, e.g.,
cs450-f21
for a course named CS 450 running in the fall semester of 2021.Once you hit âValidate and createâ, Relate will download your course content via Git and check it for validity. This may take a second. Next, you should be greeted by your new course web page.
If something went wrong, Relate will show an error message that explains what happened. If you are unable to figure out what it is trying to say, contact the site admin for your installation of Relate.
What to do next¶
At this point, you are off to the races! Here are some ideas for things you may want to take care of next:
To update the course content, commit your changes, push them to your Git hosting site, select âContent / Retrieve/preview new course revisionsâ and click âFetch and updateâ or âFetch and previewâ.
You may also want to add your course staff so that they can help you get things set up. You can add them under âGrading / List of Participantsâ, making sure to choose an appropriate role for them. Try to avoid giving one-off permissions. Instead, adjust the permissions of the role on the admin site.
If your course has controlled enrollment, you will likely want to recheck the enrollment settings under âContent/Edit courseâ.
If you check âEnrollment approval requiredâ, you will receive an email (at the âNotify emailâ you provided) whenever a student tries to register. Approving these requests can be cumbersome. So you may want to create âenrollment preapprovalsâ for the students in your course, for example based on a class roster you have received. You can preapprove students either by institutional ID/student ID or by their email address. You can create those preapprovals under the âInstructor / Preapprove enrollmentsâ menu item.
Key dates in your course will be different every time your teach it, so Relate provides a notion of âeventsâ as symbolic names for specific points/periods in time. (E.g.
lecture 5
,quiz 3
,exam 2
). In addition to (optionally) being shown on the class calendar, you can refer to them from your course content, so that you donât have to manually change these dates every time you teach the course. If your course content uses events, you will likely have seen some warnings fly by about these being missing. (You can revisit those warnings by going to âContent / Retrieve/preview new course revisionsâ and clicking âUpdateâ to rerun the validation.) Now might be a good time to add those events. (using âContent / Edit eventsâ)Note that events may be numbered, as in the example above. If you need to create many events, note that there is a function âContent / Create recurring eventsâ which lets you do so efficiently. If you have events that occur (e.g.) multiple times a week, create all (e.g. weekly) series separately. At this point, however, the numbering will be off, with the second series numbered after the first. You can fix that by using the âContent / Renumber eventsâ function, which adjusts the numbering so that it is in chronological order.
We hope you have a productive and fun course with Relate! If you have ideas, comments, or suggestions, donât hesitate to get in touch.
What does âstarting a sessionâ mean?¶
Is there any way to allow students to click through a flow and just see the pages without starting a new session?
No, there isnât. Any and all visits to a page have to occur within a session. But that is really just a technical requirement. What it means for now is that at the beginning of it all, you have to click on a button labeled start. (And, if that is an issue, that could be made to go away quite easily.)
Overall, I would like you to get you away from thinking that starting a session is this awful heavyweight thing that you can only afford to do a few times before the system falls over. Thatâs really not the case. Session creation is quick and lightweight, and it just provides an amount of context for a bunch of clicking around among a few pages.
What are âflow sessionsâ?¶
What are flow sessions representing to the student? What does starting a new session accomplish?
That said, yes, the technical requirement to have a session comes about because there is a certain amount of state that (optionally) comes along with a bunch of flow pages, such as (as you say) the shuffling of pages, or the shuffling of options for multiple-choice questions, or (hypothetically) any other type of thing that the page might decide to do to adapt itself to a student. So, if what weâre talking about is just a bunch of static pages strung together, this whole notion of a session is a bit artificial, and if it is an issue, we can work to sweep it under the rug more thoroughly. On the other hand, as soon as weâre talking about assignments and quizzes and such, a session is a very natural thing, as it serves as natural container for one round of interacting with the pages in the flow (such as one attempt at a quiz).
It seems like the student is abandoning all the previous interaction with the flow and starting over. Why would they want to do that?
Well, it is up to you when you write the flow rules whether you would like the students to start a new session each time or whether you would like to give them the option to return to a previous set of interactions. This is covered under the âstartâ aspect of the flow rules.
There are the following two options:
-
may_start_new_session: true
may_list_existing_sessions: true
The first one indicates whether a student is allowed to start a new session, and the second one indicates whether a list of past sessions is shown to resume or review.
Content Creation¶
What does the âviewâ permission do?¶
If you have it (the permission), you can see the pages in the flow. If you donât have it, you canât.
Can flows be set up to branch somehow?¶
They are a purely linear affair for now, but at least technically it wouldnât be hard to allow branching. Although Iâm not sure I can imagine what a sane authoring interface for that would look like.
Can participants do work in a flow that cannot be undone without starting a new session?¶
Yes. All work can be made undoable by adding the âchange_answerâ permission, but by default, once an answer is âsubmittedâ, it cannot be changed. (That is distinct from just âsavingâ an answer which makes the system remember it but not consider it final.)
How do I have students realistically deal with data files in code questions?¶
Hereâs an example page to give you an idea:
type: PythonCodeQuestion
id: file_read_demo
timeout: 3
prompt: |
# File Reading Demo
data_files:
- question-data/some.csv
setup_code: |
def open(filename, mode="r"):
try:
data = data_files["question-data/"+filename]
except KeyError:
raise IOError("file not found")
# 'data' is a 'bytes' object at this point.
from io import StringIO
return StringIO(data.decode("utf-8"))
names_for_user: [open]
correct_code: |
import csv
with open("some.csv") as infile:
reader = csv.reader(infile)
for row in reader:
print(row)
I wrote a Yes/No question, but RELATE shows âTrue/Falseâ instead of âYes/Noââwhy on earth would it do that?¶
This is a bit of a misfeature in YAML (which relate uses), which parses No
as
a bool
instead of a literal string. Once that has happened, relate canât
recover the original string representation. To avoid that, just put quotes
around the "No"
.
Course Operations¶
How do I launch an exam?¶
An exam does not launch automatically when the header is changed. First, make sure you have updated the course so the exam has the correct header in the public git revision. Then, you must go to Grading -> Edit Exams, and activate the exam for the correct dates. Most exam issues, like being unable to issue exam tickets, come from failing to do one of the above two things.
How do I grant an extension for a particular student?¶
Grant an exception (from say the gradebook or the grading menu) to the latest session of the assignment you want to extend. Change the âAccess Expiresâ to what you want it to be. Make sure the correct access rules are checked. You will want it to generate a grade (so check it), but make sure to set the credit percent to what you want it to be.
Some events happen twice or three times in a week. How can I create create recurring events for that circumstance?¶
What I do in that case is create two recurring (weekly) event series (or three) and then renumber the result.
Sometimes we need to postpone or put in advance all the following events, which belong or not belong to the same kind of events, by a specific interval of time. How do I avoid editing events one by one?¶
âDelete one and renumberâ might do the trick? Thatâs what I do when, say, a class gets cancelled.
How do I manually upload a file for a student, after the deadline has passed?¶
Typically, you can reopen the session with the appropriate access rules (from say, the gradebook), impersonate the student, upload the file, and then submit the session to close it. The previous steps may not work though if the flow rules are too restrictive.
How do I adjust a particular studentâs grade up?¶
An easy way is to grant an exception for that studentâs quiz/homework/exam and give them some number of bonus points. Note that this will also change the number of points that the assignment is out of. To compensate, you must also change the âmaximum number of pointsâ to the appropriate value. Remember to not grant an access exception.