Coder Social home page Coder Social logo

berkeley-cs162 / ob2 Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 574 KB

An autograder and grade database for GitHub-based courses

License: BSD 2-Clause "Simplified" License

Shell 1.08% Python 58.82% HTML 32.85% CSS 0.90% JavaScript 3.96% CoffeeScript 1.71% Puppet 0.68%

ob2's Introduction

ob2: An autograder and grade database for GitHub-based courses

Octobear 2 (ob2) is a framework for grading programming assignments, used at UC Berkeley. It comes with a dashboard for students, an administration interface for TA's, tools for running autograder scripts inside Docker, a transactional grade database with an audit log, a transactional email daemon, and a set of integrations with GitHub. It takes care of all the infrastructural details, so you can focus on writing great autograders.

Philosophy

Computer Science courses will always be TA'ed by talented computer programmers. Don't add any functionality that could be accomplished with a Google Form, SQL, or some Python scripting.

Quick-start guide

Here is the quickest way of getting started with ob2.

  1. Download Vagrant and VirtualBox.
  2. Download a copy of ob2 and run vagrant up inside the project root.
  3. Use vagrant ssh to log in to the virtual machine.
  4. Run sudo apt-get install linux-image-extra-$(uname -r) and then reboot the VM with vagrant reload. If apt-get reported that the kernel extras package is already installed, you don't need to reboot.
  5. Create a new Python virtual environment with python3 -m venv ./env.
  6. Activate the new virtual environment with source ./env/bin/activate.
  7. The ob2 code is mounted inside the virtual machine at ~/src, so enter the directory with cd src/.
  8. Install the necessary Python packages with pip3 install -r requirements.txt.
  9. You can now start the ob2 server with python3 -m ob2.
  10. When ob2 starts, it will try to initialize the database, so press 'y' and hit Enter to continue.
  11. The Vagrantfile bundled with ob2 should have forwarded port 5002 (the default web port) for you, so go to localhost:5002 to access the ob2 web interface.

At this point, you should have a working instance of ob2, but it will not be very useful. You won't be able to log in without GitHub OAuth tokens, and there won't be any jobs configured.

See the article on Configuring ob2 to get started on setting up your own ob2 configuration.

If you want to use VMware Fusion instead of VirtualBox, see VMware Fusion support.

For more details about setting up ob2 in production environments, see Setting up ob2 (the hard way).

Contributing

For Python code, use PEP8 standards, but with 100-character line width.

For HTML, use 100-character line width and your own discretion.

For plaintext email templates, try to keep lines to 75 characters.

License

BSD 2-clause license (see LICENSE.txt)

ob2's People

Contributors

ajgokhale avatar aykamko avatar bobbyyyan avatar davarco avatar ewzeng avatar hantaowang avatar jel221 avatar jsonchin avatar rahularya50 avatar rahulk29 avatar rogerhub avatar rohanku avatar samkumar avatar shreyaskallingal avatar whsu00 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

ob2's Issues

GitHub invites not being sent

Some students don't receive repo invites at all when they sign up for the autograder. Currently unsure why this is happening or what group of students this happens to.

The following is the log from journalctl that for a student that did not receive an invite.

Jan 18 17:12:56 cs162 run-autograder.sh[95713]: Traceback (most recent call last):
Jan 18 17:12:56 cs162 run-autograder.sh[95713]:   File "/work/cs162/ob2/ob2/util/resumable_queue.py", line 107, in run
Jan 18 17:12:56 cs162 run-autograder.sh[95713]:     self.process_job(operation, payload)
Jan 18 17:12:56 cs162 run-autograder.sh[95713]:   File "/work/cs162/ob2/ob2/repomanager/__init__.py", line 18, in process_job
Jan 18 17:12:56 cs162 run-autograder.sh[95713]:     _assign_repo(*payload)
Jan 18 17:12:56 cs162 run-autograder.sh[95713]:   File "/work/cs162/ob2/ob2/util/github_api.py", line 112, in _assign_repo
Jan 18 17:12:56 cs162 run-autograder.sh[95713]:     "Unable to add member %s to %s" % (repr(member), repr(fq_repo_name))
Jan 18 17:12:56 cs162 run-autograder.sh[95713]: AssertionError: Unable to add member 'awang193' to 'Berkeley-CS162/student376'

See https://piazza.com/class/kyb0uwsl9mj4oj?cid=16_f3 for students who are having this issue.

Static Slip Day Calculation

Currently, slip days are calculated statically, meaning the data is hard written into a database. This only gets updated when a student makes a new submission.

This is problematic when we want to retroactively give a student an extension (i.e. after they have already completed the assignment). From the student's perspective, it shows they've used slip days even though the deadlines are not like that.

A possible issue that might arise from this is calculating slip days for projects. Every semester, there are students who change project groups due to dropping group members, so this may affect that. A fool proof way of dynamic slip day calculation would be to take a student's most recent submission that is affiliated with them (i.e. instead of associating with a specific group).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.