Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Clone this wiki locally
Welcome to MarkUs
MarkUs is a web application for the submission and grading of student programming assignments. The primary purpose of MarkUs is to provide TAs with simple tools that will help them to give high quality feedback to students. MarkUs also provides a straight-forward interface for students to submit their work, form groups, and receive feedback. The administrative interface allows instructors to manage groups, organize the grading, and release grades to students.
Since 2008, more than 120 undergraduate students have participated in the development of MarkUs; some as full-time summer interns, but most working part time on MarkUs as a project course. The fact that we have have uncovered so few major bugs, and that MarkUs has been so well-received by instructors is a testament to the high quality work of these students. MarkUs is used in more than a dozen courses at the University of Toronto, in several courses at the University of Waterloo, and at École Centrale Nantes (in French).
MarkUs is written using Ruby on Rails, and uses Subversion (with a Git back-end in progress) to store the student submissions.
Users may also find the Sandbox useful.
If you are interested in contributing to MarkUs, there is lots of information below to help you get set up. Please help us keep this documentation up to date!
The Developer's Blog has quite a few useful posts to help you get started or understand design decisions that were made along the way. It also includes status reports from various terms.
- IRC Channel: #markus on irc.freenode.net
- Logs of the channel are also available.
- Mailing list address:email@example.com
- Mailing list archive at marc.info
MarkUs is a Ruby on Rails application. Thanks to various dependencies and the fact that all the current production servers run on Linux servers, all development is done on Linux. Because virtual machines are easy to install, this has become the most popular option.
We have never had success getting a development environment installed on Windows, and more recently we have not been able to compile subversion ruby bindings on OSX, leaving Linux as the only development environment.
You have two main options. The first is to use vagrant to download a pre-configured virtual machine that has most of the required software installed on it. The second is to set up your own virtual machine. You should follow one of the the two installation guides below.
- Setting up a Vagrant Environment
- Setting up a development environment on GNU/Linux
- Setting up to run background processes using Resque and Redis
After you have installed the primary software components, it is time to get the MarkUs source code and configure it.
Setting up MarkUs
Checking out MarkUs Software
The first part of this page on using git describes how to setup and checkout the MarkUs repository.
- Student File Submission: September 2 2009
- Student Group Formation: August 17, 2009
- The Grader View: June 6, 2009
- Flexible Marking Scheme Selection: December 1, 2009
- Flexible Marking Scheme Criterion: December 1, 2009
- Notes created through the Modal dialog as an Admin: December 3, 2009
- Notes created through the Modal dialog as a TA: December 3, 2009
- Creating and editing a grade entry form as an admin: December 4, 2009
- Notes tab: December 11, 2009
- Entering and releasing the marks for a grade entry form as an admin: April 4, 2010
Aaron Lee, Abdelhamid Benmouffok, Adam Goucher, Aimen Khan, Alessio Di Sandro, Alexander Kittelberger, Alexandre Lissy, Alexandre Vaillancourt, Alex Clarke, Alex Grenier, Alex Inman, Alex Krassikov, Alysha Kwok, Amanda Manarin, Andrew Hernandez, Andrew Louis, Andrey Kulakevich, Angelo Maralit, Ante Zheng, Anthony Labaere, Anthony Le Jallé, Anton Braverman, Arianne Dee, Augustin Doury, Benjamin Thorent, Benjamin Vialle, Bertan Guven, Binuri Walpitagamage, Brian Bo, Brian Xu, Bryan Muscedere, Bryan Shen, Camille Guérin, Catherine Fawcett, Chris Kellendonk, Christian Garcia Salguero, Christian Jacques, Christian Millar, Christine Murad, Christine Yu, Christopher Jonathan, Christopher Koehler, Claire Mayer, Clément Delafargue, Clément Schiano, Danesh Dadachanji, Daniel St. Jules, Daniyal Liaqat, Daryn Lam, David Das, David Liu, Derek Dowling, Diane Tam, Dina Sabie, Dmitry Khabarov, Dylan Runkel, Ealona Shmoel, Egor Philippov, Emerik Morency, Erik Traikov, Eugene Cheung, Evan Browning, Farah Juma, Fernando Garces, François Neber, Gabriel Roy-Lortie, Gaëtan Girin, Geoffrey Flores, Ghislain Guiot, Gillian Chesnais, Hanson Wu, Haohan David Jiang, Horatiu Halmaghi, Ian Smith, Ibrahim Shahin, Irene Fung, Isabelle Chan, Ishan Thukral, Jakub Subczynski, Jay Parekh, Jeffrey Ling, Jeremy Goh, Jeremy Merkur, Jeremy Winter, Jérôme Gazel, Jesse Cordeiro, Jiahui Xu, Joel Burford, Joey Perry, Jordan Saleh, Joseph Mate, Joseph Maté, Joshua Dyck, Joshua Smith, Julien Starozinski, Junghwan Tom Choi, Justin Foong, Karel Kahula, Kevin MacPhee, Kira McCoan, Kitiya Srisukvatananan, Kristian Lejao, Kurtis Schmidt, Lawrence Wu, Loïc Labagnara, Luke Kysow, Marc Bodmer, Marc Palermo, Mark Kazakevich, Mark Rada, Maryna Moskalenko, Mélanie Gaudet, Melissa Neubert, Michael Ing, Michael Lumbroso, Michael Margel, Mike Conley, Mike Gunderloy, Mike Stewart, Mike Wu, Mina Almasry, Misa Sakamoto, Nathan ChowNeha Kumar, Neha Kumar, Nelle Varoquaux, Nicholas Maraston, Nick Lee, Nicolas Bouillon, Nicolas Carougeau, Noé Bedetti, Oloruntobi Ogunbiyi, Ope Akanji, Oussama Ben Amar, Paymahn Moghadasian, Peter Guanjie Zhao, Rafael Padilha, Razvan Vlaicu, Rebecca Frailich, Robert Burke, Ryan Spring, Samuel Gougeon, Sean Budning, Severin Gehwolf, Shaughn Finnerty, Shenglong Gao, Shion Kashimura, Simon Lavigne-Giroux, Stephen Tsimicalis, Su Zhang, Tara Clark, Tiago Chedraoui Silva, Tianhai Hu, Valentin Roger, Veronica Wong, Victoria Mui, Victoria Verlysdonk, Victor Ivri, Vivien Suen, William Kwan, William Roy, Wilson Chiang, Xiang Yu, Yansong Zang, Yusi Fan, Zachary Munro-Cape
Supervisors: Karen Reid, David Liu, Morgan Magnin, Benjamin Vialle
Everything a Developer Needs to Know about Ruby, Ruby on Rails and MarkUs
Getting Started with Ruby, Ruby on Rails and MarkUs
MarkUs Coding Style/Coding Practices/Rails Gotchas
- Basic Guidelines for MarkUs Development (IMPORTANT!)
- How To Do a Code Review
- Rails ERB quirks
- Please document your code according to the RDoc specification- (see How to Use RDOC)
- Difference between COUNT, LENGTH, and SIZE
- Our Ruby/Rails testing guidelines
- Security testing guidelines
MarkUs API/Test Coverage
User Roles and Stories for MarkUs
General / Constraints
- Instructors can create / edit assignments
- Instructors can download / export files
- Instructors can hide students
- Instructors can do everything that Graders can do
- Instructors can release / unrelease completed marking results
- Instructors can map particular students / groups to Grader_(s) for marking
- Instructors can download / export a file that describes the Student / Grouping mapping to Graders
- Instructors can upload a file that will do the Student /Grouping mapping to Graders
- Instructors can manage groups without restrictions
- Graders can easily tell which submissions are assigned to them to mark
- Graders can view a Submission from a Student / Grouping
- Graders can view / annotate / mark a particular file from a Submission
- Graders can add annotations to particular lines of code within a Submission File
- Graders can create reusable Annotations
- Graders can create short, formatted overall comments on a Submission
- Graders can view and use a Rubric for marking a Submission for an Assignment
- Graders can view a summary of marked submissions
- Graders can add bonuses / penalties to submissions
- Graders can modify the marking state of a submission result
- Graders can easily switch to the next / previous Submission for marking
MarkUs Component Descriptions
Tips and Trick
MarkUs Deployment Documents
Installation Instructions for MarkUs using
For a complete list of local wiki pages, see TitleIndex.