Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LTI Presentation

Avatar for Bracken Bracken
January 29, 2013
98

LTI Presentation

Avatar for Bracken

Bracken

January 29, 2013

Transcript

  1. Agility • Agile Manifesto • http://agilemanifesto.org/ • Handle Change/ Ownership

    • Specific Methodologies • Scrum/Kanban/XP/Etc. Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan Monday, January 28, 13
  2. Instructure Dev Cycle • Small teams with QA and Product

    • 3 week sprints • Look ahead a couple sprints for UX work • Deploy every 3 weeks Monday, January 28, 13
  3. Cloud/SaaS • buzzy buzz buzz • Cloud • You don’t

    manage physical servers • Can add new servers programmatically • SaaS • No versions! • As a user of a service, you don’t have to host it yourself Monday, January 28, 13
  4. Painful Tool Integrations • Have to make integration specific to

    each system • Probably have to have integration accepted by LMS company • Schools/hosting services have to install your module • Create accounts in multiple systems Monday, January 28, 13
  5. Universal Plugins • Learning Tools Interoperability (LTI) • OAuth-signed POST

    request with specific parameters • Supported by everyone* Monday, January 28, 13
  6. Examples • Learning Content • Blog/wiki login • Tests •

    Text Book List • All the things Monday, January 28, 13
  7. Launch Data context_id context_label context_title context_type launch_presentation_css_url launch_presentation_document_target launch_presentation_height launch_presentation_locale

    launch_presentation_return_url launch_presentation_width lis_course_offering_sourcedid lis_course_section_sourcedid lis_outcome_service_url lis_person_contact_email_primary lis_person_name_family lis_person_name_full lis_person_name_given lis_person_sourcedid lis_result_sourcedid lti_message_type lti_version resource_link_description resource_link_id resource_link_title roles tool_consumer_info_product_family_code tool_consumer_info_version tool_consumer_instance_contact_email tool_consumer_instance_description tool_consumer_instance_guid tool_consumer_instance_name tool_consumer_instance_url user_id user_image custom_* ext_* Monday, January 28, 13
  8. Basic Tool Provider # magic key management provider = IMS::LTI::ToolProvider.new(key,

    secret, params) if !provider.valid_request?(request) response['WWW-Authenticate'] = "OAuth realm=\"http://#{request.env['HTTP_HOST']}\"" throw(:halt, [401, "Not authorized\n"]) end # check timestamp and nonce @username = provider.username if provider.outcome_service? # It's a launch for grading erb :assessment else # normal tool launch without grade write-back provider.lti_msg = "Sorry that tool was so boring" erb :boring_tool end https://github.com/instructure/lti_tool_provider_example Monday, January 28, 13
  9. Basic Tool Provider provider = IMS::LTI::ToolProvider.new(key, secret, saved_launch_data) # post

    the given score to the TC, returns OutcomeResponse # score must be between 0.0 and 1.0 res = provider.post_replace_result!(calculated_score) if res.success? erb :assessment_finished else show_error "Your score was not recorded: #{res.description}" end https://github.com/instructure/lti_tool_provider_example Monday, January 28, 13
  10. Configuration XML <cartridge_basiclti_link xmlns:lticm="http://www.imsglobal.org/xsd/imslticm_v1p0" xmlns:blti="http://www.imsglobal.org/xsd/imsbasiclti_v1p0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lticp="http://www.imsglobal.org/xsd/imslticp_v1p0" xmlns="http://www.imsglobal.org/xsd/imslticc_v1p0" xsi:schemaLocation="http://www.imsglobal.org/xsd/imslticc_v1p0 http://www.imsglobal.org/xsd/

    lti/ltiv1p0/imslticc_v1p0.xsd http://www.imsglobal.org/xsd/imsbasiclti_v1p0 http:// www.imsglobal.org/xsd/lti/ltiv1p0/imsbasiclti_v1p0p1.xsd http://www.imsglobal.org/xsd/ imslticm_v1p0 http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticm_v1p0.xsd http:// www.imsglobal.org/xsd/imslticp_v1p0 http://www.imsglobal.org/xsd/lti/ltiv1p0/ imslticp_v1p0.xsd" > <blti:title>Example Tool</blti:title> <blti:description/> <blti:launch_url>http://localhost:9393/lti_tool</blti:launch_url> <blti:custom> <lticm:property name="special_thing">so_special</lticm:property> </blti:custom> </cartridge_basiclti_link> Monday, January 28, 13
  11. Configuration XML get '/tool_config.xml' do host = request.scheme + "://"

    + request.host_with_port url = host + "/lti_tool" tc = IMS::LTI::ToolConfig.new(:title => "Example Tool") tc.launch_url = url tc.set_custom_param('special_thing', 'so_special') headers 'Content-Type' => 'text/xml' tc.to_xml end Monday, January 28, 13
  12. Links • LTI Docs • http://www.imsglobal.org/LTI/v1p1/ltiIMGv1p1.html • Sinatra Tool Provider

    Example: • https://github.com/instructure/lti_tool_provider_example • LTI Gem source • https://github.com/instructure/ims-lti • Useful blog post with examples of using the gem • http://brianwhitmer.blogspot.com/2012/12/building-youtube-lti-app.html • http://brianwhitmer.blogspot.com/2012/12/lti-authentication.html • Join #canvas-lms on the freenode IRC server if you have questions Monday, January 28, 13