Last modified: 11 November 2011
The motivation for this project come from:
- Needing a way to let other people than Sal curate our content
- Need a way to have multiple authors other than Sal (Vi, Smarthistory, etc)
- Videos and Exercises are living in to separate worlds (with just related Video/Exercises) between them. There is the need to be able to see both of them as just types of content, so their worlds can be more seamlessly joined
- Algebra questions are in many different playlists, and hence we have the need for topics and subtopics
- Knowledge map is getting quite large and might prove difficult to manage
- We don't currently have good infrastructure to support Internationalization of Content
- Figure out the data models that can handle the types of objects and the relationships between them that we need.
- Spec out the requirements
- Figure out the possibilities for data models that fit those requirements
- Pick the best model, for logical simplicity and performance.
- Implement the new models
- Load initial data into the models based upon current entities in the datastore and from spreadsheets that the imps team is making
- Leave the front-end the same, but change how data is gathered to use the new data models
- Creating a CMS that can allow anyone to manipulate the objects and the relationships between them, and add content
- Work on coming up with new designs for our site that make use of the new objects and relationships
Step 1 - Figuring out our data model needs
Our goal here is to be able to figure out what data models best represent all the types of content we will have and all the different relationships we want between them. It should be logical enough to make clear sense to everyone, and flexible enough to be able to handle any front end design we want in an efficient way - including our current design.
At the fundamental level we need three different types of objects: Topics/Concepts and Content and UserContent.
Step 2. Implementing the new data models
- Topics need to have the following properties:
- Have a name and a description that can be localized into different languages
- Belong in any number of different other topics
- ?? Have prerequisite topics - this might also be able to be computed by checking whether any child/descendant content of that topics has a prerequisite in another topic (will we ever have a situation where content in topic A might require content in topic B, and some other content in topic B require content in topic A - this might create problems)
- ?? Be able to contain both content and topics at the same time
- ?? Have prerequisite content (before you start on items in this topic you better check out a video) - this suggests that we would possibly one day have a view where content and topics are merged
- Their subtopics need to be able to be made into list form, where items at the start of the list have no prerequisites to any other item in the list, and any item there after can either have no prerequisites, or be required by items only before it in the list
- ?? For items at the same level in the prerequisite tree (or don't require each other) is there a preferred order we want to display them - and hence the list can be recreated the same way each time?
- ?? alphabetical?
- ?? adjusted by the admin?
- The content within a topic needs to be able to made in list form (again items with prerequisites must appear after the items they require)
- ?? Can we use the horizontal and vertical positions in the current exercise knowledge map to break ties?
- Be able to quickly access all descendant content and display it in list form
- ?? How will we decide when to show the descendant content and when to just show the content in the current topic
- ?? Depth (Show Math->Arithmetic)
- ?? Setting on the topic
- There are various types of content, such as videos and exercise and eventually activities, projects, etc.
- All types of content have the following common properties:
- Be localizable (so we can access different language versions of the same content)
- Belong in any number of different Topics
- Have prerequisite content (like exercises have now)
- Prerequisite content can cross Content Types (to do an exercise you need to know whats going on in a video, to be able to fully understand a video you need to have mastered an exercise, to do a project you might require several different exercises and videos)
- Have covered content (like exercises have now)
- ?? Does covered content cascade? If you finish X which covers Y and Y covers Z, does X automatically cover Z or do we have to explicitly mark it as such.
- Covered content can cross content types (If you have become proficient in this exercise, it shows you know what was going on in Sal's video)
- Creation Date
- Last Modified Date
- ?? Should we allow for multiple authors per piece of localized content
- ?? Short Title (or is this only needed for exercises)
- All types of content may also have their own individual properties (duration for video, seconds_per_fast_problem for exercises, etc..)
- There is a type of UserContent for every type of content that keeps track of a users interactions with that content
- All UserContent types need the following common properties:
- Have a not started state
- Have a started state
- Have a finished state (watched a video, become proficient in an exercise, did a project) - which we use to determine what next to suggest to them based upon all prerequisites being covered
- ?? Be able to distinguish between finished in that they actually did
the content, and forced finished in that they did some content that
- All UserContent types may also have their own individual properties (a struggling state for exercise, seconds watched for videos)
?? Use http://code.google.com/appengine/docs/python/datastore/polymodelclass.html to represent the types of content as a subclass of a generic Content model