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

LTI Presentation

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Bracken Bracken
January 29, 2013
90

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