SlideShare une entreprise Scribd logo
1  sur  23
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

Contenu connexe

Tendances

Andrew Mykhaliuk - Sorry, I need to make a build for frontend
Andrew Mykhaliuk - Sorry, I need to make a build for frontendAndrew Mykhaliuk - Sorry, I need to make a build for frontend
Andrew Mykhaliuk - Sorry, I need to make a build for frontend
OdessaJS Conf
 

Tendances (20)

Webpack
WebpackWebpack
Webpack
 
Grunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous IntegrationGrunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous Integration
 
Isomorphic web application
Isomorphic web applicationIsomorphic web application
Isomorphic web application
 
Webpack DevTalk
Webpack DevTalkWebpack DevTalk
Webpack DevTalk
 
Improving build solutions dependency management with webpack
Improving build solutions  dependency management with webpackImproving build solutions  dependency management with webpack
Improving build solutions dependency management with webpack
 
Webpack
Webpack Webpack
Webpack
 
Andrew Mykhaliuk - Sorry, I need to make a build for frontend
Andrew Mykhaliuk - Sorry, I need to make a build for frontendAndrew Mykhaliuk - Sorry, I need to make a build for frontend
Andrew Mykhaliuk - Sorry, I need to make a build for frontend
 
Webpack Introduction
Webpack IntroductionWebpack Introduction
Webpack Introduction
 
Server Side Rendering, caching and performance
Server Side Rendering, caching and performanceServer Side Rendering, caching and performance
Server Side Rendering, caching and performance
 
Bundle your modules with Webpack
Bundle your modules with WebpackBundle your modules with Webpack
Bundle your modules with Webpack
 
Build RESTful API Using Express JS
Build RESTful API Using Express JSBuild RESTful API Using Express JS
Build RESTful API Using Express JS
 
Server-side JavaScript for the rest of us
Server-side JavaScript for the rest of usServer-side JavaScript for the rest of us
Server-side JavaScript for the rest of us
 
Webpack slides
Webpack slidesWebpack slides
Webpack slides
 
Node.js 201: building real-world applications in pure JavaScript
Node.js 201: building real-world applications in pure JavaScriptNode.js 201: building real-world applications in pure JavaScript
Node.js 201: building real-world applications in pure JavaScript
 
Server-side React with Headless CMS – Exove
Server-side React with Headless CMS – ExoveServer-side React with Headless CMS – Exove
Server-side React with Headless CMS – Exove
 
Capybara
CapybaraCapybara
Capybara
 
Module design pattern i.e. express js
Module design pattern i.e. express jsModule design pattern i.e. express js
Module design pattern i.e. express js
 
NodeJS: n00b no more
NodeJS: n00b no moreNodeJS: n00b no more
NodeJS: n00b no more
 
Web workers and service workers
Web workers and service workersWeb workers and service workers
Web workers and service workers
 
Packing for the Web with Webpack
Packing for the Web with WebpackPacking for the Web with Webpack
Packing for the Web with Webpack
 

En vedette (8)

Book
BookBook
Book
 
AUTOLAB ( A Laboratory Instrument)
AUTOLAB ( A Laboratory Instrument)AUTOLAB ( A Laboratory Instrument)
AUTOLAB ( A Laboratory Instrument)
 
Protector Glove Box Overview Presentation
Protector Glove Box Overview PresentationProtector Glove Box Overview Presentation
Protector Glove Box Overview Presentation
 
Lab equipment.ppt 2013
Lab equipment.ppt 2013Lab equipment.ppt 2013
Lab equipment.ppt 2013
 
Analytical instrument
Analytical instrumentAnalytical instrument
Analytical instrument
 
Laboratory Equipment - Use of Equipment
Laboratory Equipment - Use of EquipmentLaboratory Equipment - Use of Equipment
Laboratory Equipment - Use of Equipment
 
1.4 Laboratory Equipment: Names & Uses
1.4 Laboratory Equipment:  Names & Uses1.4 Laboratory Equipment:  Names & Uses
1.4 Laboratory Equipment: Names & Uses
 
Lab equipment
Lab equipmentLab equipment
Lab equipment
 

Similaire à Autolab Workshop

Counterclockwise past present future
Counterclockwise  past present futureCounterclockwise  past present future
Counterclockwise past present future
lolopetit
 

Similaire à Autolab Workshop (20)

Introduction to rails
Introduction to railsIntroduction to rails
Introduction to rails
 
Daniel Steigerwald: EsteJS - javascriptové aplikace robusně, modulárně a komf...
Daniel Steigerwald: EsteJS - javascriptové aplikace robusně, modulárně a komf...Daniel Steigerwald: EsteJS - javascriptové aplikace robusně, modulárně a komf...
Daniel Steigerwald: EsteJS - javascriptové aplikace robusně, modulárně a komf...
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
 
Dust.js
Dust.jsDust.js
Dust.js
 
202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP
 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears Training
 
Angular 2 vs React
Angular 2 vs ReactAngular 2 vs React
Angular 2 vs React
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
 
Intro - End to end ML with Kubeflow @ SignalConf 2018
Intro - End to end ML with Kubeflow @ SignalConf 2018Intro - End to end ML with Kubeflow @ SignalConf 2018
Intro - End to end ML with Kubeflow @ SignalConf 2018
 
Sprint 17
Sprint 17Sprint 17
Sprint 17
 
Creating a custom API for a headless Drupal
Creating a custom API for a headless DrupalCreating a custom API for a headless Drupal
Creating a custom API for a headless Drupal
 
Angular js
Angular jsAngular js
Angular js
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
Doctrine Project
Doctrine ProjectDoctrine Project
Doctrine Project
 
Counterclockwise past present future
Counterclockwise  past present futureCounterclockwise  past present future
Counterclockwise past present future
 
Scraping the web with Laravel, Dusk, Docker, and PHP
Scraping the web with Laravel, Dusk, Docker, and PHPScraping the web with Laravel, Dusk, Docker, and PHP
Scraping the web with Laravel, Dusk, Docker, and PHP
 
Next.js with drupal, the good parts
Next.js with drupal, the good partsNext.js with drupal, the good parts
Next.js with drupal, the good parts
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
 

Dernier

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Dernier (20)

Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

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 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
  • 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 “admin@foo.bar”.
  • 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
  • 23. Questions and Comments Questions and Comments autolab-dev@andrew.cmu.edu

Notes de l'éditeur

  1. 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.