Coder Social home page Coder Social logo

lambda-evaluator's Introduction

An interactive, project sharing site for Snap!.

Code Climate Build Status Test Coverage Inline docs Dependency Status security

What is Snap! Cloud?

This section is TODO

  • Snap! GH Repo
  • Snap! homepage
  • scratch site

Background

The initial design and development of this project was during Spring 2015 for Professor Fox's CS169, "Software Engineering" course at UC Berkeley. The original team members were:

  • Alec Guertin
  • Arjun Baokar
  • Jason Wang
  • Linda Lee
  • Michael Ball
  • Steven Campos

Setting Up

This (currently) project uses Rails 4.2.1 and Ruby 2.2.1, and aims to be always up to date!

The Heroku destination for the app is https://ucbsnap.herokuapp.com

  1. CLONE WITH -r git clone -r [email protected]:snap-cloud/snap-cloud.git
  2. You should have rvm or similar installed.
  3. bin/setup
  4. bundle install --without production
  5. git remote add heroku [email protected]:ucbsnap.git

Dependencies

  • nodeJS (>= v0.10) and npm
    • Used for bower
  • Ruby 2.2.1
  • imagemagick for testing profile and thumbnail management
  • OS X -- if you have brew there will be an install script sometime...

Development Notes

[ TODO: Move this section to a Wiki?]

  • GitHub Flow [link needed...]

  • The awesome print gem

$ rails console
ap SomeObject

Heroku Deployment

To deploy to Heroku, you should simply need to do a git push heroku master. However, the build process is slightly more complex than a traditional Rails app.

Heroku Deployment uses a custom "build pack"

  1. Install nodeJS
  2. Post Node install, install bower
  3. Then run the normal Ruby buildpack
  4. Install with bundler
  5. Serve using the Puma (multithreaded) web server

Pre-Reqs to Deployment:

  1. Make sure you have a Postgres database added to the Heroku environment.
  2. That's it?

License

Please see the file LICENESE for a full copy of the current license for this project (AGPL 3).

lambda-evaluator's People

Contributors

addisonhowe avatar cycomachead avatar emansishah avatar goshuujin avatar jessej-luo avatar kunaljaydesai avatar maxdougherty avatar nathaniellow avatar pashaminkovsky avatar patrickohalloran avatar sahilhasan avatar thuangy avatar william-t avatar yifatamir avatar zhicong avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

lambda-evaluator's Issues

Test Dependencies

We should have a way of communicating test dependencies. Something like "You should probably fix this before continuing on to other parts" or "This error is causing 3 other errors below"

Redesign Autograding API

We should make available 1-2 functions / objects. Not totally sure what the API should feel like, but some ideas...

SnapAutograder seems like a good one.
autograder = new SnapAutograder(world)
SnapAutograder.registerTests({} || function() {})

AutograderConfiguration should be an object or function that lets you configure:

  • where to post results to
  • any log transformations
  • callbacks functions for various events, "onRevertSubmission", "onRunTests", "onShowFeedback"
  • a debugging log level

Switch to using standard bootstrap classes for AG feedback

.success translates to all tests passing
.warning translates to semi-passing or changes mage
.danger translates to failure?

Do we want to show red for failures?
We should only have 3 different states, IMO.

  • success, changes made, (semi-failing || all failing)
    OR
  • success, (changes made || semi-failing), all failing

Or we could just have 2 states which is nice and simple.

Rename AGTest → RegisterAGTests + Cleanup

  • This function should be called in initializeSnapAdditions
  • Called with world as the first parameter....or maybe not. I don't know if it's necessary.
  • Should return an object with test data (And a Feedback log?...Hmm?)

Feedback Needs a set of standard variables and messages

  • $BLOCKNAME could be a variable that is dynamically replaced with either an image or the block text.
  • standard text for I/O error messages. $IO_MISMATCH or something
  • $BLOCK_INPUT $BLOCK_OUTPUT
    • maybe have a way to get positional arguments? [1] [2] ?

After logging we need a generic "text to block" mechanism

When logging data anything that is a text version of a Snap! object should be tagged as such. If these are JSON logs we can just have a property like "snap-block" "snap-list" "snap-sprite", or use data-* attributes in HTML formatted data.

When we render the log to students we should then search for those items and turn them into images.

Design A Configuration API

Related to #29

Mostly, I think it should be as self-contained as possible.

Import snap-autograder.js and then that's all you'd need.

let autograder = new Autograder(config)

autograder.runAllTests()

config = {
    callbacks: {}, // TODO
    previousSubmission: (??, ??) => { return snap_xml },
    bestSubmission: (??, ??) => { return snap_xml },
    logSubmission: (submissionLog, serializedXML) { return result? }
}

Test cases can chose to be shown or not

By default a test should always be shown, however, it would be nice to have a test case that's hidden until some event happens. Perhaps there can be a showWhen or shownIf function that is called for each test case.

What should such a function be called with? The log so far? Test results?

Rethinking Display of Tests

Each Test should have a title -

After expanding the test we should show a more detailed representation of the test outputs, and include a diff of the output.

Question: How can we display a list morph in a decent way?

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.