{"id":1654,"date":"2025-02-04T09:58:22","date_gmt":"2025-02-04T09:58:22","guid":{"rendered":"https:\/\/www.cmsgalaxy.com\/blog\/?p=1654"},"modified":"2025-02-04T09:58:24","modified_gmt":"2025-02-04T09:58:24","slug":"how-to-create-and-manage-virtual-labs-and-interactive-exercises-in-open-edx","status":"publish","type":"post","link":"https:\/\/www.cmsgalaxy.com\/blog\/how-to-create-and-manage-virtual-labs-and-interactive-exercises-in-open-edx\/","title":{"rendered":"How to create and manage virtual labs and interactive exercises in Open edX?"},"content":{"rendered":"\n<p>Creating and managing <strong>virtual labs and interactive exercises<\/strong> in <strong>Open edX<\/strong> enhances hands-on learning experiences, especially for STEM, coding, and technical courses. Open edX supports virtual labs using <strong>LTI integrations, Jupyter Notebooks, Code Editors, and External Tools<\/strong>. Below is a step-by-step guide on how to <strong>create, integrate, and manage virtual labs<\/strong> in Open edX.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Choose the Type of Virtual Lab<\/strong><\/h2>\n\n\n\n<p>Open edX supports several methods for adding <strong>interactive exercises and virtual labs<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Type<\/strong><\/th><th><strong>Description<\/strong><\/th><th><strong>Common Tools<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>LTI (Learning Tools Interoperability)<\/strong><\/td><td>Integrates third-party tools<\/td><td>JupyterHub, Labster, MATLAB, Unity<\/td><\/tr><tr><td><strong>Jupyter Notebooks<\/strong><\/td><td>Interactive coding exercises<\/td><td>JupyterHub<\/td><\/tr><tr><td><strong>Embedded Code Editors<\/strong><\/td><td>Code execution inside Open edX<\/td><td>CodeJail, nbgrader, CodeOcean<\/td><\/tr><tr><td><strong>Virtual Simulations<\/strong><\/td><td>Hands-on simulations for science &amp; engineering<\/td><td>Labster, PhET, OpenLab<\/td><\/tr><tr><td><strong>Custom XBlocks<\/strong><\/td><td>Custom-built interactive exercises<\/td><td>Problem Builder, Drag &amp; Drop, SCORM<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Set Up a Virtual Lab in Open edX<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 1: LTI Tool Integration (For External Labs)<\/strong><\/h3>\n\n\n\n<p>If using <strong>Labster, MATLAB, or JupyterHub<\/strong>, integrate via <strong>LTI (Learning Tools Interoperability)<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 1: Enable LTI Consumer in Open edX<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Go to Open edX Studio<\/strong> (<code>\/studio<\/code>).<\/li>\n\n\n\n<li>Navigate to <strong>Settings &gt; Advanced Settings<\/strong>.<\/li>\n\n\n\n<li>Find <code>\"lti_consumer_enabled\"<\/code> and set it to: <code>\"true\"<\/code><\/li>\n\n\n\n<li><strong>Save Changes<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 2: Add the LTI Tool<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the course in <strong>Studio<\/strong>.<\/li>\n\n\n\n<li>Click on <strong>\u201cAdd New Component\u201d \u2192 Advanced<\/strong>.<\/li>\n\n\n\n<li>Select <strong>LTI Consumer<\/strong>.<\/li>\n\n\n\n<li>Enter the following details:\n<ul class=\"wp-block-list\">\n<li><strong>LTI URL<\/strong> (provided by the external tool)<\/li>\n\n\n\n<li><strong>Consumer Key &amp; Secret<\/strong> (given by the external provider)<\/li>\n\n\n\n<li><strong>LTI Launch Target<\/strong> (<code>New Window<\/code> recommended for external tools)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Save<\/strong> and preview the lab.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 2: Jupyter Notebook Integration<\/strong><\/h3>\n\n\n\n<p>Jupyter Notebooks allow <strong>interactive coding<\/strong> exercises.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 1: Enable JupyterHub<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install JupyterHub on a cloud server.<\/li>\n\n\n\n<li>Get the <strong>JupyterHub LTI Plugin<\/strong> and configure it with Open edX.<\/li>\n\n\n\n<li>Add it as an LTI component (see <strong>Method 1<\/strong>).<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 2: Embed Jupyter Notebooks<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you don&#8217;t need LTI, you can embed Jupyter notebooks using <strong>NBViewer<\/strong>.<\/li>\n\n\n\n<li>Add an <strong>iframe<\/strong> to an HTML component: <code>&lt;iframe src=\"https:\/\/nbviewer.jupyter.org\/url\/YOUR-NOTEBOOK-URL\" width=\"800\" height=\"600\"&gt;&lt;\/iframe&gt;<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 3: Embedding Code Editors (Python, Java, C, R)<\/strong><\/h3>\n\n\n\n<p>Open edX allows <strong>in-course code execution<\/strong> using:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CodeJail<\/strong> (for Python execution)<\/li>\n\n\n\n<li><strong>External Editors<\/strong> (JSFiddle, CodePen)<\/li>\n\n\n\n<li><strong>Google Colab \/ Replit<\/strong> (for Python &amp; other languages)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 1: Enable CodeJail<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install CodeJail on the Open edX server: <code>pip install codejail<\/code><\/li>\n\n\n\n<li>Configure CodeJail in the Open edX settings (<code>lms.env.json<\/code>): <code>\"ENABLE_CODEJAIL\": true<\/code><\/li>\n\n\n\n<li>Restart Open edX.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Step 2: Embed a Code Editor<\/strong><\/h4>\n\n\n\n<p>For an <strong>in-browser code editor<\/strong>, use Replit:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Add an <strong>HTML component<\/strong> in Studio.<\/li>\n\n\n\n<li>Paste: <code>&lt;iframe height=\"400px\" width=\"100%\" src=\"https:\/\/replit.com\/@yourusername\/sample-code?lite=true\"&gt;&lt;\/iframe&gt;<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 4: Virtual Simulations (Physics, Chemistry, Biology)<\/strong><\/h3>\n\n\n\n<p>For interactive simulations:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Use PhET or Labster<\/strong><ul><li>Embed simulations using <code>&lt;iframe&gt;<\/code>.<\/li><\/ul><code>&lt;iframe src=\"https:\/\/phet.colorado.edu\/sims\/html\/pendulum-lab\/latest\/pendulum-lab_en.html\" width=\"800\" height=\"600\"&gt;&lt;\/iframe&gt;<\/code><\/li>\n\n\n\n<li><strong>Upload SCORM Packages<\/strong>\n<ul class=\"wp-block-list\">\n<li>If the lab is a SCORM package, enable SCORM in Open edX settings: <code>\"ENABLE_SCORM\": true<\/code><\/li>\n\n\n\n<li>Upload the SCORM package in <strong>Studio<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Manage &amp; Track Virtual Lab Performance<\/strong><\/h2>\n\n\n\n<p>Once labs are set up, you need to <strong>track learners&#8217; engagement<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 1: Open edX Insights<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <strong>Open edX Insights Dashboard<\/strong>.<\/li>\n\n\n\n<li>Track <strong>lab completion, time spent, and performance<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 2: LTI Reports<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If using <strong>Badgr or Labster<\/strong>, download <strong>LTI analytics reports<\/strong>.<\/li>\n\n\n\n<li>Analyze <strong>grades and participation<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 3: Custom Tracking with XBlocks<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install <strong>Problem Builder XBlock<\/strong> for tracking interactive exercises.<\/li>\n\n\n\n<li>Use Open edX <strong>event logs<\/strong> for user interactions.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Troubleshooting &amp; Best Practices<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Issue<\/strong><\/th><th><strong>Solution<\/strong><\/th><\/tr><\/thead><tbody><tr><td>LTI Lab not loading<\/td><td>Check LTI URL, Consumer Key, and Secret.<\/td><\/tr><tr><td>Code editor not working<\/td><td>Ensure CodeJail is enabled.<\/td><\/tr><tr><td>Jupyter Notebook not displaying<\/td><td>Verify the Jupyter server is running and accessible.<\/td><\/tr><tr><td>SCORM packages not running<\/td><td>Enable <code>\"ENABLE_SCORM\": true<\/code> and upload a valid SCORM file.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Conclusion<\/strong><\/h2>\n\n\n\n<p>Integrating <strong>virtual labs and interactive exercises<\/strong> in Open edX enhances <strong>hands-on learning<\/strong>. Whether using <strong>LTI tools, JupyterHub, code editors, or virtual simulations<\/strong>, Open edX provides flexible ways to incorporate interactive elements.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creating and managing virtual labs and interactive exercises in Open edX enhances hands-on learning experiences, especially for STEM, coding, and<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1654","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts\/1654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/comments?post=1654"}],"version-history":[{"count":1,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts\/1654\/revisions"}],"predecessor-version":[{"id":1655,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/posts\/1654\/revisions\/1655"}],"wp:attachment":[{"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/media?parent=1654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/categories?post=1654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cmsgalaxy.com\/blog\/wp-json\/wp\/v2\/tags?post=1654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}