Help

So, you must include computational problems in the class you're teaching? Here's what you'll need to do:

  1. Be familiar with Jupyter notebooks
  2. Set up the course you are teaching on this website
  3. Create (probably copy) and populate problem sets
  4. Attach the problem sets to the course
  5. Release each problem set's questions to the students (e.g. through GitHub)
  6. Securely release each problem set's answers to the students (e.g. through bCourses)
This website is our attempt to automate this process as far as possible, so you can focus on what matters, which is the problem content. By using this site, you generate data which will be useful for instructors choosing these computational problems in the future.

Browse problems

Click on the "Search" button in the navigation bar in the uppermost part of the page. This leads you the page where you can search for problems. Click on any problem to view additional details, and access the problem content. See the policies page for details regarding access to solutions.

Problems have versions, indicating different contexts in which they apply. Most problems have only two versions: "problems" and "solutions". However other versions may exist, e.g. "undergrad/grad problems/solutions", "demo", "project", etc. You can preview problem content (as non-interactive formatted HTML) on the website, or download the notebook.

Create a problem set

Open the dropdown menu in the right of the navigation bar on top of the page by clicking on your email id (after signing in), and then click "Problem sets" to see the problem sets you have created, and create new problem sets. When creating new problem sets, you must supply a title and a comma-separated list of versions for the problem set, which work similarly to problem versions.

Add problems to a problem set

While viewing a problem, click on the "Add to problem set" button, and select the problem set to which you'd like to add this problem. You can also click the "Add problems" button on the problem set page to search for problems and add them directly from the search results, or upon viewing a specific result thereafter.

When adding a problem to a problem set, you will need to specify a mapping between the versions of the problem and the versions of the problem set, i.e. you must specify which problem version appears in each problem set version. Most of the time, the two sets of versions are both simply {"problems, "solutions"}, so the website handles this automatically. In other cases, you may be prompted to enter this infromation.

Copy a problem set

First, you need a pre-existing problem set. Problem sets are not intended to be browsed or shared through the website, though the links are static and public, so can be shared externally. The easiest way to find one is to use one of your own. However the primary intended use of this feature is to look at the previous instances of the courses you are teaching, by clicking the "Other semesters" link under the title of the course page. The URLs of problem sets are named quite regularly, so you might find one by trying a few URLs.

On a problem set, click the "copy" button to create a problem set with a related name owned by you, which you can then add problems to and edit. Your copied problem set will contain a link to the original problem set from which it came.

Edit a problem set

On the page of a problem set, click the edit button. This will open a page where you can change the title of a problem set, change the mapping between problem versions and problem set versions, delete problems and reorder them (by dragging them through the list). You cannot change the versions of a problem set, for that you will have to create a new one.

Set up a course

Once you've been added to a course, you'll see a "Courses" item in the dropdown menu on the right of the navigation bar on the top of the page, opened by clicking on your email id. Clicking this link will open a page listing the courses on the website in which you are listed as an instructor. Click on an active course (in a current or upcoming semester) to set it up. The setup procedure involves choices regarding the distribution of problem sets to students, and the setup and connection of external services conditional on those choices.

To distribute problem sets (without the solutions), we recommend using GitHub. This enable the students to use DataHub, a JupyterHub installation run by the Berkeley Data Science Division, which is free to use for all Berkeley students and faculty. This provides a standardised platform that prevents the numerous issues that may be caused by each student having a unique Python environment. To do this, you will need to create a GitHub account, and connect it to this website. For further details, see the section on releasing problems to students.

To distribute solutions to problem sets, do not use a public GitHub repository, or any other publicly-accessible medium. If you use bCourses, you may link the bCourses course object to the similar object on this website. Then, you may release the solutions to the linked bCourses course via this website. For further details, see the section on releasing solutions to students.

Add a problem set to a course

On the course page, click the "Add problem set" to open your list of problem sets, and add problem sets directly from there. You can also click the "Add to course" button on a problem set page to initiate this process from the other direction. A problem set can be in only one course, but one may add a copy of a problem set that has already been used before.

Release problems to students

Releasing problem sets is a two-stage process. It involves creating two GitHub repositories: one public repository containing only the problems, which is accessed by the students, and one private repository containing both the problems and the solutions, where you can make one-time edits to the problem set. Changes you make that you are likely to re-use should instead become modifications to the problems in the bank itself, which can be done by obtaining access to the underlying repository owned by the Berkeley Physics organisation on GitHub. The website creates these repositories for you upon pressing the corresponding buttons.

Once a problem set is linked to a course, a "stage" button appears next to it on the course page. Clicking this button adds the problem set as a new folder in the linked private repository, where you can edit it. At this point the problem set becomes immutable in the website. To edit it you must first unstage it from the private repository by clicking the corresponding button on the course page. Once you are done making one-time edits, you can release the problem set by clicking the "release" button next to the problem set on the course page, which copies all the files in the relevant folder which don't have "solutions" in their filename to a corresponding folder in the linked public repository. The GitHub and DataHub links are then easily copied and distributed to students (and maybe can be distributed through bCourses via automatic announcements relatively soon).

Release solutions to students

Once a problem set has been released, its solutions may be released through the linked bCourses course. To link a course, simply press the corresponding button on the course page and select the bCourse to be linked from the dropdown. There is a settings page, where one may choose which folder these solutions get released in, and whether or not to also convert the notbeooks to PDF. This is discouraged because the notebooks often have rich, interactive output that doesn't translate to a PDF, and also because the conversion is extremely slow and too many at the same time might choke the server. To release solutions, click the "release solutions" button next to the problem set on the course page.