There are a few steps that need to be done before starting the shiny app. I've included an example of the proper structure to use in the example_assignment folder.
-
On blackboard go to Grade Center -> Full Grade Center. Right click on the problem set and select "Assignment File Download".
-
On the "Download Assignment" Page I suggest pressing the show all button at the bottom of the screen, then selecting all of the students and clicking submit. Then save the submissions zip folder which we will refer to as the gradebook zip file because the filename is in the form: "gradebook_course_info_assignment_name_date_downloaded.zip".
The shiny app assumes that within the path_to_shiny_dir folder specified in your config.yml file you have a subfolder with the name problem_set specified in your config file. I suggest the following workflow:
- Within the folder that contains the
ps_grading_app.Randprep_data.Rfiles create a folder of the formPS{PS Number here}. - Within the
PS{PS Number here}folder, create the config.yml with the necessary paths.
config.yml explanation
-
extract_from_zip,generate_diffs: Booleans for whether or not to recursively extract the assignments from the gradebook zip file and generate the html diff files, respectively. This only needs to be done once so you can set these to False after you've started the app for the first time.- NOTE: For the html diffs you need to have node installed (this can be done with
brew install nodeon Mac). Once you've done that, we also need the diff2html library which you can install withnpm install -g diff2html-cli.
- NOTE: For the html diffs you need to have node installed (this can be done with
-
path_to_shiny_dir: Path to the folder containingps_grading_app.Randprep_data.R. For me this is: "~/Dropbox/Spring 2021/grading_shiny_app_v2". -
problem_set: Name used for the problem set subfolder, e.g. "PS8" -
gradebook_zip_file: "gradebook_course_info_assignment_name_date_downloaded.zip" -
answer_write_up_file: This is the Rmarkdown file for the solution write up that we will give you. If we don't have a solution write up ready then a blank .Rmd will work but the html diffs won't be very useful. Note, this should be in theproblem_setsubfolder. -
regex_pattern: This is used when we extract the student submissions to get the student ids. It is based on the assignment name in the gradebook on blackboard. For example, for an assignment with the name "Problem Set 8", we'd use the regular expression "Problem Set 8_([^_])". For problem set 1 the name on blackboard was "PS1" so we'd need to change the regular expression to be "PS1([^_])_". -
rubric: The rubric information expects structure of q1, q2a, q2b, etc
e.g.,
rubric:
- q1
- q2
- q3
- q4
out_of: Total number of points for the assignment
Don't forget to move the gradebook zip file to the PS{PS Number here} subfolder!
Once you've done the above steps, you should be all set to run the shiny app. I would suggest running it as a background job in RStudio to avoid it tying up your current R session. Don't forget to save the file before ending the Shiny process or letting your computer sleep!
Once you've finished grading each of the assignments, you need to upload the grades to blackboard. I've found using the "Work Offline". feature to be the most efficient way to do this.
First, you will need to download the gradebook csv file. I suggest only downloading the assignment column from the gradebook. Do this by going to Work Offline -> Download and then selecting the assignment of interest. Make sure to also check the box for "Include Comments for this Column". Next choose CSV as the file format and then click submit.

We need to change variables within the problem_set_bb_upload.R file. They are,
gradebook_file: The csv you downloaded from blackboardPS_name: Name of the subfolder which contains the grades csv. Usually this is of the formPS1BB_PS_name: The column name for the assignment in the grade center. You can also find this column name in thegradebook_filecsv.export_file: The csv file exported from the shiny appexport_file_path: The file path poitning to theexport_filecsv in the event you saved the file in a different location.
The last consideration is whether it is necessary to scale the grade to be out of ten points. This is done on line 25
mutate(!!BB_PS_name := ifelse(!is.na(grade),round(grade * 10,2),"")
If this is not needed, the line can be changed to :
mutate(!!BB_PS_name := ifelse(!is.na(grade),round(grade,2),"")

