[
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GettingStarted.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GettingStarted.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/GettingStarted&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the course module for an introductory CS course.",
    "author": [
      "Molly Domino",
      "Steve Edwards"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Software Design"
    ],
    "title": "Introduction to Software Design: Getting Started",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/InheritanceAndPolymorphism.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/InheritanceAndPolymorphism.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/InheritanceAndPolymorphism&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to Inheritance and Polymorphism",
    "author": [
      "Molly Domino",
      "Steve Edwards"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Inheritance",
      "Polymorphism",
      "Subclass",
      "Method"
    ],
    "title": "Inheritance and Polymorphism: Subclasses and Methods",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ConditionalActions.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ConditionalActions.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/ConditionalActions&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "First semester programming course introduction to conditional statements and while loops.",
    "author": [
      "Molly Domino",
      "Steve Edwards"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Conditional Statement",
      "While Loop"
    ],
    "title": "Conditional and Repeating Actions",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SoftwareTesting.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SoftwareTesting.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/SoftwareTesting&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "First semester programming course introduction to software testing.",
    "author": [
      "Steve Edwards"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Software Testing",
      "Method",
      "Unit Testing"
    ],
    "title": "Software Testing",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/VariablesFieldsAndParameters.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/VariablesFieldsAndParameters.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/VariablesFieldsAndParameters&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "First semester programming course introduction to variables, fields, and parameters.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Variable",
      "Parameter"
    ],
    "title": "Variables, Fields, and Parameters",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PicturesAndForEachLoops.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PicturesAndForEachLoops.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/PicturesAndForEachLoops&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "First semester programming course introduction to image representations and for-each loops.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "For-Each Loop",
      "Image Representation"
    ],
    "title": "Pictures and For-each Loops",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AggregationStringsandMoreLoops.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AggregationStringsandMoreLoops.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/AggregationStringsandMoreLoops&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "First semester programming course introduction to aggregation, strings, and more advanced loop control statements.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Aggregation",
      "Composition",
      "String",
      "Loop"
    ],
    "title": "Aggregation, Strings and More Loops",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GroupingObjectsUsingListsAndNestedForLoops.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GroupingObjectsUsingListsAndNestedForLoops.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/GroupingObjectsUsingListsAndNestedForLoops&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "First semester programming course introduction to using lists to group objects.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "List",
      "Set",
      "Map",
      "For Loop",
      "Interface"
    ],
    "title": "Grouping Objects Using Lists and Nested For Loops",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListAndLoopsDeepDive.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListAndLoopsDeepDive.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/ListAndLoopsDeepDive&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "CS1-level more advanced presentation on loops and introduction to generics.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "List",
      "Loop",
      "Generics"
    ],
    "title": "Lists, Loop Idioms, Generics, and the Null Keyword",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Arrays.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Arrays.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/Arrays&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "CS1-level presentation on arrays.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Array"
    ],
    "title": "Arrays",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MultiDimensionalArrays.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MultiDimensionalArrays.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/MultiDimensionalArrays&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "CS1-level introduction to multi-dimensional arrays.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Array"
    ],
    "title": "Multi-dimensional Arrays",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FileIO.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FileIO.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/FileIO&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "CS1-level introduction to variable scoping and file I/O.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Variable Scope",
      "File Processing",
      "Scanner"
    ],
    "title": "Variable Scoping, Input, and Output",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MapsAndSets.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MapsAndSets.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/MapsAndSets&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "CS1-level introduction to maps and sets.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Map",
      "Set"
    ],
    "title": "Maps and Sets",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StaticMainAndExceptions.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StaticMainAndExceptions.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=IntroToSoftwareDesign/StaticMainAndExceptions&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "CS1-level introduction to the static keyword, main method, and exception handling.",
    "author": [
      "Molly Domino"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Static",
      "Exception"
    ],
    "title": "Static, Main, and Exceptions",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/About.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/About.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=CommandLine/About&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the command line, navigating directories in a file system, and manipulating pathnames.",
    "author": [
      "Ryan Buxton"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Command Line",
      "File System"
    ],
    "title": "Introduction to the Command Line",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Exercisescmd.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Exercisescmd.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=CommandLine/Exercisescmd&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of interactive exercises for building command line proficency.",
    "author": [
      "Ryan Buxton"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Command Line",
      "File System"
    ],
    "title": "Exercises for Building Command Line Proficency",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AboutGit.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AboutGit.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Git/AboutGit&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the Git version control system.",
    "author": [
      "Ryan Buxton"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Git",
      "Version Control"
    ],
    "title": "Introduction to Git",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExercisesGit.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExercisesGit.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Git/ExercisesGit&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of interactive exercises for building Git proficency.",
    "author": [
      "Ryan Buxton"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Git",
      "Version Control"
    ],
    "title": "Exercises for Building Git Proficiency",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroDSA.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroDSA.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Background/IntroDSA&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to a course on Data Structures with Software Engineering topics.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Data Structures"
    ],
    "title": "Data Structures and Algorithms Introduction",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroOO.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroOO.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/IntroOO&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to object-oriented programming topics.",
    "author": [
      "Dave Parillo"
    ],
    "institution": [
      "San Diego Mesa College"
    ],
    "keywords": [
      "Object-Oriented Programming"
    ],
    "title": "Introduction to Object-Oriented Programming",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroUML.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroUML.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/IntroUML&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the Unified Modeling Language.",
    "author": [
      "Dave Parillo"
    ],
    "institution": [
      "San Diego Mesa College"
    ],
    "keywords": [
      "Unified Modeling Language"
    ],
    "title": "The Unified Modeling Language",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroProcess.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroProcess.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/IntroProcess&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the software development process",
    "author": [
      "Dave Parillo"
    ],
    "institution": [
      "San Diego Mesa College"
    ],
    "keywords": [
      "Software Design"
    ],
    "title": "Software Development Processes",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ADT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ADT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/ADT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of an Abstract Data Type",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Abstract Data Type"
    ],
    "title": "Abstract Data Types",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/cmdline.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/cmdline.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/cmdline&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the command line interface.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Command Line Interface"
    ],
    "title": "Command Line Basics",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/parameters.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/parameters.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/parameters&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to parsing command line parameters in a Java program.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Command Line Parameter"
    ],
    "title": "Parsing Command Line Parameters In Your Program",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/eclipseparameters.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/eclipseparameters.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/eclipseparameters&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Describes how to set up passing command line parameters to a program in the Eclipse IDE.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Eclipse IDE",
      "Command Line Parameter"
    ],
    "title": "Using Command Line Parameters in Eclipse",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/webcattools.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/webcattools.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/webcattools&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Describes how to install the Web-CAT submission plugin in the Eclipse IDE.",
    "author": [
      "Ayaan Kazerouni",
      "Alex Hicks",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Web-CAT",
      "Eclipse IDE"
    ],
    "title": "Installing the Web-CAT Submission Plug-in for Eclipse",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/debugmethods.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/debugmethods.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/debugmethods&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Brief introduction to standard approaches to debugging.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Debugging"
    ],
    "title": "Common Debugging Methods",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/debug.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/debug.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/debug&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to using the Eclipse source-level debugger.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Debugging",
      "Source Level Debugging",
      "Eclipse IDE"
    ],
    "title": "Debugging In Eclipse",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/scanning.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/scanning.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/scanning&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Describes how to use the Java Scanner class to read text input, such as from a data file. Includes a complete example.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Java Scanner Class"
    ],
    "title": "Using the Java Scanner Class",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/randomaccessfile.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/randomaccessfile.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/randomaccessfile&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Describes how to use the Java RandomAccessFile class.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Random Access File"
    ],
    "title": "Random Access Files In Java",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/junitstart.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/junitstart.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/junitstart&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to JUnit testing.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "JUnit Testing"
    ],
    "title": "Introdution to JUnit Testing",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/junitbasic.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/junitbasic.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/junitbasic&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Describes how to write JUnit tests.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "JUnit Testing"
    ],
    "title": "Writing JUnit Tests",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/junitcoverage.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/junitcoverage.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/junitcoverage&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Describes the concept of code coverage and how to use it to help guide JUnit test writing.",
    "author": [
      "Jordan Sablan"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "JUnit Testing",
      "Code Coverage"
    ],
    "title": "Code Coverage In JUnit",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MTeclipse.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MTeclipse.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/MTeclipse&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of mutation testing and how to use it in the Eclipse IDE.",
    "author": [
      "Rifat Sabbir Mansur",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "JUnit Testing",
      "Mutation Testing"
    ],
    "title": "Mutation Coverage In JUnit",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MTbasics.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MTbasics.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/MTbasics&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Provides many examples of tests to improve mutation coverage.",
    "author": [
      "Rifat Sabbir Mansur",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "JUnit Testing",
      "Mutation Testing"
    ],
    "title": "Mutation Testing Examples",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MTadvanced.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MTadvanced.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Tutorials/MTadvanced&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Provides various examples illustrating advanced topics for Mutation Testing, including: distinguishing covering lines from making test with an effect; why overconstrained code has uncoverable branches; why it is possible to have 100% MT coverage and still have a bug.",
    "author": [
      "Cliff Shaffer",
      "Alex Hicks",
      "Rifat Sabbir Mansur"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "JUnit Testing",
      "Mutation Testing"
    ],
    "title": "Mutation Coverage Advanced Examples",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TriangleIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TriangleIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Testing/TriangleIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the distinction between testing and debugging, and introduces a testing interactive problem to get test coverage of a triangle classifier function.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Testing",
      "Code Coverage"
    ],
    "title": "Testing vs. Debugging",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TriangleCoverage.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TriangleCoverage.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Testing/TriangleCoverage&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses testing for code coverage, and presents a testing interactive problem to get complete code coverage on a triangle classifier function.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Testing",
      "Code Coverage"
    ],
    "title": "Testing for Code Coverage",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BowlingIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BowlingIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Testing/BowlingIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses testing for code coverage, and presents a testing interactive problem to get complete code coverage on a bowling game score function.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Testing",
      "Code Coverage"
    ],
    "title": "Bowling Test Coverage Example",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BowlingCoverage.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BowlingCoverage.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Testing/BowlingCoverage&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses testing for code coverage, and presents a testing interactive problem to get complete code coverage on a bowling game score function. This version shows the code.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Testing",
      "Code Coverage"
    ],
    "title": "Bowling Test Coverage Example: Testing to Code",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BasicPointers1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BasicPointers1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/BasicPointers1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to using references in Java, Part 1.",
    "author": [
      "Nick Parlante",
      "Cliff Shaffer",
      "Sally Hamouda",
      "Mostafa Mohammed",
      "Sushma Mandava"
    ],
    "institution": [
      "Stanford University",
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer",
      "Reference"
    ],
    "title": "Basic References Part 1",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BasicPointers2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BasicPointers2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/BasicPointers2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to using references in Java, Part 2.",
    "author": [
      "Nick Parlante",
      "Cliff Shaffer",
      "Sally Hamouda",
      "Mostafa Mohammed",
      "Sushma Mandava"
    ],
    "institution": [
      "Stanford University",
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer",
      "Reference"
    ],
    "title": "Basic References Part 2",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Syntax.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Syntax.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/Syntax&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to pointer syntax in Java.",
    "author": [
      "Nick Parlante",
      "Cliff Shaffer",
      "Sally Hamouda",
      "Mostafa Mohammed",
      "Sushma Mandava"
    ],
    "institution": [
      "Stanford University",
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer"
    ],
    "title": "Pointes Syntax",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LocalMem.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LocalMem.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/LocalMem&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of local memory and local variables.",
    "author": [
      "Nick Parlante",
      "Cliff Shaffer",
      "Sally Hamouda",
      "Mostafa Mohammed"
    ],
    "institution": [
      "Stanford University",
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer",
      "Local Variable"
    ],
    "title": "Local Memory",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HeapMem.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HeapMem.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/HeapMem&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of heap memory and global variables.",
    "author": [
      "Nick Parlante",
      "Cliff Shaffer",
      "Sally Hamouda",
      "Mostafa Mohammed"
    ],
    "institution": [
      "Stanford University",
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer",
      "Heap Memory",
      "Garbage Collection"
    ],
    "title": "Heap Memory",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Links1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Links1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/Links1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to link nodes.",
    "author": [
      "Cliff Shaffer",
      "Mostafa Mohammed",
      "Margaret Ellis"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer",
      "Link Node"
    ],
    "title": "Link Nodes",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Links2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Links2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/Links2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Coding exercises for practicing manipulating linked lists.",
    "author": [
      "Cliff Shaffer",
      "Mostafa Mohammed",
      "",
      "Margaret Ellis"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer",
      "Link Node"
    ],
    "title": "Link Nodes Exercises",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PointersCM.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PointersCM.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/PointersCM&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Concept map of pointer concepts.",
    "author": [
      "Ehsan Elgendi"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer"
    ],
    "title": "Pointers Concept Map",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExercisesPtr.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExercisesPtr.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/ExercisesPtr&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of practice programming exercises about pointers.",
    "author": [
      "Mostafa Mohammed"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer"
    ],
    "title": "Pointers Programming Exercises",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LinkedChains.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LinkedChains.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PointersJava/LinkedChains&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A second collection of practice programming exercises about pointers.",
    "author": [
      "Mostafa Mohammed"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pointer"
    ],
    "title": "Additional Pointers Programming Exercises",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SetNotationFLAFS.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SetNotationFLAFS.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/SetNotationFLAFS&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Review materials on set notation appropriate for a course in Data Structures and Algorithms or Formal Languages. Uses Programmed Instruction Framesets.",
    "author": [
      "Cliff Shaffer",
      "Eunoh Cho"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Set",
      "Relation"
    ],
    "title": "Set Notation Review with Programmed Instruction Framesets",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Relations.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Relations.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/Relations&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Review materials on relations appropriate for a course in Data Structures and Algorithms or Formal Languages. Uses Programmed Instruction Framesets.",
    "author": [
      "Cliff Shaffer",
      "Eunoh Cho",
      "Mostafa Mohammed"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Set",
      "Relation",
      "Equivalence Class",
      "Partial Order"
    ],
    "title": "Relations Review with Programmed Instruction Framesets",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MathProof.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MathProof.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/MathProof&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Review materials on proof techniques appropriate for a course in Data Structures and Algorithms or Formal Languages. Uses Programmed Instruction Framesets.",
    "author": [
      "Eunoh Cho",
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Proof",
      "Induction Proof",
      "Proof by Contradiction",
      "Deductive Proof"
    ],
    "title": "Mathematical Proof Techniques with Programmed Instruction Framesets",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalChap.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalChap.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalChap&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to a chapter on algorithm analysis.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis"
    ],
    "title": "Chapter Introduction: Algorithm Analysis",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalPrelim.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalPrelim.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalPrelim&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to the concepts of problems vs. algorithms vs. programs.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Problem",
      "Algorithm"
    ],
    "title": "Problems, Algorithms, and Programs",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to how algorithms are compared, including the concept of growth rates.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Growth Rate"
    ],
    "title": "Comparing Algorithms",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalCases.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalCases.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalCases&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to best, worst, and average case analysis.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Best Case",
      "Average Case",
      "Worst Case"
    ],
    "title": "Best, Worst, and Average Cases",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalCompvsAlg.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalCompvsAlg.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalCompvsAlg&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Compares the results of increasing processor speed vs. improving asymptotic complexity of an algorithm.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Growth Rate"
    ],
    "title": "Faster Computer, or Faster Algorithm?",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalAsymptotic.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalAsymptotic.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalAsymptotic&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces upper bounds analysis.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Upper Bound",
      "Big O"
    ],
    "title": "Asymptotic Analysis and Upper Bounds",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalLower.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalLower.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalLower&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to lower bounds analysis, Omega, and Theta notation.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Lower Bound",
      "Big Theta",
      "Big Omega"
    ],
    "title": "Lower Bounds and Theta Notation",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalProgram.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalProgram.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalProgram&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to calculating the asymptotic running time of a program.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Analyzing Programs"
    ],
    "title": "Calculating Program Running Time",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalProblem.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalProblem.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalProblem&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to analyzing problems in terms of their upper bound (best algorithm known) and lower bound (best algorithm possible).",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Analyzing Problems"
    ],
    "title": "Analyzing Problems",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalMisunderstanding.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalMisunderstanding.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalMisunderstanding&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Explains some common student misunderstandings about asymptotic algorithm analysis.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Misconception"
    ],
    "title": "Common Algorithm Analysis Misunderstandings",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalMultiple.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalMultiple.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalMultiple&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of performing asymptotic algorithm analysis using multiple input size parameters.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis"
    ],
    "title": "Algorithm Analysis with Multiple Parameters",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalSpace.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalSpace.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalSpace&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces analyzing space bounds and constrasts this to analyzing time bounds.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Space Analysis"
    ],
    "title": "Algorithm Analysis for Space Bounds",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalTuning.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AnalTuning.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AnalTuning&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concepts of code tuning and empirical performance analysis for a computer program.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Code Tuning"
    ],
    "title": "Code Tuning and Empirical Analysis",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AlgAnalSummCS2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AlgAnalSummCS2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AlgAnalSummCS2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Chapter summary exercises for algorithm analysis. Suitable for a CS2 course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis"
    ],
    "title": "Algorithm Analysis Summary Exercises: CS2",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AlgAnalSummCS3.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AlgAnalSummCS3.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=AlgAnal/AlgAnalSummCS3&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Chapter summary exercises for algorithm analysis. Suitable for a post-CS2 Data Structures and Algorithms course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis"
    ],
    "title": "Algorithm Analysis Summary Exercises: CS3",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/RecIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the basic ideas of recursion.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Introduction to Recursion",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Write.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Write.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/Write&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to writing simple recursive functions.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Writing a Recursive Function",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CodeCompletionEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CodeCompletionEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/CodeCompletionEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Several intermediate recursion code completion exercises.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Simple Recursion Programming Exercises",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HarderWrite.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HarderWrite.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/HarderWrite&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Several examples of more sophisticated recursive functions.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Writing More Sophisticated Recursive Functions",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HarderCodeCompletionEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HarderCodeCompletionEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/HarderCodeCompletionEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Several simple recursion programming exercises.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Intermediate Recursion Code Completion Exercises",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/WritingEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/WritingEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/WritingEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Several intermediate recursion programming exercises.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "More Intermediate Recursion Programming Exercises",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Trace.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Trace.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/Trace&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation on how to trace recursive code, with visualizations.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Tracing Recursive Code",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TracingEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TracingEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/TracingEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Several tracing exercises for recursion.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Recursion Code Tracing Practice Exercises",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecSummaryEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecSummaryEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=RecurTutor/RecSummaryEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Battery of recursion chapter summery practice questions.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion"
    ],
    "title": "Recursion Chapter Summary Practice Questions",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListADT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListADT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/ListADT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an ADT for the list class used in this chapter.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "List ADT"
    ],
    "title": "A List ADT",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListArray.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListArray.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/ListArray&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an implementation for lists stored in arrays.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Array-Based List"
    ],
    "title": "Lists and the Array-Based List Implementation",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListLinked.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListLinked.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/ListLinked&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an implementation for a linked list.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Linked List"
    ],
    "title": "Linked List Implementation",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListAnalysis.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListAnalysis.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/ListAnalysis&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a comparision of the space and time costs for linked vs. array-based lists.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "List Cost Analysis",
      "Overhead",
      "List Implementation Comparison",
      "Linked List",
      "Array-Based List"
    ],
    "title": "Comparison of List Implementations",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListDouble.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListDouble.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/ListDouble&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an implementation for a doubly linked list.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Doubly Linked List"
    ],
    "title": "Doubly Linked Lists",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListElement.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListElement.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/ListElement&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses design of the element representation for a linked list.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "List Element Implementation"
    ],
    "title": "List Element Implementations",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StackArray.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StackArray.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/StackArray&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces stacks and an implementation for array-based stacks.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Array-Based Stack"
    ],
    "title": "Implementing an Array-Based Stack",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StackLinked.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StackLinked.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/StackLinked&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an implementation for linked stacks.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Linked Stack"
    ],
    "title": "Implementing a Linked Stack",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Freelist.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Freelist.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/Freelist&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the purpose and implementation of a freelist for more efficient memory management.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Freelist"
    ],
    "title": "Freelists",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StackRecur.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/StackRecur.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/StackRecur&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the implementation of recursion using a stack.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Recursion",
      "Stack"
    ],
    "title": "Implementing Recursion with a Stack",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Queue.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Queue.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/Queue&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an implementation for array-based queues.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Array-Based Queue"
    ],
    "title": "Implementing the Array-Based Queue",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/QueueLinked.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/QueueLinked.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/QueueLinked&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an implementation for linked queues.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Linked Queue"
    ],
    "title": "Implementing the Linked Queue",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListSumm.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ListSumm.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=List/ListSumm&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a large collection of practice questions related to lists, stacks, and queues.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "List",
      "Stack",
      "Queue"
    ],
    "title": "List Chapter Summary Practice Questions",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DesignPatterns.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DesignPatterns.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/DesignPatterns&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Brief introduction to the concept of design patterns and some commonly used related to Data Structures and Algorithms courses: Flyweight, Visitor, Composite, and Strategy.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Design Pattern"
    ],
    "title": "Design Patterns",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DesignAltList.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DesignAltList.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/DesignAltList&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a list ADT that supports iterators.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "List",
      "Abstract Data Type"
    ],
    "title": "Alternative List ADT Designs",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Comparison.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Comparison.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/Comparison&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses design decisions related to comparing records, including the concept of a comparator.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Record Comparison",
      "Comparator"
    ],
    "title": "Comparing Records",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Dictionary.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Dictionary.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Design/Dictionary&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the concept of a dictionary illustrated by an ADT and examples of use.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Dictionary"
    ],
    "title": "The Dictionary ADT",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTree.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTree.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BinaryTree&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents definitions and properties for binary trees.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree"
    ],
    "title": "Binary Trees Definitions and Properties",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecursiveDS.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecursiveDS.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/RecursiveDS&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the representation of a binary tree through recursion.",
    "author": [
      "Sally Hamouda"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree Terminology"
    ],
    "title": "Binary Tree as a Recursive Data Structure",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeFullThm.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeFullThm.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BinaryTreeFullThm&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the full binary tree theorem that the number of leaf nodes in a full binary tree is one more than the number of internal nodes.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Full Binary Tree Theorem"
    ],
    "title": "The Full Binary Tree Theorem",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeTraversal.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeTraversal.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BinaryTreeTraversal&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the standard binary tree traversals. Also discusses the pros and cons of various ways to implement these traversals recursively.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Inorder Traversal",
      "Preorder Traversal",
      "Postorder Traversal"
    ],
    "title": "Binary Tree Traversals",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/WritingTraversals.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/WritingTraversals.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/WritingTraversals&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses how to write a binary tree traversal to achieve various goals, and which is appropriate in a given situation.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree Traversal"
    ],
    "title": "Implementing Tree Traversals",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeInfFlw.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeInfFlw.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=BTRecurTutor/BinaryTreeInfFlw&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses how to write a binary tree traversal so as to properly control the various ways information flows into and out of the recursive function.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree Traversal",
      "Recursive Tree Functions"
    ],
    "title": "Information Flow in Recursive Functions",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeImpl.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeImpl.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BinaryTreeImpl&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses how implement binary tree nodes, contrasting full binary tree node implementations to one for a non-full binary tree.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree Node Implementation"
    ],
    "title": "Binary Tree Node Implementations",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Composite.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Composite.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/Composite&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the concept of a composite design pattern, used in this case to implement an Expression Tree.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree",
      "Design Pattern",
      "Composite Design"
    ],
    "title": "Composite-based Expression Tree",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeNodeSpace.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeNodeSpace.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BinaryTreeNodeSpace&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses how to calculate the space requirements for a binary tree, depending on its node implementation.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree",
      "Binary Tree Space Analysis",
      "Full Binary Tree"
    ],
    "title": "Binary Tree Space Requirements",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BST.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BST.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BST&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Binary Search Trees. Includes several visualizations and practice exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Search Tree"
    ],
    "title": "Binary Search Trees",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BSTDict.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BSTDict.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BSTDict&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses how to implement the Dictionary ADT with a BST.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Search Tree",
      "Dictionary"
    ],
    "title": "Dictionary Implementation Using a BST",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeGuidedInfFlw.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryTreeGuidedInfFlw.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=BTRecurTutor/BinaryTreeGuidedInfFlw&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses information flow in recursive functions. The particular example is implementing range queries in a BST.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree Traversal"
    ],
    "title": "Binary Tree Guided Information Flow",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MultipleBinaryTrees.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MultipleBinaryTrees.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=BTRecurTutor/MultipleBinaryTrees&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Contains practice programming exercises that use multiple binary trees.",
    "author": [
      "Sally Hamouda"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree Traversal",
      "Recursive Tree Functions"
    ],
    "title": "Multiple Binary Trees",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BSTCheck.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BSTCheck.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=BTRecurTutor/BSTCheck&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses information flow in a recursive tree traversal. The particular example is verifying that a binary tree is a BST.",
    "author": [
      "Sally Hamouda",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree Traversal",
      "Recursive Tree Functions"
    ],
    "title": "A Hard Information Flow Problem",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CompleteTree.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CompleteTree.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/CompleteTree&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses how to implement a complete binary tree using an array. A preparatory module for introducing heaps.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Complete Binary Tree"
    ],
    "title": "Array Implementation for Complete Binary Trees",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Heaps.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Heaps.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/Heaps&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of heaps, and their use to implement priority queues.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Heap",
      "Priority Queue"
    ],
    "title": "Heaps and Priority Queues",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Huffman.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Huffman.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/Huffman&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces Huffman Coding Trees, including algorithms to build a tree and calculate codes.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Huffman Coding Tree"
    ],
    "title": "Huffman Coding Trees",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TreeTrie.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TreeTrie.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/TreeTrie&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the Trie concept, and uses the example of a Trie version of a BST to show the diffence from a normal BST.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Trie"
    ],
    "title": "Trees versus Tries",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HuffProof.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HuffProof.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/HuffProof&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a proof that Huffman Coding Trees generate optimal codes when probabilities are not context dependent.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Huffman Coding Tree"
    ],
    "title": "Proof of Optimality for Huffman Coding",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryChapSumm.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinaryChapSumm.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Binary/BinaryChapSumm&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Contains the Binary Trees chapter summary self-practice question battery.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binary Tree"
    ],
    "title": "Binary Tree Chapter Summary",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/InSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/InSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/InSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An introduction to a chapter on sorting.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting"
    ],
    "title": "Chapter Introduction: Sorting",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortNotation.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortNotation.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/SortNotation&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Sorting terminology and notation overview, including a visualization and self-assessment questions",
    "author": [
      "Cliff Shaffer",
      "Yujie Chen"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "Key",
      "Search Key"
    ],
    "title": "Sorting Terminology and Notation",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/InsertionSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/InsertionSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/InsertionSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Insertion Sort including visualizations, code, and self-test questions and exercises",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "Insertion Sort"
    ],
    "title": "Insertion Sort",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BubbleSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BubbleSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/BubbleSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Bubble Sort including visualizations, code, and self-test questions and exercises",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "Bubble Sort"
    ],
    "title": "Bubble Sort",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SelectionSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SelectionSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/SelectionSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Selection Sort including visualizations, code, and self-test questions and exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "Selection Sort"
    ],
    "title": "Selection Sort",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExchangeSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExchangeSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/ExchangeSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Lower bounds analysis for any sorting algorithm that works by swapping adjacent records.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Exchange Sort",
      "N-squared Sorts"
    ],
    "title": "The Cost of Exchange Sorting",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortOpt.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortOpt.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/SortOpt&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Variations on n-squared sorts to demonstrate code tuning principles.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "N-squared Sorts",
      "Code Tuning"
    ],
    "title": "Optimizing Sort Algorithms with Code Tuning",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Shellsort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Shellsort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/Shellsort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Shellsort including visualizations, code, and self-test questions and exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "Shellsort"
    ],
    "title": "Shellsort",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Mergesort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Mergesort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/Mergesort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Mergesort including visualizations, code, and self-test questions and exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Mergesort"
    ],
    "title": "Mergesort Concepts",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MergesortImpl.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MergesortImpl.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/MergesortImpl&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Mergesort array-based implementation. While Mergesort is conceptually simple, and fairly simple to implement with linked lists, it is more complex to do an array-based implementation.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Mergesort"
    ],
    "title": "Implementing Mergesort",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Quicksort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Quicksort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/Quicksort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Quicksort, including visualizations and practice exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Quicksort"
    ],
    "title": "Quicksort",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Heapsort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Heapsort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/Heapsort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Heapsort, including visualizations and practice exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Heapsort"
    ],
    "title": "Heapsort",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BinSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/BinSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Binsort, including visualizations.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Binsort",
      "Bucket Sort"
    ],
    "title": "Binsort",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RadixSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RadixSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/RadixSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of Radix Sort, including visualizations, analysis, and self-practice exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Radix Sort",
      "Non-Comparison Sort"
    ],
    "title": "Radix Sort",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortingEmpirical.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortingEmpirical.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/SortingEmpirical&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An empirical runtime comparison of many sorting algorithms, including optimized versions.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "Empirical Comparison"
    ],
    "title": "An Empirical Comparison of Sorting Algorithms",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortingLowerBound.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortingLowerBound.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/SortingLowerBound&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of the lower bounds proof for general sorting.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting",
      "Lower Bound Proof"
    ],
    "title": "Lower Bounds for Sorting",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortSumm.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortSumm.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Sorting/SortSumm&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Self-practice questions for the Sorting chapter.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sorting"
    ],
    "title": "Sorting Summary Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Secondary.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Secondary.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Files/Secondary&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of computer memory performance hierarchy.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "File Processing",
      "Disk Drive",
      "Memory"
    ],
    "title": "Primary versus Secondary Storage",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Diskdrive.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Diskdrive.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Files/Diskdrive&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to how computer disk drives work and their performance characteristics.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "File Processing",
      "Disk Drive"
    ],
    "title": "Disk Drives",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BuffPool.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BuffPool.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Files/BuffPool&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept and implementation of buffer pools.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "File Processing",
      "Buffer Pool"
    ],
    "title": "Buffer Pools",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FileProg.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FileProg.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Files/FileProg&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "How programmers view and manipulate files through the RandomAcessFile class.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "File Processing",
      "Random Access File"
    ],
    "title": "The Programmer's View of Files",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExternalSort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ExternalSort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Files/ExternalSort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to external sorting, intitial run production using replacement selection, and multi-way merge.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "File Processing",
      "External Sorting"
    ],
    "title": "External Sorting",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of hashing, using a naive hash function.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hashing"
    ],
    "title": "Introduction to Hashing",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashFunc.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashFunc.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashFunc&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of a hash function. Also introduces the concept (and inevitabilty) of collisions.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hash Function"
    ],
    "title": "Hash Function Principles",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashFuncExamp.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashFuncExamp.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashFuncExamp&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to a sampling of hash functions, and why some are better than others.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hash Function"
    ],
    "title": "Sample Hash Functions",
    "programming_language": [
      "Java",
      "C++"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/OpenHash.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/OpenHash.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/OpenHash&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of open hashing.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Open Hashing"
    ],
    "title": "Open Hashing",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BucketHash.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BucketHash.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/BucketHash&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of bucket hashing, with visualizations and practice exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Bucket Hashing"
    ],
    "title": "Bucket Hashing",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashCSimple.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashCSimple.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashCSimple&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of collision resolution, with an explanation for why linear probing is inefficient.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hashing",
      "Collision Resolution"
    ],
    "title": "Simple Collision Resolution",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashCImproved.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashCImproved.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashCImproved&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of better approaches to collision resolution.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hashing",
      "Collision Resolution"
    ],
    "title": "Improved Collision Resolution",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashAnal.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashAnal.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashAnal&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Analysis for the cost of various approaches to closed hashing.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hashing Cost Analysis"
    ],
    "title": "Analysis of Closed Hashing",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashDel.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashDel.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashDel&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of approaches to deleting records from a hash table.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hashing"
    ],
    "title": "Hashing Deletion",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashSumm.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/HashSumm.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Hashing/HashSumm&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Module containing summary questions for the hashing chapter.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Hashing"
    ],
    "title": "Hashing Chapter Summary Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MemmanIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MemmanIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/MemmanIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to a chapter on  memory management. Presents a simple ADT as a basis for discussion.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Memory Management"
    ],
    "title": "Chapter Introduction: Memory Management",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Dynamic.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Dynamic.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/Dynamic&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses dynamic storage allocation and associated memory managers. Presents this as a bit array with allocated and unallocated blocks of various sizes.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Memory Management",
      "Dynamic Storage Allocation"
    ],
    "title": "Dynamic Storage Allocation",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SequentialFit.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SequentialFit.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/SequentialFit&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of sequential fit methods for memory managers, where memory is an alternating series of allocated and unallocated blocks.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sequential Fit Memory Manager"
    ],
    "title": "Sequential-Fit Methods",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FirstFit.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FirstFit.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/FirstFit&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the first fit sequential memory management scheme.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sequential Fit Memory Manager"
    ],
    "title": "First Fit Memory Allocation",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CircularFit.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CircularFit.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/CircularFit&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the circular first fit sequential memory management scheme.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sequential Fit Memory Manager"
    ],
    "title": "Circular First Fit",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BestFit.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BestFit.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/BestFit&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the best fit sequential memory management scheme.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sequential Fit Memory Manager"
    ],
    "title": "Best Fit Memory Manager",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/WorstFit.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/WorstFit.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/WorstFit&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the worst fit sequential memory management scheme.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sequential Fit Memory Manager"
    ],
    "title": "Worst Fit Memory Manager",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MMPerformance.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MMPerformance.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/MMPerformance&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Compares the performance characteristics of various sequential fit memory management schemes.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Sequential Fit Memory Manager"
    ],
    "title": "Sequential Fit Peformance",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Buddy.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Buddy.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/Buddy&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the buddy method of memory allocation. Briefly discusses other approaches to memory management not previously discussed in the chapter.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Buddy Method Memory Manager"
    ],
    "title": "Buddy Method and Other Memory Allocation Methods",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Garbage.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Garbage.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=MemManage/Garbage&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses what happens when a memory manager can not meet memory request, including a brief introduction to approaches to garbage collection.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Memory Management",
      "Garbage Collection"
    ],
    "title": "Failure Policies and Garbage Collection",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IndexIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IndexIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Indexing/IndexIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of indexing, in particular in the context of handling large datasets stored on disk.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Indexing"
    ],
    "title": "Indexing Chapter Introduction",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LinearIndexing.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LinearIndexing.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Indexing/LinearIndexing&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of a linear indexing, which is simply a sorted list of keys with associated references to the associated record on disk.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Indexing",
      "Linear Indexing"
    ],
    "title": "Linear Indexing",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ISAM.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ISAM.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Indexing/ISAM&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the (now obsolete) ISAM indexing system as a precursor to introducing B-trees.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Indexing",
      "ISAM"
    ],
    "title": "ISAM",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TreeIndexing.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TreeIndexing.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Indexing/TreeIndexing&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of using a tree to organize an index for a collection of disk-based records.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Tree-Based Indexing"
    ],
    "title": "Tree-based Indexing",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TwoThreeTree.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TwoThreeTree.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Indexing/TwoThreeTree&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the 2-3 Tree Data Structure.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Indexing",
      "2-3 Tree"
    ],
    "title": "2-3 Trees",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BTree.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BTree.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Indexing/BTree&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the B-Tree Data Structure.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Indexing",
      "B-Tree"
    ],
    "title": "B- Trees",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IndexingSumm.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IndexingSumm.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Indexing/IndexingSumm&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "End-of-chapter questions on indexing.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Indexing"
    ],
    "title": "Indexing Chapter Summary Exercise",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GenTreeIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GenTreeIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=General/GenTreeIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of a general tree: A tree where any node can have any number of children. This module discusses general tree terminology, an ADT, and traversals.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "General Tree"
    ],
    "title": "General Trees",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/UnionFind.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/UnionFind.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=General/UnionFind&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the union/find algorithm for identifying and managing disjoint sets.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Union/Find Algorithm",
      "Disjoint Set",
      "Equivalence Class"
    ],
    "title": "Union/Find and the Parent Pointer Implementation",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SequentialRep.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SequentialRep.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=General/SequentialRep&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents several ways to represent trees sequentially, essentially as a layout of a tree traversal.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "General Tree",
      "Sequential Tree Representation"
    ],
    "title": "Sequential Tree Representations",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/GraphIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introductory module for a chapter on graphs suitable for a junior-level data structures course. Presents basic terminology, and the adjacency matrix and adjacency list representations.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Graph Representation"
    ],
    "title": "Graphs Chapter Introduction",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphImpl.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphImpl.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/GraphImpl&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an ADT for graphs along with sample implementations for both Adjacency List and Adjacency Matrix representations.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Graph Representation"
    ],
    "title": "Graph Implementations",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphTraversal.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphTraversal.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/GraphTraversal&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents standard graph traversals: Depth-first search and breadth-first search. Includes visualizations and algorithm proficiency practice exercises.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Graph Traversal"
    ],
    "title": "Graph Traversals",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphTopsort.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphTopsort.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/GraphTopsort&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents depth-first and queue-based topological sort algorithms.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Graph",
      "Topological Sort"
    ],
    "title": "Topological Sort",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphShortest.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphShortest.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/GraphShortest&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of shortest paths problems, and presents Dijkstra's algorithm for single-source shortest paths.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Shortest Path Problem"
    ],
    "title": "Shortest-Paths Problems",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MCST.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MCST.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/MCST&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of minimal-cost spanning trees, and presents Prim's algorithm for constructing them.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Graph",
      "Minimal-Cost Spanning Tree"
    ],
    "title": "Minimal Cost Spanning Trees",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Kruskal.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Kruskal.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/Kruskal&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents Kruskal's minimal-cost spanning tree algorithm.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Minimal-Cost Spanning Tree",
      "Union/Find Algorithm"
    ],
    "title": "Kruskal's Minimal Cost Spanning Tree Algorithm",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Floyd.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Floyd.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/Floyd&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the all-pairs shortest paths problem, and various approaches to solving it. Presents Floyd's dynamic programming algorithm for computing the all-pairs sortest paths matrix.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Shortest Path Problem",
      "Floyd's Algorithm",
      "Dynamic Programming"
    ],
    "title": "All-Pairs Shortest Paths",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphCM.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GraphCM.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Graph/GraphCM&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a concept map and practice questions for graph topics.",
    "author": [
      "Ehsan Elgendi"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Graph"
    ],
    "title": "Graph Concepts Summary",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Spatial.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Spatial.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Spatial/Spatial&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concepts of spatial data structures.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Spatial Data Structure"
    ],
    "title": "Spatial Data Structures",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PRquadtree.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PRquadtree.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Spatial/PRquadtree&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the PR Quadtree data structure.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Spatial Data Structures",
      "PR Quadtree"
    ],
    "title": "The PR Quadtree",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/KDtree.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/KDtree.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Spatial/KDtree&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the KD Tree data structure.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Spatial Data Structure",
      "KD Tree"
    ],
    "title": "KD Trees",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Bintree.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Bintree.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Spatial/Bintree&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the Bintree data structure.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Spatial Data Structure",
      "Bintree"
    ],
    "title": "The Bintree",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/OtherSpatial.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/OtherSpatial.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Spatial/OtherSpatial&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the Point Quadtree data structure and related concepts.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Spatial Data Structure"
    ],
    "title": "Other Spatial Data Structures",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AAIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AAIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/AAIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introductory module for a course on algorithm analysis.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis"
    ],
    "title": "Data and Algorithm Analysis",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ProblemSolving.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ProblemSolving.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/ProblemSolving&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Brief introduction to traditional problem-solving heuristics.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Problem Solving Heuristics"
    ],
    "title": "An Introduction to Problem Solving",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AAOverview.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AAOverview.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/AAOverview&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Semester overview for a senior-level course on algorithm and data analysis.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis"
    ],
    "title": "Algorithms Course Semester Overview",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TOH.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TOH.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/TOH&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a methodology for analyzing a problem's upper and lower bounds to determine whether a proposed algorithm is an efficient solution or not.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Towers of Hanoi",
      "Algorithm Analysis"
    ],
    "title": "Introduction to Analyzing a Problem",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundsReview.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundsReview.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/BoundsReview&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a brief review of upper and lower bounds analysis appropriate for a senior-level algorithms course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Upper Bound",
      "Lower Bound"
    ],
    "title": "Bounds Review",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GrowthRate.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/GrowthRate.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/GrowthRate&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a brief review of growth rates appropriate for a senior-level algorithms course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Growth Rate"
    ],
    "title": "Growth Rates Review",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AdvSumm.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AdvSumm.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/AdvSumm&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an intermediate-level survey of techniques for finding closed-form solutions for summations, appropriate for a senior-level algorithms course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Summation"
    ],
    "title": "Summation Techniques",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Recurrence.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Recurrence.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/Recurrence&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an intermediate-level survey of techniques for finding closed-form solutions for recurrence relations, appropriate for a senior-level algorithms course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Algorithm Analysis",
      "Recurrence Relation"
    ],
    "title": "Solving Recurrence Relations",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SearchIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SearchIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/SearchIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an introduction for a chaper on search algorithms for a senior-level algorithms course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Search"
    ],
    "title": "Chapter Introduction: Search",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/UnsortedSearch.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/UnsortedSearch.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Searching/UnsortedSearch&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents an lower-bounds analysis for the problem of searching an unsorted list.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Search in Unsorted Lists",
      "Lower Bound Proof"
    ],
    "title": "Analyzing Search in Unsorted Lists",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortedSearch.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortedSearch.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Searching/SortedSearch&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents algorithms for search in sorted arrays, including binary search, interpolation search, and quadratic binary search, along with a lower bounds proof of the problem.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Search in Sorted Lists",
      "Lower Bound Proof",
      "Binary Search",
      "Interpolation Search",
      "Quadratic Binary Search"
    ],
    "title": "Search in Sorted Arrays",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SkipList.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SkipList.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SearchStruct/SkipList&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of the Skip List data structure including visualizations and code.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Skip List",
      "Randomized Algorithm",
      "Probabilistic Algorithm"
    ],
    "title": "Skip Lists",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundMax.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundMax.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Bounds/BoundMax&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of finding the lower bound for a problem using the Finding the Maximium problem as an example.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Lower Bound Proof",
      "Maximium Value Problem"
    ],
    "title": "Finding the Maximum Value",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundAdversary.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundAdversary.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Bounds/BoundAdversary&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of an adversary argument for finding the lower bound for a problem. Uses the problem of finding the two largest values in an unsorted list as an example.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Lower Bound Proof",
      "Adversary Argument"
    ],
    "title": "Adversarial Lower Bounds Proofs",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundState.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundState.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Bounds/BoundState&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of a state space for use in finding the lower bound for a problem. Uses the problem of finding the min and max values in an unsorted list together as an example.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Lower Bound Proof",
      "State Space Lower Bound"
    ],
    "title": "State Space Lower Bounds Proofs",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundiBest.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BoundiBest.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Bounds/BoundiBest&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Lower bounds anaysis for finding the i'th largest element. Includes a discussion of a linear-time median-finding algorithm based on Quicksort.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Lower Bound Proof",
      "I'th Element Problem",
      "Median Finding",
      "Quicksort"
    ],
    "title": "Finding the i'th Best Element",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortingOptimal.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SortingOptimal.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=Bounds/SortingOptimal&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces concepts related to theoretically optimal sorting algorithms. Sketeches the Ford and Johnson Sorting algorithm.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Optimal Sorting Algorithms",
      "Ford",
      "Johnson Sort",
      "Binary Insertion Sort",
      "Merge Insertion Sort"
    ],
    "title": "Optimal Sorting",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AmortAnal.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AmortAnal.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/AmortAnal&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of amortized analysis and presents some examples.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Amortized Analysis"
    ],
    "title": "Amortized Analysis",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DynamicProgramming.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DynamicProgramming.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/DynamicProgramming&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to dynamic programming.",
    "author": [
      "Cliff Shaffer",
      "Abhishek Jha",
      "Angel Velazquez"
    ],
    "institution": [
      "Virginia Tech",
      "Universidad Rey Juan Carlos"
    ],
    "keywords": [
      "Dynamic Programming",
      "Recursion",
      "Fibonacci Sequence",
      "Knapsack Problem"
    ],
    "title": "Dynamic Programming",
    "programming_language": [
      "Java"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LimComp.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LimComp.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/LimComp&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introductory module for a chapter on reductions, NP Completeness, and Computability. Suitable for a senior-level course on algorithm analysis.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Limits to Computing"
    ],
    "title": "Limits to Computing",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Reduction.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Reduction.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/Reduction&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of a reduction. Demonstrates the two-sided relationship between two problems: One side relates upper bounds, the other relates lower bounds. Presents a visual representation for the reduction process. This is important prepatory material for later introducing NP-completeness theory.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Reduction"
    ],
    "title": "Reductions",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NPComplete.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NPComplete.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/NPComplete&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "An initial introduction to the concept of NP-completeness, including definitions for NP, NP-hard, and NP-complete. Introduces some example problems, including Traveling Salesman and Clique.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete"
    ],
    "title": "NP-Completeness",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/provingNPC.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/provingNPC.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/provingNPC&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction the the Satisfiability problem, and the process for proving that a problem is NP-Complete.",
    "author": [
      "Cliff Shaffer",
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof"
    ],
    "title": "NP-Completeness Proofs",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/circuitSAT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/circuitSAT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/circuitSAT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Visual introduction to the Circuit Satisfiability problem.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Circuit Satisfiability Problem"
    ],
    "title": "Circuit Satisfiability",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SAT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SAT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/SAT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Visual introduction to the Formula Satisfiability (standard SAT) problem.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Satisfiability Problem"
    ],
    "title": "Formula Satisfiability",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/threeSAT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/threeSAT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/threeSAT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the 3-CNF Satisfiability problem. Includes an exercise to practice finding satisfiable truth settings.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Satisfiability Problem"
    ],
    "title": "3-CNF Satisfiability",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SAT_to_threeSAT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SAT_to_threeSAT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/SAT_to_threeSAT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a proof that 3-CNF Satisfiability is NP-Complete, by a reduction from Satisfiability.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof",
      "Satisfiability Problem"
    ],
    "title": "Reduction of SAT to 3-SAT",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/clique.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/clique.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/clique&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the Clique problem. Includes a practice exercise where the user must determine the largest clique in a given graph.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Clique Problem"
    ],
    "title": "The Clique Problem",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/independentSet.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/independentSet.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/independentSet&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the Independent Set problem. Includes a practice exercise where the user must determine the maximum indpendent set in a given graph.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Independent Set Problem"
    ],
    "title": "The Independent Set Problem",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/vertexCover.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/vertexCover.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/vertexCover&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the Vertex Cover problem. Includes a practice exercise where the user must determine the minimum vertex cover in a given graph.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Vertex Cover Problem"
    ],
    "title": "The Vertex Cover Problem",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/hamiltonianCycle.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/hamiltonianCycle.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/hamiltonianCycle&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the Hamiltonian Cycle problem. Includes a practice exercise where the user must show if there is a Hamiltonian Cycle for a given graph.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Hamiltonian Cycle Problem"
    ],
    "title": "The Hamiltonian Cycle Problem",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TSP.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TSP.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/TSP&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the Traveling Salesman problem. Includes a practice exercise where the user must find the shortest cycle for a given graph.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Traveling Salesman Problem"
    ],
    "title": "The Traveling Salesman Problem",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/circuitSAT_to_SAT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/circuitSAT_to_SAT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/circuitSAT_to_SAT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a reduction of an instance of the Circuit Satisfiability problem to an instance of the (general) CNF Satisfiability problem.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof",
      "Satisfiability Problem"
    ],
    "title": "Reduction of Circuit SAT to SAT",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/threeSAT_to_clique.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/threeSAT_to_clique.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/threeSAT_to_clique&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a reduction of an instance of the 3-Satisfiability problem to an instance of the Clique problem.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof",
      "Satisfiability Problem",
      "Clique Problem"
    ],
    "title": "Reduction of 3-SAT to Clique",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/independentSet_to_vertexCover.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/independentSet_to_vertexCover.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/independentSet_to_vertexCover&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a reduction of an instance of the Independent Set problem to an instance of the Vertex Cover problem.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof",
      "Independent Set Problem",
      "Vertex Cover Problem"
    ],
    "title": "Reduction of Independent Set to Vertex Cover",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/threeSAT_to_hamiltonianCycle.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/threeSAT_to_hamiltonianCycle.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/threeSAT_to_hamiltonianCycle&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a reduction of an instance of the 3-SAT problem to an instance of the Hamiltonian Cycle problem.",
    "author": [
      "Nabanita Maji",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof",
      "Satisfiability Problem",
      "Hamiltonian Cycle Problem"
    ],
    "title": "Reduction of 3-SAT to Hamiltonian Cycle",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/clique_to_independentSet.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/clique_to_independentSet.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/clique_to_independentSet&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a reduction of an instance of the Clique problem to an instance of the Independent Set problem.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof",
      "Clique Problem",
      "Independent Set Problem"
    ],
    "title": "Reduction of Clique to Independent Set",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/hamiltonianCycle_to_TSP.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/hamiltonianCycle_to_TSP.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/hamiltonianCycle_to_TSP&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a reduction of an instance of the Hamiltonian Cycle problem to an instance of the Traveling Salesman problem.",
    "author": [
      "Nabanita Maji"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Completeness Proof",
      "Traveling Salesman Problem",
      "Hamiltonian Cycle Problem"
    ],
    "title": "Reduction of Hamiltonian Cycle to Traveling Salesman",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NPCoping.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NPCoping.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=NP/NPCoping&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents strategies for dealing with problems that must be solved even if they are are known to be NP-Complete.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "NP-Complete",
      "Dynamic Programming",
      "Knapsack Problem"
    ],
    "title": "Coping with NP-Complete Problems",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Impossible.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Impossible.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/Impossible&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the concept of unsolveable problems. Presents diagonalization proofs, and a direct proof of the unsolvability of the Halting Problem. Then discusses using reductions to prove other problems are unsolveable.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Unsolvable Problems"
    ],
    "title": "Unsolvable Problems",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Numeric.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Numeric.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/Numeric&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to number problems for a senior algorithms course. Covers the concept of measure for the input size of a number problem, fast exponentiation algorithm, largest common factor algorithm.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Lower Bound",
      "Number Problems",
      "Exponentiation",
      "Largest Common Factor"
    ],
    "title": "Number Problems",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Matrix.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Matrix.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/Matrix&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the basic concepts behind Strassen's Matrix Multiplcation algorithm.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Number Problems",
      "Matrix Multiplication",
      "Strassen's Algorithm"
    ],
    "title": "Matrix Multiplication",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Probabilistic.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Probabilistic.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/Probabilistic&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the basic concept of a probabilistic algorithm. Defines Las Vegas vs. Monte Carlo algorithms, and examples of approximate maximum number finding algorithms.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Randomized Algorithm",
      "Probabilistic Algorithm"
    ],
    "title": "Introduction to Probabilistic Algorithms",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Primes.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Primes.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/Primes&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Brief introduction to algorithms to determine if a number is prime, for a senior-level algorithms course.",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Prime Number Algorithms"
    ],
    "title": "Finding Prime Numbers",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RandomNums.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RandomNums.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/RandomNums&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Brief introduction to the implementation of Linear Congruential random number generators",
    "author": [
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Random Number"
    ],
    "title": "Random Numbers",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Transform.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Transform.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/Transform&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the concept of a transform. Examples include the slide rule as a transformation for integer multiplication, and polynomial multiplication.",
    "author": [
      "Cliff Shaffer",
      "Irena Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Transform",
      "Polynomial Multiplication"
    ],
    "title": "The Transformation Concept",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FFT.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FFT.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=SeniorAlgAnal/FFT&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents the implementation for the Fast Fourier Transform as a way to speed up polnomial multiplication through a transformation to fast evaluation and interpolation.",
    "author": [
      "Cliff Shaffer",
      "Irena Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Fast Fourier Transform",
      "Polynomial Multiplication"
    ],
    "title": "The Fast Fourier Transform",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/Grammars1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to Parse Trees.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Parse Tree"
    ],
    "title": "Derivations and Parse Trees",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/Grammars2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the concept of ambiguous grammars with examples.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Parse Tree"
    ],
    "title": "Ambiguous Grammars",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars3.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars3.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/Grammars3&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the concept of writing a grammar such that it enforces the order of operations.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Parse Tree"
    ],
    "title": "Enforcing Order of Operations",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars4.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars4.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/Grammars4&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses parser generators.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Parser Generator"
    ],
    "title": "Parser Generators",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars5.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Grammars5.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/Grammars5&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses how parser generators interpret a language.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Parser Generator"
    ],
    "title": "Using Parser Generators to Interpret a Language",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces basic concepts for functional programming.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "List Construction and Deconstruction",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces basic concepts for list processing in a functional programming language.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Developing Basic, Recursive List-processing Functions",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP3.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP3.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP3&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces recursive functions on more complex structures in a functional programming language.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Recurring On Lists That Aren't Flat",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP4.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP4.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP4&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses use of helper functions with accumulators in a functional programming language",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Using Helper Functions with Accumulators",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP5.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP5.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP5&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses scope, closures, higher-order functions, static vs. dynamic binding.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Scope, Closures, Higher-order Functions, Static vs. Dynamic Binding",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP6.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP6.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP6&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses map, curry, and compose operations.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Procedural Abstraction: Map, Curry, and Compose",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP7.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP7.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP7&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the filtering and folding (or reduce) patterns.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Procedural Abstraction: The Filtering and Folding (or Reduce) Patterns",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP8.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP8.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP8&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses combining the map and reduce patterns.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Combining Map and Reduce",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP9.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FP9.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FP9&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses continuations and continuation passing.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Functional Programming"
    ],
    "title": "Continuations and Continuation Passing",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LCSyntax.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LCSyntax.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/LCSyntax&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses syntax of the lambda calculus",
    "author": [
      "David Furcy",
      "Tom Naps",
      "Taylor Rydahl"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Syntax of the Lambda Calculus",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LCSemantics.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LCSemantics.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/LCSemantics&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses semantics of the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps",
      "Taylor Rydahl"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Semantics of the Lambda Calculus",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FreeBoundVariables.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FreeBoundVariables.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/FreeBoundVariables&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses free and bound variables in the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps",
      "Taylor Rydahl"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Free and Bound Variables",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AlphaConversion.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/AlphaConversion.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/AlphaConversion&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses alpha conversion in the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps",
      "Taylor Rydahl"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Alpha-Conversion",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Substitution.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Substitution.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/Substitution&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the substitution-based model of evaluation in the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps",
      "Taylor Rydahl"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "The Substitution-Based Model of Evaluation",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BetaReduction.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BetaReduction.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/BetaReduction&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses Beta-reduction in the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Beta-Reduction",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ReductionStrategies.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ReductionStrategies.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/ReductionStrategies&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses reduction strategies in the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Reduction Strategies",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ChurchNumerals.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/ChurchNumerals.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/ChurchNumerals&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses church numerals and booleans in the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Church Numerals and Booleans",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecursiveFunctions.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RecursiveFunctions.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/RecursiveFunctions&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses recursive functions and the lambda calculus.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Recursive Functions and Lambda Calculus",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/SLang1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the functional programming language SLang1.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Defining SLang 1",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Environment.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/Environment.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/Environment&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the environment-based model of evaluation for language SLang1.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Environment-based Model of Evaluation",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang1withLetExpressions.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang1withLetExpressions.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/SLang1withLetExpressions&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the addition of Let expressions to language SLang1.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "SLang1 with Let Expressions",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/SLang2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces the imperative language SLang2.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Defining SLang 2",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang2TTK.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang2TTK.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/SLang2TTK&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses adding recursion to imperative language SLang2.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Lambda Calculus"
    ],
    "title": "Tying the Knot",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang2ParameterPassing.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/SLang2ParameterPassing.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/SLang2ParameterPassing&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses various approaches to parameter passing.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Parameter Passing"
    ],
    "title": "Parameter-Passing Mechanisms",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LazyLists.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/LazyLists.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/LazyLists&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses implementations for lazy list parameters.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Parameter Passing",
      "Lazy List"
    ],
    "title": "Lazy Lists",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TypeSystems.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TypeSystems.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/TypeSystems&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the concept of types in programming languages.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Type"
    ],
    "title": "Types in Programming languages",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TypeInference.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TypeInference.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PL/TypeInference&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the concept of type inference in programming languages.",
    "author": [
      "David Furcy",
      "Tom Naps"
    ],
    "institution": [
      "UW-Oshkosh"
    ],
    "keywords": [
      "Type"
    ],
    "title": "Type Inference in Programming languages",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FLIntro.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FLIntro.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/FLIntro&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introductory module for a course on formal languages and automata.",
    "author": [
      "Susan Rodger",
      "Cliff Shaffer"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Formal Language",
      "Automata"
    ],
    "title": "Formal Languages Course Introduction",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FLOverview.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/FLOverview.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/FLOverview&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Course overview for a course on formal languages and automata.",
    "author": [
      "Susan Rodger",
      "Cliff Shaffer"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Formal Language",
      "Grammar",
      "Automata"
    ],
    "title": "Formal Languages Course Overview",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MajorConcepts.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MajorConcepts.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/MajorConcepts&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to the major concepts covered in a course on formal languages and automata.",
    "author": [
      "Susan Rodger",
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Formal Language",
      "Automata",
      "Grammar"
    ],
    "title": "Major Concepts for Formal Languages and Automata",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroGrammarEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/IntroGrammarEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/IntroGrammarEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of exercises for a student to construct a grammar for a given language.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Formal Language",
      "Automata",
      "Grammar"
    ],
    "title": "Introductory Grammar Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFA.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFA.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/DFA&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to Deterministic Finite Acceptors",
    "author": [
      "Susan Rodger",
      "Cliff Shaffer",
      "Mostafa Mohammed",
      "John Taylor"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Deterministic Finite Automata"
    ],
    "title": "DFA: Deterministic Finite Acceptors",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAExercises1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAExercises1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/DFAExercises1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of construction exercises for DFAs.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Deterministic Finite Automata"
    ],
    "title": "DFA Exercises 1",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAExercises2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAExercises2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/DFAExercises2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A second collection of construction exercises for DFAs.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Deterministic Finite Automata"
    ],
    "title": "DFA Exercises 2",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAExercises3.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAExercises3.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/DFAExercises3&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A third collection of construction exercises for DFAs.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Deterministic Finite Automata"
    ],
    "title": "DFA Exercises 3",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NFA.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NFA.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/NFA&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to Non-Deterministic Finite Automata",
    "author": [
      "Susan Rodger",
      "Cliff Shaffer",
      "Mostafa Mohammed",
      "John Taylor"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Non-Deterministic Finite Automata"
    ],
    "title": "NFA: Non-Deterministic Finite Automata",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NFAExercises.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NFAExercises.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/NFAExercises&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Exercises to practice creating NFA or converting an NFA to an equivalent DFA.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Finite Automata",
      "Non-Deterministic Finite Automata"
    ],
    "title": "NFA Exercises 1",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAMinimization.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DFAMinimization.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/DFAMinimization&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presentation of the algorithm to minimize the number of states in a DFA.",
    "author": [
      "Susan Rodger",
      "Cliff Shaffer",
      "Mostafa Mohammed"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Finite Automata",
      "DFA Minimization"
    ],
    "title": "Minimizing the Number of States in a DFA",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MinimizationEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/MinimizationEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/MinimizationEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Provides self-test exercises for practicing the DFA state minimization algorithm.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Finite Automata",
      "DFA Minimization"
    ],
    "title": "DFA Minimization Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to Regular Expressions, with definitions and examples.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Expression"
    ],
    "title": "Regular Expressions",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegExExercises.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegExExercises.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegExExercises&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of exercises to write the regular expression for a given language.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Expression"
    ],
    "title": "Regular Expression Writing Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegExExercises2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegExExercises2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegExExercises2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A second collection of exercises to write the regular expression for a given language.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Expression"
    ],
    "title": "Regular Expression Writing Exercises 2",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegExPower.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegExPower.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegExPower&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discusses the power of regular expressions in the sense of what collection of languages they can represent. It is proven that regular expressions are equivalent to (Non)Deterministic Finite Automata.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Expression",
      "Regular Language"
    ],
    "title": "The Power of Regular Expressions",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegularGrammars.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegularGrammars.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegularGrammars&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduces regular grammars and their properties.",
    "author": [
      "Susan Rodger",
      "Cliff Shaffer",
      "Mostafa Mohammed"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Language",
      "Regular Grammar"
    ],
    "title": "Regular Grammars",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegGramEx1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegGramEx1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegGramEx1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of exercises for writing regular grammars.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Language",
      "Regular Grammar"
    ],
    "title": "Regular Grammars Exercises 1",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegGramEx2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegGramEx2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegGramEx2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A second collection of exercises for writing regular grammars.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Language",
      "Regular Grammar"
    ],
    "title": "Regular Grammars Exercises 2",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegClosure.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/RegClosure.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/RegClosure&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents a number of closure properties for regular languages.",
    "author": [
      "Susan Rodger",
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Regular Language",
      "Closure Property"
    ],
    "title": "Closure Properties of Regular Grammars",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NonRegular.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/NonRegular.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/NonRegular&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Discussion of techniques for recognizing that a language is non-regular. Introduces the Pumping Lemma and shows many examples of how to use it to prove a language is non-regular.",
    "author": [
      "Susan Rodger",
      "Mostafa Mohammed",
      "",
      "Cliff Shaffer"
    ],
    "institution": [
      "Duke University",
      "Virginia Tech"
    ],
    "keywords": [
      "Non-Regular Language",
      "Pumping Lemma Proof"
    ],
    "title": "Identifying Non-regular Languages",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFG1.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFG1.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/CFG1&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to context-free languages and gramamrs.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Context-Free Grammar",
      "Context-Free Language"
    ],
    "title": "Context-Free Grammars Part 1",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFG2.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFG2.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/CFG2&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Continuation of Introduction to context-free languages and gramamrs: Ambiguity, Associativity.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Context-Free Grammar",
      "Context-Free Language",
      "Ambiguity"
    ],
    "title": "Context-Free Grammars Part 2",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BNF.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/BNF.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/BNF&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Brief introduction to the use of Backus-Naur Form for a CFG as used by compilers.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Compiler",
      "Backus-Naur Form"
    ],
    "title": "Compilers and Backus-Naur Form",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFGExercises.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFGExercises.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/CFGExercises&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of exercises to write context-free grammars for given languages.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Context-Free Grammar"
    ],
    "title": "CFG Writing Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFGTransformations.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFGTransformations.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/CFGTransformations&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Rules for transforming CFGs to simplify them.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Context-Free Grammar"
    ],
    "title": "Transforming Grammars",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFGTransEx.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFGTransEx.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/CFGTransEx&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of exercises to transform context-free grammars for given languages.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Context-Free Grammar"
    ],
    "title": "CFG Transformation Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PDA.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PDA.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/PDA&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to Pushdown Automata, including visualizations and Programmed Instruction presentations.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pushdown Automata"
    ],
    "title": "Pushdown Automata",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PDAExercises.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PDAExercises.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/PDAExercises&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of construction exercises for Pushdown Automata.",
    "author": [
      "Mostafa Mohammed"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pushdown Automata"
    ],
    "title": "PDA Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PDACFL.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/PDACFL.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/PDACFL&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Explores the relationship between PDAs and Context Free Languages.",
    "author": [
      "Mostafa Mohammed"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Pushdown Automata",
      "Context-Free Language"
    ],
    "title": "PDAs and Context Free Languages",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DPDA.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/DPDA.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/DPDA&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Explores the relationship between deterministic and non-deterministic PDAs.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Deterministic Pushdown Automata"
    ],
    "title": "Deterministic Pushdown Automata",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFLProp.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/CFLProp.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/CFLProp&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents ways that a language can be shown to not be a context-free language. This includes using closure properties for CFL, and the pumping lemma for CFL.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Context-Free Language"
    ],
    "title": "Proving that a Language is not Context-Free",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TuringMachines.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TuringMachines.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/TuringMachines&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Introduction to Turing machines.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Turing Machine"
    ],
    "title": "Introduction to Turing Machines",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TuringMachinesAdv.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TuringMachinesAdv.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/TuringMachinesAdv&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "Presents more advanced topics related to Turing machines such as the composition of machines and the computational equivalence of Turing machine extensisons.",
    "author": [
      "Mostafa Mohammed",
      "Cliff Shaffer"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Turing Machine"
    ],
    "title": "Turing Machines: Advanced Topics",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  },
  {
    "catalog_type": "Bundles",
    "platform_name": "OpenDSA",
    "iframe_url": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TMExercises.html",
    "persistentID": "https://opendsa-server.cs.vt.edu/OpenDSA/Books/Catalog/html/TMExercises.html",
    "protocol_url": "https://opendsa-server.cs.vt.edu/lti/launch?custom_ex_short_name=PIFLA/TMExercises&custom_ex_settings=%7B%7D",
    "protocol_instructions_url": "https://opendsa-server.cs.vt.edu/guides/opendsa-canvas",
    "license": "https://github.com/OpenDSA/OpenDSA/blob/master/MIT-license.txt",
    "protocol": [
      "LTI",
      "HTTP",
      "SPLICE Protocol"
    ],
    "description": "A collection of exercises that require the user to create a Turing machine, with correctness assessed using test case.",
    "author": [
      "Mostafa Mohammed"
    ],
    "institution": [
      "Virginia Tech"
    ],
    "keywords": [
      "Turing Machine"
    ],
    "title": "Turing Machine Exercises",
    "programming_language": [
      "N/A"
    ],
    "natural_language": [
      "en"
    ]
  }
]