CHIPS (Programming assignments)

To complement the Content-Oriented Didactic (COD) materials such as the book and lectures, CHIPS (Coding & Hands-on Integrated Projects) provide hands-on skills practice and are keyed to specific sections in the book. This section describes how to use them with Codio. The book's website has other options if you don't wish to use Codio.
The relative effort of each CHIPS is indicated by one star (a couple of hours of work), two stars (several hours of work), or three stars (a potentially multi-day assignment).
In general, each CHIP (say foo) has a public repo hw-foo and a private repo (visible to registered instructors) hw-foo-ci. The repo hw-foo contains the student-facing information such as instructions and starter code. This repo is automatically generated from hw-foo-ci, which also contains the autograder files, a human-readable reference solution for instructors, and the files needed for the Codio inline guides (essentially the same content as the public repo's README, but integrated into Codio alongside the assignment itself, so students using Codio don't need to refer to the separate hw-foo repo for instructions).
Do not open pull requests to the public student-facing repos as they are regenerated whenever the -ci repos change. Registered instructors can open PRs to the -ci repos if they find errors.
Here's a quick summary of the assignments, presented in the order in which they appear in the ESaaS textbook. There are three types:
  1. 1.
    Autograded: The solutions repos include reference solutions, Codio-based autograders in the Codio course, and files for manually configuring Gradescope-based autograding. (Gradescope is no longer officially supported, so use those files at your own risk.)
  2. 2.
    Self-graded: CHIPS involves coding, but rather than an autograder, includes tests students run themselves.
  3. 3.
    Comprehension: CHIPS involves minimal or no coding, but rather performing some tasks and answering self-check questions about them. The questions are usually built into the Codio version of the assignment.
You can add -ci to the link name of any repo below to access the solutions repo.
  • 2.5 Ruby Intro (autograder/solutions): gentle intro to Ruby idioms, including running instructor-provided unit tests to check your answers
  • 3.3 HTTP and URIs (comprehension): intro to HTTP requests, URIs, and cookies, using curl and netcat to see raw data, using the esaas-cookie-demo app (source).
  • 3.7 Create and Deploy a Simple SaaS App (autograder/solutions): de-mystifies the creation of a SaaS app (a simple word-guessing game using Sinatra) including use of an external service, and how to think about RESTfully "wrapping" application logic in SaaS.
  • 4.3 ActiveRecord Basics (self-graded): write ActiveRecord queries against a provided seeded database.
  • 4.5 Rails Routes (self-graded): not actually a homework assignment, but a simple app that lets students enter syntactically valid Rails routes and understand the RESTful routes that Rails would generate for them.
  • 4.7 Word Guesser on Rails (comprehension with reference solutions): use the same Hangperson game logic and Cucumber scenarios as CHIPS 3.7, but scaffolds a walkthrough of how to deploy the app with Rails instead of Sinatra, as an on-ramp understanding the complex Rails framework.
  • 4.9 Hello Rails (self-graded): create a brand-new Rails app (RottenPotatoes) from scratch, including routes, database setup, using the debugger, and deploying to Heroku.
  • 5.3 Rails Intro (autograder/solutions): enhance RottenPotatoes to filter and sort movie lists. (Coming soon: also add SSO login to RottenPotatoes.)
  • 5.7 Associations (TBD)
  • 6.9 AJAX Enhancements to RottenPotatoes (TBD)
  • 7.7 Intro to BDD and Cucumber (autograder/solutions): write features to test happy and sad paths of RottenPotatoes.
  • 8.5 RSpec on Rails: (Note: This CHIPS is in the process of being replaced. We recommend just using 8.9 until that time.) Given a Cucumber scenario for a not-yet-implemented feature, students use TDD and RSpec to write tests that drive the creation of the code to make the scenario pass. Students also learn to use Travis CI to automate testing workflow.
  • 8.9 BDD/TDD Cycle: a complete pass through the BDD and TDD cycle of specifying a feature in terms of stories and then using TDD with RSpec to drive the development and deployment of the feature.
  • 10.5 Agile Iterations Two (or more) full iterations of Agile adding features to an existing (legacy) app
  • 12.8 Exploiting Caching and Indices: improve the performance of RottenPotatoes by adding database indices to speed up key queries.

Optional additional CHIPS (not referenced in textbook)

  • Oracle of Bacon: Build a simple command-line app that uses external services in a SOA, including parsing XML responses.
  • Design Review: We use this in the project portion of the course. This is not a programming assignment but rather a 3-part scaffolded process for doing design reviews and technical presentations. (Each part can be used more or less independently.) It is intended to be used in conjunction with student teams doing their own open-ended projects, so no code is provided. In part 1 (Design Review), teams are paired up and each team evaluates the other's design and gives feedback on possible improvements. In part 2 (Presentation), teams give technical presentations about the design review; these are peer-evaluated (or instructor-evaluated) according to a provided rubric. In part 3 (Handoff), teams modify their repos as needed to ensure the project is easy for another team to pick up and continue working on.