SlideShare a Scribd company logo
WORKSHOP
7th of November, 2014
Background
● Started in 2010 by Prof. Dave O’Hallaron
○ 15-213 followed by 15-112
● Completely student-run
● Timeline:
○ < 2010: Single machine
○ > 2010: VM support
○ > 2011: Autodriver
○ > 2013: Rails upgrade and Tango Web API
Some Numbers
● Approximately 2500 students use it every semester
● 77 classes since 2010 between CMU and CMU-Qatar
● 2 coding challenges
● 2014 (as of 3:20PM today): 320,538 -> ~1034 jobs/day
2012 2013 2014
Becoming Open Source
● Higher customizability
● Larger adoption rate
● Decoupling of two core components
● CMU spirit
● Add your own features!
○ PDF annotation
○ Online quizzes
○ Distributed Job Queue
Overview of Front-end
● Ruby on Rails
○ REST
○ Model-View-Controller (MVC)
■ Model: Internal structure
■ View: What user sees
■ Controller: Supply objects to view for rendering,
page redirecting, etc.
○ Javascript, CSS, etc.
Overview of Front-end
● Important model relations
CUD: CourseUserDatum
AUD: AssessmentUserDatum
User CUD Course
AssessmentAUD
Submission
Overview of Front-end
● Resources & Routing
○ RESTful CRUD
○ In the process of switching to a more traditional
REST interface for models
○ Each Resource Gets 7 routes by default
Overview of Front-end
● For example, Users
○ GET /users => index
○ GET /users/new => new
○ POST /users => create
○ GET /users/:id => show
○ GET /users/:id/edit => edit
○ PATCH /users/:id => update
○ DELETE /users/:id => destroy
Overview of Tango
● External, standalone, job dispatch service
● Stateless
● Highly flexible
● Web API
Overview of Tango
Tango
creates directory
stores files
poll for output file
optional callback
open
upload
addJob
poll
callback
job queue
Overview of Tango
Tango VM pool (EC2/CMU)
rhel.img
rhel.img
rhel601.img
rhel210.img
worker thread
initializeVM
waitVM
copyIn
copyOut
destroyVM
runJob
vmms
job queue
Overview of Tango
● Virtual Machine Management System (VMMS)
● Extending Tango for OpenStack, Docker, Vagrant, Xen
etc
Autograding
Autolab
Upon submission
#validateHandin
#saveHandin
#autogradeAfterHandin
- #createVm
Upon receiving Callback
#autogradeDone
#saveAutograde
- #parseAutoresult
Tango
creates directory
stores files
poll for output file
optional callback
VM pool (EC2/CMU)
rhel.img
rhel.img
rhel601.img
rhel210.img
open
upload
addJob
poll
callback
worker thread
initializeVM
waitVM
copyIn
copyOut
destroyVM
runJob
/courses/COURSE_ID/assessments/AS
SET_ID/handin
.c
tangoRES
T
vmms
Docs
● http://docs.autolab.cs.cmu.edu/
● https://github.com/autolab/Tango/wiki
Getting Started...
● What’s the hardest part of joining a project?
o Setting up your environment!
● We’ve set up an environment for you!
● See the Autolab README for full instructions
o Later, you will need your own DB
o ...and possibly your own Tango for Autograding
Getting Started...
1. Fork Autolab repo on github (https://github.com/autolab/Autolab.git)
1. You can’t push to our repo, so you need to fork your own
2. ssh autolab@54.201.118.81
3. git clone https://github.com/<github_id>/Autolab.git <your_andrewID>
4. cd <your_andrewID>
5. cp lib/autoConfig.rb.template lib/autoConfig.rb
6. cp config/database.yml.template config/database.yml
6. In autoConfig.rb change:
- RESTFUL_HOST = “greatwhite.ics.cs.cmu.edu”
- RESTFUL_PORT = 3000
- AUTOCONFIG_COURSE_DIR =
“/home/autolab/<andrew_ID>/courses”
- RESTFUL_KEY = “demo”
- RESTFUL_COURSELAB = “autolab-demo”
Getting Started...
Getting Started...
7. In config/database.yml change:
- database: <andrew_ID>_autolab_development
- username: root
- password: ‘autolab-demo’
8. Populate Autolab by running:
- bundle exec rake db:create db:migrate
- rake autolab:populate
9. Run Autolab!
- rails s -p <fav_port_num_between_9000_and_9999>
- 54.201.118.81:<port>
- Log in via “Developer Login”, enter email “admin@foo.bar”.
Contributing to Autolab
1. Fork the repository and create a local clone of your fork
a. https://github.com/autolab/Autolab
b. https://github.com/autolab/Tango
1. Assign yourself to a new or existing issue on the project
a. https://github.com/autolab/Autolab/issues
b. https://github.com/autolab/Tango/issues
Contributing to Autolab
3. Create a new local branch “fix_issue” and commit
a. git checkout -b "fix_issue”
b. git add .
c. git commit -m “commit_msg. Fixes #<issue_num>”
3. Push the branch to GitHub
a. git push origin “fix_issue”
Contributing to Autolab
4. Submit a pull request
a. navigate to your fork of the project
b. click the large green “compare and review” button
4. We will review and merge useful pull requests
a. documentation and comments on pull requests are
useful in this regard
Contributing to Autolab
6. Keep your forked repository synced with the project
a. git remote add upstream
https://github.com/autolab/Tango.git
b. git remote add upstream
https://github.com/autolab/Autolab.git
c. git checkout master
d. git fetch upstream
e. git merge upstream/master
Questions and Comments
Questions and
Comments
autolab-dev@andrew.cmu.edu

More Related Content

What's hot (20)

PPTX
Webpack
Anjali Chawla
 
PDF
Grunt.js and Yeoman, Continous Integration
David Amend
 
PDF
Isomorphic web application
Oliver N
 
PDF
Webpack DevTalk
Alessandro Bellini
 
PPTX
Improving build solutions dependency management with webpack
NodeXperts
 
PDF
Webpack
DataArt
 
PDF
Andrew Mykhaliuk - Sorry, I need to make a build for frontend
OdessaJS Conf
 
PPTX
Webpack Introduction
Anjali Chawla
 
PPSX
Server Side Rendering, caching and performance
Ateev Chopra
 
PDF
Bundle your modules with Webpack
Jake Peyser
 
PPTX
Build RESTful API Using Express JS
Cakra Danu Sedayu
 
PPT
Server-side JavaScript for the rest of us
Kyle Simpson
 
PPTX
Node.js 201: building real-world applications in pure JavaScript
Tom Boutell
 
PDF
Server-side React with Headless CMS – Exove
Exove
 
KEY
Capybara
Mona Soni
 
PPTX
Module design pattern i.e. express js
Ahmed Assaf
 
PDF
NodeJS: n00b no more
Ben Peachey
 
PDF
Web workers and service workers
Nitish Phanse
 
PPTX
Packing for the Web with Webpack
Thiago Temple
 
Webpack
Anjali Chawla
 
Grunt.js and Yeoman, Continous Integration
David Amend
 
Isomorphic web application
Oliver N
 
Webpack DevTalk
Alessandro Bellini
 
Improving build solutions dependency management with webpack
NodeXperts
 
Webpack
DataArt
 
Andrew Mykhaliuk - Sorry, I need to make a build for frontend
OdessaJS Conf
 
Webpack Introduction
Anjali Chawla
 
Server Side Rendering, caching and performance
Ateev Chopra
 
Bundle your modules with Webpack
Jake Peyser
 
Build RESTful API Using Express JS
Cakra Danu Sedayu
 
Server-side JavaScript for the rest of us
Kyle Simpson
 
Node.js 201: building real-world applications in pure JavaScript
Tom Boutell
 
Server-side React with Headless CMS – Exove
Exove
 
Capybara
Mona Soni
 
Module design pattern i.e. express js
Ahmed Assaf
 
NodeJS: n00b no more
Ben Peachey
 
Web workers and service workers
Nitish Phanse
 
Packing for the Web with Webpack
Thiago Temple
 

Viewers also liked (8)

PPT
AUTOLAB ( A Laboratory Instrument)
Norolayn Said
 
PDF
Protector Glove Box Overview Presentation
Labconco Corporation
 
PPT
Lab equipment.ppt 2013
sinnes
 
PPTX
Analytical instrument
Pranjit Sharmah
 
PPTX
Laboratory Equipment - Use of Equipment
cjhiggs
 
PPTX
1.4 Laboratory Equipment: Names & Uses
Cheryl Bausman
 
KEY
Lab equipment
OhMiss
 
AUTOLAB ( A Laboratory Instrument)
Norolayn Said
 
Protector Glove Box Overview Presentation
Labconco Corporation
 
Lab equipment.ppt 2013
sinnes
 
Analytical instrument
Pranjit Sharmah
 
Laboratory Equipment - Use of Equipment
cjhiggs
 
1.4 Laboratory Equipment: Names & Uses
Cheryl Bausman
 
Lab equipment
OhMiss
 
Ad

Similar to Autolab Workshop (20)

PDF
TorqueBox
bobmcwhirter
 
PPTX
Learning Web Development with Ruby on Rails Launch
Thiam Hock Ng
 
PDF
Ruby openfest
Panagiotis Papadopoulos
 
PDF
EuroPython 2013 - Python3 TurboGears Training
Alessandro Molina
 
PDF
Refactoring a web application with Python
Cristian Gonzalez Sanchez
 
PDF
The New And Improved Flask Mega-Tutorial Miguel Grinberg
bumpbgsyyy017
 
PPTX
Exploring Ruby on Rails and PostgreSQL
Barry Jones
 
PDF
Aniruddha Chakravarty resume
Aniruddha Prabhash Chakravarty
 
PDF
CollegeDiveIn presentation
Karambir Singh Nain
 
PDF
Ruby On Rails Basics
Amit Solanki
 
PDF
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
cNguyn506241
 
PPTX
Session 1 - Getting Started With Rails.pptx
betof93940
 
KEY
Jumpstart Django
ryates
 
PDF
Django at Scale
bretthoerner
 
PDF
Web application intro + a bit of ruby (revised)
Tobias Pfeiffer
 
PDF
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
bobmcwhirter
 
PDF
Web Development with Python and Django
Michael Pirnat
 
PDF
Basic Rails Training
Arthit Hongchintakul
 
PDF
SFScon 2020 - Nikola Milisavljevic - BASE - Python REST API framework
South Tyrol Free Software Conference
 
PDF
Introducing: ZenLabs
zenlabs
 
TorqueBox
bobmcwhirter
 
Learning Web Development with Ruby on Rails Launch
Thiam Hock Ng
 
EuroPython 2013 - Python3 TurboGears Training
Alessandro Molina
 
Refactoring a web application with Python
Cristian Gonzalez Sanchez
 
The New And Improved Flask Mega-Tutorial Miguel Grinberg
bumpbgsyyy017
 
Exploring Ruby on Rails and PostgreSQL
Barry Jones
 
Aniruddha Chakravarty resume
Aniruddha Prabhash Chakravarty
 
CollegeDiveIn presentation
Karambir Singh Nain
 
Ruby On Rails Basics
Amit Solanki
 
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
cNguyn506241
 
Session 1 - Getting Started With Rails.pptx
betof93940
 
Jumpstart Django
ryates
 
Django at Scale
bretthoerner
 
Web application intro + a bit of ruby (revised)
Tobias Pfeiffer
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
bobmcwhirter
 
Web Development with Python and Django
Michael Pirnat
 
Basic Rails Training
Arthit Hongchintakul
 
SFScon 2020 - Nikola Milisavljevic - BASE - Python REST API framework
South Tyrol Free Software Conference
 
Introducing: ZenLabs
zenlabs
 
Ad

Recently uploaded (20)

PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Learn Computer Forensics, Second Edition
AnuraShantha7
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
July Patch Tuesday
Ivanti
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Learn Computer Forensics, Second Edition
AnuraShantha7
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
July Patch Tuesday
Ivanti
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 

Autolab Workshop

  • 2. Background ● Started in 2010 by Prof. Dave O’Hallaron ○ 15-213 followed by 15-112 ● Completely student-run ● Timeline: ○ < 2010: Single machine ○ > 2010: VM support ○ > 2011: Autodriver ○ > 2013: Rails upgrade and Tango Web API
  • 3. Some Numbers ● Approximately 2500 students use it every semester ● 77 classes since 2010 between CMU and CMU-Qatar ● 2 coding challenges ● 2014 (as of 3:20PM today): 320,538 -> ~1034 jobs/day 2012 2013 2014
  • 4. Becoming Open Source ● Higher customizability ● Larger adoption rate ● Decoupling of two core components ● CMU spirit ● Add your own features! ○ PDF annotation ○ Online quizzes ○ Distributed Job Queue
  • 5. Overview of Front-end ● Ruby on Rails ○ REST ○ Model-View-Controller (MVC) ■ Model: Internal structure ■ View: What user sees ■ Controller: Supply objects to view for rendering, page redirecting, etc. ○ Javascript, CSS, etc.
  • 6. Overview of Front-end ● Important model relations CUD: CourseUserDatum AUD: AssessmentUserDatum User CUD Course AssessmentAUD Submission
  • 7. Overview of Front-end ● Resources & Routing ○ RESTful CRUD ○ In the process of switching to a more traditional REST interface for models ○ Each Resource Gets 7 routes by default
  • 8. Overview of Front-end ● For example, Users ○ GET /users => index ○ GET /users/new => new ○ POST /users => create ○ GET /users/:id => show ○ GET /users/:id/edit => edit ○ PATCH /users/:id => update ○ DELETE /users/:id => destroy
  • 9. Overview of Tango ● External, standalone, job dispatch service ● Stateless ● Highly flexible ● Web API
  • 10. Overview of Tango Tango creates directory stores files poll for output file optional callback open upload addJob poll callback job queue
  • 11. Overview of Tango Tango VM pool (EC2/CMU) rhel.img rhel.img rhel601.img rhel210.img worker thread initializeVM waitVM copyIn copyOut destroyVM runJob vmms job queue
  • 12. Overview of Tango ● Virtual Machine Management System (VMMS) ● Extending Tango for OpenStack, Docker, Vagrant, Xen etc
  • 13. Autograding Autolab Upon submission #validateHandin #saveHandin #autogradeAfterHandin - #createVm Upon receiving Callback #autogradeDone #saveAutograde - #parseAutoresult Tango creates directory stores files poll for output file optional callback VM pool (EC2/CMU) rhel.img rhel.img rhel601.img rhel210.img open upload addJob poll callback worker thread initializeVM waitVM copyIn copyOut destroyVM runJob /courses/COURSE_ID/assessments/AS SET_ID/handin .c tangoRES T vmms
  • 15. Getting Started... ● What’s the hardest part of joining a project? o Setting up your environment! ● We’ve set up an environment for you! ● See the Autolab README for full instructions o Later, you will need your own DB o ...and possibly your own Tango for Autograding
  • 16. Getting Started... 1. Fork Autolab repo on github (https://github.com/autolab/Autolab.git) 1. You can’t push to our repo, so you need to fork your own 2. ssh [email protected] 3. git clone https://github.com/<github_id>/Autolab.git <your_andrewID> 4. cd <your_andrewID> 5. cp lib/autoConfig.rb.template lib/autoConfig.rb 6. cp config/database.yml.template config/database.yml
  • 17. 6. In autoConfig.rb change: - RESTFUL_HOST = “greatwhite.ics.cs.cmu.edu” - RESTFUL_PORT = 3000 - AUTOCONFIG_COURSE_DIR = “/home/autolab/<andrew_ID>/courses” - RESTFUL_KEY = “demo” - RESTFUL_COURSELAB = “autolab-demo” Getting Started...
  • 18. Getting Started... 7. In config/database.yml change: - database: <andrew_ID>_autolab_development - username: root - password: ‘autolab-demo’ 8. Populate Autolab by running: - bundle exec rake db:create db:migrate - rake autolab:populate 9. Run Autolab! - rails s -p <fav_port_num_between_9000_and_9999> - 54.201.118.81:<port> - Log in via “Developer Login”, enter email “[email protected]”.
  • 19. Contributing to Autolab 1. Fork the repository and create a local clone of your fork a. https://github.com/autolab/Autolab b. https://github.com/autolab/Tango 1. Assign yourself to a new or existing issue on the project a. https://github.com/autolab/Autolab/issues b. https://github.com/autolab/Tango/issues
  • 20. Contributing to Autolab 3. Create a new local branch “fix_issue” and commit a. git checkout -b "fix_issue” b. git add . c. git commit -m “commit_msg. Fixes #<issue_num>” 3. Push the branch to GitHub a. git push origin “fix_issue”
  • 21. Contributing to Autolab 4. Submit a pull request a. navigate to your fork of the project b. click the large green “compare and review” button 4. We will review and merge useful pull requests a. documentation and comments on pull requests are useful in this regard
  • 22. Contributing to Autolab 6. Keep your forked repository synced with the project a. git remote add upstream https://github.com/autolab/Tango.git b. git remote add upstream https://github.com/autolab/Autolab.git c. git checkout master d. git fetch upstream e. git merge upstream/master

Editor's Notes

  • #2: Communicate that this is a community project and we are all shareholders. It’s good for all the CMU students if we become really successful. Give the impression that we are actively working on it and we would like to collaborate. It’s not a black box that develops itself. Teach enough to have an overall idea of how Autolab works and where someone can start reading through the code when someone needs to figure out implement/debug parts of the system. We are not trying to “promote” Autolab. These people are already users. We can not teach them the whole codebase.