forked from openedx/edx-platform
-
Notifications
You must be signed in to change notification settings - Fork 3
Five ways to extend edX
Sef Kloninger edited this page Mar 15, 2014
·
11 revisions
Originally written by Sef ([email protected]), transcribed by Ned
I can think of five ways that someone could extend edX. Here they are in order of difficulty:
- jsinput -- Create a "Custom JavaScript Grade and Display" component, and then provide JS with getState(), setState(), and getGrade() methods.
- LTI -- edX supports LTI 1.1 now, LTI 2.0 in development
- custom grader -- Code can be run on an external server to do arbitrary work to grade problems. With our Database Class we've had some success returning not just grades, but also an HTML block to be rendered with an answer. We return the query result, complete with HTML table formatting tags. See this screenshot as an example.
- XBlock
- hack on core code
Here’s my initial attempt at a grid to summarize , but I’m sure there are more rows that we’d want to consider:
JSinput | LTI | External Grader | XBlock | Hack The Core! | |
---|---|---|---|---|---|
Development Cost | Low | Low | Med | Med | High |
Language | JS | any | any | Python | Python |
Need dev environment | no | no | yes | yes | yes |
Self-host component | no | yes | yes | no | no |
Need edX involvement | no | no | yes | yes | yes |
Clean UI Integration -- LTI components are basically iFramed in with their own UI, so their styling will probably not look right. | yes | no [1] | yes | yes | yes |
Mobile friendly | maybe | maybe | yes | yes | yes |
Server Side Grading | no [2] | yes | yes | yes | yes |
Usage Data -- some basic logging exists for everything, this is for more detailed logs | no [3] | no | limited | yes (?) | yes |
Provision in Studio -- the containers for all these kinds can be created from Studio, but only XBlocks re cleanly listed and configurable in Studio | no | no | no | yes | no |
Notes:
- [1] Only LTI components delivered via https can be iframed in Many are served over http only. And even then they usually have their own look and feel. For example, Piazza can be iFramed in, but has its own navigation elements and their color scheme (see http://networking.class.stanford.edu/ for an example).
- [2] JSInput does have a small place where python could do server side grading, but doing it there would be pretty hacky and difficult to maintain.
- [3] JSInput really only exposes the getState, putState, getGrade methods. But is there any reason why we can’t also document / publish the tracking endpoint (/events/user_track I believe)