I’m interested in expanding the use of Cloud9 with our courses – the new ‘teacher’ tier is fantastic for this purpose. There’s a way to make this much simpler for instructors that I’d like to request.
LTI (“learning tools interoperability”) is a standard that lets external “tool providers” receive information from “tool consumer” (e.g. a learning system such as Canvas, Edx, etc). There’s a tutorial of LTI at https://www.eduappcenter.com with many example LTI applications (like Piazza).
The “setup” for LTI is to do a key-exchange (uses 2-leg oauth2). Instructors use the key to create an “LTI resource” within a course. When students click on that “LTI resource” they are taken to the tool provider, either in an IFRAME or separate window. The LTI tool is provided student information (name, email, role, etc) and information about the “context” that cause the tool to be invoked.
The value to instructors in this case would be that they could have a single setup phase to direct many students to a tool such as Cloud9. The Cloud9 service would receive information that would allow them to automatically register students enrolled in that class. For large classes (we have 200-400 person classes), this greatly reduces the effort of using Cloud9 – and only students enrolled in that course can access it.
Moreover, you could image that some resources (e.g. specific project type) could be associated with a course context so that students would immediately have precisely the tools needed for their learning.
LTI is implemented in Edx, Canvas, Moodle, D2L, WebCT, Sakari and pretty much every other learning management system that’s out there.
If you use Python for your front-ends, there’s a simple PyLTI framework that lets you decorate a Flask application to require LTI authentication. For example, the following code is from https://github.com/mitodl/mit_lti_flask_sample and shows how a Flask request can require that a user have initiated a session and be an Instructor (rather than student):
@app.route('/index_staff', methods=['GET', 'POST'])** @lti(request='session', error=error, role='staff', app=app)** def index_staff(lti=lti):** """ render the contents of the staff.html template** :param lti: the `lti` object from `pylti`** :return: the staff.html template rendered** """** return render_template('staff.html', lti=lti)**
There are sample LTI “consumers” (e.g. something pretending to Canvas, etc) and producers at ltiapp.net
There are also LTI libraries for Ruby etc. There’s a pretty code brain dump at the edu-apps.org site
As an aside, I’m at a meeting organized by the National Science Foundation on how small schools can use cloud computing in their education and there was tremendous interest in Cloud9 and all of them said something like LTI integration would be useful to simplify use of c9 (which they didn’t know about before).