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 30, 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
      • This interface must present tasks for each project within the curriculum.
      • Some tasks may be optional, but not bonus. Optional tasks can be skipped if you would like to go back to finish old assignments.
      • Additionally, the interface must list 'bonus tasks' once the main tasks are completed
      • Ideally, this interface would be incorporated within the same window as the snap window, such that tasks can actively be tracked if they are within a single snap project
      • Thoughts about "open-ended add-on projects"/Unlocks
        • Addons:
          • Maze: new costumes
          • Dance party: "add sprites" button, and "edit costume" button, "set background", discoball - make everyone dnace when it is clicked
          • Planets: when clicked, make them fly around and change color, etc
          • Initialization: Add another anima, make cat eat stuff and get bigger,
          • Racetrack race: unlock lesson on loops?
        • How do we integrate open-ended projects?
        • How do we integrate free play?
    • Should provide a Snap interface preloaded with project data
  • Teacher/Admin interface
    • Class interface
      • Should show stats for entire class for a project, across all project, stats for each student by project and across project, stats for class and student by concept
      • Should be able to add students already existing in school to class
  • Global administrator interface
    • Should be able to act like any other role for any class/teacher
    • Should be provided an interface to upload/create Curriculums and Projects
      • Todo: factor this interface out into its own role so that curriculum designers from other universities can create a new curriculum without having admin access over other parts of the website
      • Should be a markdown (or similar? up for debate) editable page for each curriculum and each project within the curriculum
  • Researcher interface
    • TODO: Nail down specific download patterns, whether we provide a way to run scripts locally, etc

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.
  • Should be relatively resistant to network instabilities
    • Cache save files locally with HTML5 localstorage
    • Use HTML5 'offline' features to enable the site to be reloaded if the internet goes down
  • TODO: Student interface restrictions:
    • Should students be presented with a restricted interface?
      • Certain dropdowns could be hidden, certain blocks could be hidden, export, etc.

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
    • Must keep track of all SnapFiles the student owns
    • Must keep track of all the projects the student has worked on, with the associated snap files/versioning information
    • Must keep track of all 'items/badges' unlocked, rewards, etc for gamification
    • Fields/associations
      • Student Number (login name? Or like school issued student number?)
      • Check code (short 'password', but call it a check-code)
        • Could be turned into a 'select the appropriate picture' type approach, where we have a database of maybe 50 pictures and select 8 new ones each time the student successfully logs in
        • Would probably require restricting access to just a school's IP range
      • Classes they are in
      • School they are a part of
      • Data usage consent boolean flags
    • Keep track fo how often they are asking for help (globally)
    • How fast the student types (perhaps with various dates for logs? idk)
    • Keep track of student's progress globally in terms of concepts learned
    • Keep track of student's progress globally in terms of projects completed
      • shouldn't this be underneath a curriculum/class though? Or I suppose the curriculum could be displayed on the student's profile once it is completed, but show the class while in progress
  • Non-Student Users (Admins/Teachers/Researchers)
    • User interface
    • Teachers
      • Should be able to edit their class list
        • Should be able to select from student's already in the school, as well as create new students for the school tied specifically to that class
        • Ability to make new students for the school should be a property that can be changed on the school-by-school basis
        • Interface should also support adding students from CSV based on first/lastname or studentnumber
        • TODO: Should teachers be able to print out a list of passwords (check codes) for students?
          • I really don't like this idea, simply because it enforces bad practices. I would rather teachers simply be able to reset a student's passcode
      • Should not be able to create new classes
    • School Administrator
      • Should be able to do anything within their school except change the name and delete it.
      • Should be able to create new classes
    • Global Administrator
      • Should be able to do anything

Resource Models

  • SnapFiles
    • An XML snap file
    • Issues: Currently the snap files can grow in size very quickly. The XML has embedded b64 binary data for sprites pictures, sounds, window thumbnail, and pentrails picture
      • It might be good to store these PNG's/pictures elsewhere so that we can make a history of a snap project that does not require saving all the sprites each save
      • Figuring out how to save the thumbnail and the line picture would likely be the most difficult - sprite pictures and sounds can hashed/returned to the student as a link, since it shouldn't change often
    • Whether or not it is publicly accessible
      • This is currently implemented as a "base_file" flag, but they should probably be two different flags so that student's can publish their SnapFiles
        • For discussion, should the student's "project" be published (and kept up to date with new silently)? Or just one specific snap file?
    • Owner should be attributed through Rolify (?)
      • This would allow students and teachers / others to "own" a SnapFile
      • However, it would also put one level of separation between a file and its owner
  • StudentProject
    • Collection of SnapFiles representing a working-history of a Student's progress on a Project
    • Should tie back to the base project it represents
  • School
    • Classes at that school
    • School's IP info
    • Out of school access allowed for students
  • SchoolClass
    • Students in the class
    • Teachers for the class
    • Whether or not out-of-school access is allowed (determined based on IP of school - overriden by school if school is set to false)
    • School the class is associated with
    • When/where the class meets
    • Name of the class
  • Curriculum
    • Curriculum/Project Description for Students
    • Curriculum/Project Description for Teachers
    • Projects
  • Project
    • Starting SnapFile
    • Curriculum/Project Description for Students
    • Curriculum/Project Description for Teachers
    • Tasks (ordered list)
  • Curriculum/Project Description
    • Description in markdown
    • Media files for description
    • Ability to analyze project files - this is currently done with python scripts; how do we want to make this available? We could write an API that researchers can access and provide a python SDK
      • Otherwise we would need to implement a sandbox framework to run
      • This must be possible both in terms of automated analysis for instant feedback for students on a project by project basis, as well as for researchers in terms of analyzing large portions of the dataset
      • Perhaps:
        • 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
  • Task
    • Whether or not the task is a bonus task
    • concepts taught by the task
    • Bonus tasks may be more open-ended (just a note)

LaPlaya

  • Charlotte's doing