Skip to content
This repository has been archived by the owner on Mar 9, 2019. It is now read-only.

Design Notes

Johan Henkens edited this page Apr 26, 2014 · 12 revisions

Overview

This document aims to outline and version the changing requirements for the Octopi website. Specific features may be duplicated into Github issues, in which case a reference should be added here to the corresponding issue. In tracking milestones, it may be best to use Github's milestone feature with associated issues.


###Requirements for new Octopi website ###Security:

  • Students should
    • be able to read public snap files, and snap files they own
    • be able to create new snap files, but they must be associated as the owner
    • be able to update snap files they own
    • should be able to mark a file as publicly readable
      • "Publish" the project, so that the wider world can "comment" on it
      • Comments should be restricted to preapproved phrases or emoticons
      • Project (should/shouldn't) be viewable as source
        • If not viewable as source, we would need a play-only snap engine and restrictions around that..
      • Public should not be able to glisten and student information about project, comments should be anonymous
  • Teachers should
    • be able to read public snap files, and snap files of the students in their classes
  • School administrators should
    • TODO
  • Global administrators should
    • be able to access all snap files
    • TODO
  • Public view

  • Researchers should
    • NOT be able to associate a snap file with a specific student
    • TODO

Interfaces

  • Student interface
    • Login should require very little typing
      • Drop-down boxes for School
      • Potentially drop-down box for class, and even student-login string
        • This may depend on availability of IP restriction of student logins to within a school IP range to prevent public data leak
      • Browser should remember selection for School and Class drop down boxes
    • Should present student with "programming" for current lesson
      • This may be automatically determined and presented, or selected from a list of the class's entire programming
      • Programming page should provide text and multimedia (pictures, videos, audio) to students to prepare them for the current lesson
        • Ex: videos for: set up of the project, prompting the "explore" section, working solution of the project (to clarify end result) (Note: could this be a view only snap file in a future version? Like only show/allow interaction with the window), demonstration of critical concepts
    • Should provide a Snap interface preloaded with project data

Snap Interface

As SNAP! is the main focus around all the work, adding its own section to catalogue what modifications must be made to our inevitable SNAP! fork, makes sense.

  • Snap should provide ability for student to save his work with one click
    • Should also provide ability for student to add notes to each save, if desired
  • Should provide some form of automatic versioning of the student's code
    • Potentially a snapshot taken after each click of the 'run' flag, or a more intelligent algorithm to provide better versioning in less space
  • Should have separate buttons for your own testing and for getting help with your problem
  • Snap interface should collect student metrics
    • Typing speed (gathered from broadcast name field, sprite name field, problem description field)
      • It may be useful to have the ability to prompt for a 'typing speed test' at the start of the project - this could be disguised as 'name your sprite to start the project' type dialogue.

Models

Much of the authorization is being done by Rolify. This allows us to assign 'roles' for all users or for specific users over types and specific instances of resources.

User Models

  • Students
  • Users

Resources

  • SnapFiles
  • School
  • SchoolClass

should be a markdown (or similar? up for debate) editable page

  • Non-student interface
    • Teacher interface
    • School-admin interface
    • Global-admin interface

How do we integrate open-ended add-ons to project? When they complete the required project, they “unlock” things – Maze: new costumes Dance party: “add sprites” button and “edit costume” button, “set background”, disco ball – make everyone dance when it is clicked planets – when clicked, make them fly around, change color, etc. Initialization: Add another animal, make cat eat stuff and get bigger Racetrack race! Unlock lesson on loops? How do we integrate open-ended projects? Name poem, complex animation (right after dance party?) How do we integrate free play?

Storage: Students: Store projects, progress, items unlocked, badges, rewards, etc. Teachers: Stats for class by project and across projects, stats for student by project and across projects, stats for class and student by concept Researchers: Projects, snapshots Project: Who made it, whether it is public, snapshots associated with it

LaPlaya – Charlotte’s doing Login interface Delivering projects to the student communicating between LaPlaya and server to get feedback Storage format – log file for changes as student is working Badge page

  1. Student projects with associated log files - public or private
  2. Student information (login information) - student number, check code (picture or text), class, school, data usage consent (can we do X with their data? this will be a series of booleans)
  3. Class information: students, teacher, allow out of school access?, school, lab session times
  4. School: classes at that school - stored in a cookie on computer - autofill the dropbox, school’s IP info, allow out of school access?
  5. Student information (progress) - For each project, what milestones reached, latest version of project, Global progress: how often they are asking for help, how long it takes them to type, record what “rewards” they have already received, the progress, broken down by concept and project.
  6. The curriculum itself - each blank project, the open-ended bonus tasks for each project, concepts tied to specific milestones, python code that analyzes the project and gives feedback for students and for researchers

Functionality: Ability to download a class set of projects When videos are uploaded, recompress them to make them a more compact format

CS Ed Researchers: Insert a python module Run a python module (chosen from set that’s been inserted) on a certain student project / class set of projects / multiple classes sets of projects

Curriculum setup view: Insert projects, bonus tasks, teacher prep stuff

Curriculum is a sequence of projects Each project: starting file, bonus tasks, teacher prep stuff: video for teacher, video for students,

Teachers should be able to edit their class list School administrators should be able to edit any class in the school Global administrators should be able to edit any class in any school Global admin will have two basic interfaces - one, is specifically for Allow set up of class student list via web form or via CSV

To add to schema: Project information for students and teachers I presume this should also be stored in the database so that everything can simply be dynamic pages

Snap file save information: Relatively simple xml save files, but they balloon pretty quickly in size! This is because the thumbnail, pentrails, and any user-generated sprites are saved as PNGs within the xml. Still not unmanageable in size - we can save to the HTML5 provided localStorage automatically for versioning and asynchronously save to the server every now and then. We still have the issue of whether or not to generate any form of log file, but that can most likely come later. Initial versions we can likely simply store the entire XML file within the database upon save, but we may want to later optimize to take out the PNGs and store them elsewhere, or to store the XML file itself ‘on disk’ rather than in the database.

Activity is comprised of multiple projects, some projects which can be entirely bonus Prep material on the activity and on the project level, for both students and teachers