Commit 1607b7fc by Calen Pennington

Merge pull request #4445 from cpennington/cross-store-xml-import-export

Add tests for xml import/export between different modulestores
parents ebfcb5d8 d354571e
......@@ -121,8 +121,7 @@ def _assets_json(request, course_key):
asset_json = []
for asset in assets:
asset_id = asset.get('content_son', asset['_id'])
asset_location = StaticContent.compute_location(course_key, asset_id['name'])
asset_location = asset['asset_key']
# note, due to the schema change we may not have a 'thumbnail_location' in the result set
thumbnail_location = asset.get('thumbnail_location', None)
if thumbnail_location:
......
......@@ -125,11 +125,6 @@ class CapaDescriptor(CapaFields, RawDescriptor):
]
}
# Capa modules have some additional metadata:
# TODO (vshnayder): do problems have any other metadata? Do they
# actually use type and points?
metadata_attributes = RawDescriptor.metadata_attributes + ('type', 'points')
# The capa format specifies that what we call max_attempts in the code
# is the attribute `attempts`. This will do that conversion
metadata_translations = dict(RawDescriptor.metadata_translations)
......
......@@ -497,8 +497,6 @@ class CombinedOpenEndedDescriptor(CombinedOpenEndedFields, RawDescriptor):
#Specify whether or not to pass in open ended interface
needs_open_ended_interface = True
metadata_attributes = RawDescriptor.metadata_attributes
js = {'coffee': [resource_string(__name__, 'js/src/combinedopenended/edit.coffee')]}
js_module_name = "OpenEndedMarkdownEditingDescriptor"
css = {'scss': [resource_string(__name__, 'css/editor/edit.scss'), resource_string(__name__, 'css/combinedopenended/edit.scss')]}
......
......@@ -188,23 +188,13 @@ class ContentStore(object):
Returns a list of static assets for a course, followed by the total number of assets.
By default all assets are returned, but start and maxresults can be provided to limit the query.
The return format is a list of dictionary elements. Example:
[
{u'displayname': u'profile.jpg', u'chunkSize': 262144, u'length': 85374,
u'uploadDate': datetime.datetime(2012, 10, 3, 5, 41, 54, 183000), u'contentType': u'image/jpeg',
u'_id': {u'category': u'asset', u'name': u'profile.jpg', u'course': u'6.002x', u'tag': u'c4x',
u'org': u'MITx', u'revision': None}, u'md5': u'36dc53519d4b735eb6beba51cd686a0e'},
{u'displayname': u'profile.thumbnail.jpg', u'chunkSize': 262144, u'length': 4073,
u'uploadDate': datetime.datetime(2012, 10, 3, 5, 41, 54, 196000), u'contentType': u'image/jpeg',
u'_id': {u'category': u'asset', u'name': u'profile.thumbnail.jpg', u'course': u'6.002x', u'tag': u'c4x',
u'org': u'MITx', u'revision': None}, u'md5': u'ff1532598830e3feac91c2449eaa60d6'},
....
]
The return format is a list of asset data dictionaries.
The asset data dictionaries have the following keys:
asset_key (:class:`opaque_keys.edx.AssetKey`): The key of the asset
displayname: The human-readable name of the asset
uploadDate (datetime.datetime): The date and time that the file was uploadDate
contentType: The mimetype string of the asset
md5: An md5 hash of the asset content
'''
raise NotImplementedError
......
......@@ -146,9 +146,6 @@ class MongoContentStore(ContentStore):
assets, __ = self.get_all_content_for_course(course_key)
for asset in assets:
asset_id = asset.get('content_son', asset['_id'])
# assuming course_key's deprecated flag is controlling rather than presence or absence of 'run' in _id
asset_location = course_key.make_asset_key(asset_id['category'], asset_id['name'])
# TODO: On 6/19/14, I had to put a try/except around this
# to export a course. The course failed on JSON files in
# the /static/ directory placed in it with an import.
......@@ -157,10 +154,10 @@ class MongoContentStore(ContentStore):
#
# When debugging course exports, this might be a good place
# to look. -- pmitros
self.export(asset_location, output_directory)
self.export(asset['asset_key'], output_directory)
for attr, value in asset.iteritems():
if attr not in ['_id', 'md5', 'uploadDate', 'length', 'chunkSize']:
policy.setdefault(asset_location.name, {})[attr] = value
if attr not in ['_id', 'md5', 'uploadDate', 'length', 'chunkSize', 'asset_key']:
policy.setdefault(asset['asset_key'].name, {})[attr] = value
with open(assets_policy_file, 'w') as f:
json.dump(policy, f)
......@@ -175,23 +172,14 @@ class MongoContentStore(ContentStore):
def _get_all_content_for_course(self, course_key, get_thumbnails=False, start=0, maxresults=-1, sort=None):
'''
Returns a list of all static assets for a course. The return format is a list of dictionary elements. Example:
[
{u'displayname': u'profile.jpg', u'chunkSize': 262144, u'length': 85374,
u'uploadDate': datetime.datetime(2012, 10, 3, 5, 41, 54, 183000), u'contentType': u'image/jpeg',
u'_id': {u'category': u'asset', u'name': u'profile.jpg', u'course': u'6.002x', u'tag': u'c4x',
u'org': u'MITx', u'revision': None}, u'md5': u'36dc53519d4b735eb6beba51cd686a0e'},
{u'displayname': u'profile.thumbnail.jpg', u'chunkSize': 262144, u'length': 4073,
u'uploadDate': datetime.datetime(2012, 10, 3, 5, 41, 54, 196000), u'contentType': u'image/jpeg',
u'_id': {u'category': u'asset', u'name': u'profile.thumbnail.jpg', u'course': u'6.002x', u'tag': u'c4x',
u'org': u'MITx', u'revision': None}, u'md5': u'ff1532598830e3feac91c2449eaa60d6'},
....
]
Returns a list of all static assets for a course. The return format is a list of asset data dictionary elements.
The asset data dictionaries have the following keys:
asset_key (:class:`opaque_keys.edx.AssetKey`): The key of the asset
displayname: The human-readable name of the asset
uploadDate (datetime.datetime): The date and time that the file was uploadDate
contentType: The mimetype string of the asset
md5: An md5 hash of the asset content
'''
if maxresults > 0:
items = self.fs_files.find(
......@@ -203,7 +191,14 @@ class MongoContentStore(ContentStore):
query_for_course(course_key, "asset" if not get_thumbnails else "thumbnail"), sort=sort
)
count = items.count()
return list(items), count
assets = list(items)
# We're constructing the asset key immediately after retrieval from the database so that
# callers are insulated from knowing how our identifiers are stored.
for asset in assets:
asset_id = asset.get('content_son', asset['_id'])
asset['asset_key'] = course_key.make_asset_key(asset_id['category'], asset_id['name'])
return assets, count
def set_attr(self, asset_key, attr, value=True):
"""
......
......@@ -70,6 +70,7 @@ def create_modulestore_instance(engine, content_store, doc_store_config, options
doc_store_config=doc_store_config,
i18n_service=i18n_service or ModuleI18nService(),
branch_setting_func=_get_modulestore_branch_setting,
create_modulestore_instance=create_modulestore_instance,
**_options
)
......
......@@ -12,7 +12,6 @@ from opaque_keys import InvalidKeyError
from . import ModuleStoreWriteBase
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.django import create_modulestore_instance
from opaque_keys.edx.locator import CourseLocator, BlockUsageLocator
from xmodule.modulestore.exceptions import ItemNotFoundError
from opaque_keys.edx.keys import CourseKey, UsageKey
......@@ -30,13 +29,16 @@ class MixedModuleStore(ModuleStoreWriteBase):
"""
ModuleStore knows how to route requests to the right persistence ms
"""
def __init__(self, contentstore, mappings, stores, i18n_service=None, **kwargs):
def __init__(self, contentstore, mappings, stores, i18n_service=None, create_modulestore_instance=None, **kwargs):
"""
Initialize a MixedModuleStore. Here we look into our passed in kwargs which should be a
collection of other modulestore configuration information
"""
super(MixedModuleStore, self).__init__(contentstore, **kwargs)
if create_modulestore_instance is None:
raise ValueError('MixedModuleStore constructor must be passed a create_modulestore_instance function')
self.modulestores = []
self.mappings = {}
......
......@@ -54,6 +54,9 @@ SORT_REVISION_FAVOR_DRAFT = ('_id.revision', pymongo.DESCENDING)
# sort order that returns PUBLISHED items first
SORT_REVISION_FAVOR_PUBLISHED = ('_id.revision', pymongo.ASCENDING)
BLOCK_TYPES_WITH_CHILDREN = list(set(
name for name, class_ in XBlock.load_classes() if getattr(class_, 'has_children', False)
))
class MongoRevisionKey(object):
"""
......@@ -460,14 +463,11 @@ class MongoModuleStore(ModuleStoreWriteBase):
# note this is a bit ugly as when we add new categories of containers, we have to add it here
course_id = self.fill_in_run(course_id)
block_types_with_children = set(
name for name, class_ in XBlock.load_classes() if getattr(class_, 'has_children', False)
)
query = SON([
('_id.tag', 'i4x'),
('_id.org', course_id.org),
('_id.course', course_id.course),
('_id.category', {'$in': list(block_types_with_children)})
('_id.category', {'$in': BLOCK_TYPES_WITH_CHILDREN})
])
# we just want the Location, children, and inheritable metadata
record_filter = {'_id': 1, 'definition.children': 1}
......
......@@ -50,7 +50,8 @@ class DraftModuleStore(MongoModuleStore):
def __init__(self, *args, **kwargs):
"""
Args:
branch_setting_func: a function that returns the branch setting to use for this store's operations
branch_setting_func: a function that returns the branch setting to use for this store's operations.
This should be an attribute from ModuleStoreEnum.Branch
"""
super(DraftModuleStore, self).__init__(*args, **kwargs)
self.branch_setting_func = kwargs.pop('branch_setting_func', lambda: ModuleStoreEnum.Branch.published_only)
......
......@@ -374,7 +374,10 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
'''
Gets the course descriptor for the course identified by the locator
'''
assert(isinstance(course_id, CourseLocator))
if not isinstance(course_id, CourseLocator):
# The supplied CourseKey is of the wrong type, so it can't possibly be stored in this modulestore.
raise ItemNotFoundError(course_id)
course_entry = self._lookup_course(course_id)
root = course_entry['structure']['root']
result = self._load_items(course_entry, [root], 0, lazy=True)
......@@ -389,7 +392,10 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
Note: we return the course_id instead of a boolean here since the found course may have
a different id than the given course_id when ignore_case is True.
'''
assert(isinstance(course_id, CourseLocator))
if not isinstance(course_id, CourseLocator):
# The supplied CourseKey is of the wrong type, so it can't possibly be stored in this modulestore.
return False
course_index = self.db_connection.get_course_index(course_id, ignore_case)
return CourseLocator(course_index['org'], course_index['course'], course_index['run'], course_id.branch) if course_index else None
......@@ -432,7 +438,10 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
descendants.
raises InsufficientSpecificationError or ItemNotFoundError
"""
assert isinstance(usage_key, BlockUsageLocator)
if not isinstance(usage_key, BlockUsageLocator):
# The supplied UsageKey is of the wrong type, so it can't possibly be stored in this modulestore.
raise ItemNotFoundError(usage_key)
course = self._lookup_course(usage_key)
items = self._load_items(course, [usage_key.block_id], depth, lazy=True)
if len(items) == 0:
......@@ -1375,7 +1384,10 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
change to this item, it raises a VersionConflictError unless force is True. In the force case, it forks
the course but leaves the head pointer where it is (this change will not be in the course head).
"""
assert isinstance(usage_locator, BlockUsageLocator)
if not isinstance(usage_locator, BlockUsageLocator):
# The supplied UsageKey is of the wrong type, so it can't possibly be stored in this modulestore.
raise ItemNotFoundError(usage_locator)
original_structure = self._lookup_course(usage_locator.course_key)['structure']
if original_structure['root'] == usage_locator.block_id:
raise ValueError("Cannot delete the root of a course")
......
......@@ -104,12 +104,6 @@ class TestMixedModuleStore(unittest.TestCase):
self.addCleanup(self.connection.close)
super(TestMixedModuleStore, self).setUp()
patcher = patch.multiple(
'xmodule.modulestore.mixed',
create_modulestore_instance=create_modulestore_instance,
)
patcher.start()
self.addCleanup(patcher.stop)
self.addTypeEqualityFunc(BlockUsageLocator, '_compareIgnoreVersion')
self.addTypeEqualityFunc(CourseLocator, '_compareIgnoreVersion')
# define attrs which get set in initdb to quell pylint
......@@ -207,7 +201,7 @@ class TestMixedModuleStore(unittest.TestCase):
if index > 0:
store_configs[index], store_configs[0] = store_configs[0], store_configs[index]
break
self.store = MixedModuleStore(None, **self.options)
self.store = MixedModuleStore(None, create_modulestore_instance=create_modulestore_instance, **self.options)
self.addCleanup(self.store.close_all_connections)
# convert to CourseKeys
......
......@@ -151,7 +151,6 @@ def import_from_xml(
# If we're going to remap the course_id, then we can only do that with
# a single course
if target_course_id:
assert(len(xml_module_store.modules) == 1)
......
......@@ -19,7 +19,7 @@ from xblock.field_data import DictFieldData
from xblock.fields import ScopeIds
from xmodule.x_module import ModuleSystem, XModuleDescriptor, XModuleMixin
from xmodule.modulestore.inheritance import InheritanceMixin
from xmodule.modulestore.inheritance import InheritanceMixin, own_metadata
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from xmodule.mako_module import MakoDescriptorSystem
from xmodule.error_module import ErrorDescriptor
......@@ -154,3 +154,156 @@ class LogicTest(unittest.TestCase):
def ajax_request(self, dispatch, data):
"""Call Xmodule.handle_ajax."""
return json.loads(self.xmodule.handle_ajax(dispatch, data))
class CourseComparisonTest(unittest.TestCase):
"""
Mixin that has methods for comparing courses for equality.
"""
def setUp(self):
self.field_exclusions = set()
self.ignored_asset_keys = set()
def exclude_field(self, usage_id, field_name):
"""
Mark field ``field_name`` of expected block usage ``usage_id`` as ignored
Args:
usage_id (:class:`opaque_keys.edx.UsageKey` or ``None``). If ``None``, skip, this field in all blocks
field_name (string): The name of the field to skip
"""
self.field_exclusions.add((usage_id, field_name))
def ignore_asset_key(self, key_name):
"""
Add an asset key to the list of keys to be ignored when comparing assets.
Args:
key_name: The name of the key to ignore.
"""
self.ignored_asset_keys.add(key_name)
def assertCoursesEqual(self, expected_store, expected_course_key, actual_store, actual_course_key):
"""
Assert that the courses identified by ``expected_course_key`` in ``expected_store`` and
``actual_course_key`` in ``actual_store`` are identical (ignore differences related
owing to the course_keys being different).
Any field value mentioned in ``self.field_exclusions`` by the key (usage_id, field_name)
will be ignored for the purpose of equality checking.
"""
expected_items = expected_store.get_items(expected_course_key)
actual_items = actual_store.get_items(actual_course_key)
self.assertGreater(len(expected_items), 0)
self.assertEqual(len(expected_items), len(actual_items))
actual_item_map = {item.location: item for item in actual_items}
for expected_item in expected_items:
actual_item_location = expected_item.location.map_into_course(actual_course_key)
if expected_item.location.category == 'course':
actual_item_location = actual_item_location.replace(name=actual_item_location.run)
actual_item = actual_item_map.get(actual_item_location)
# compare published state
exp_pub_state = expected_store.compute_publish_state(expected_item)
act_pub_state = actual_store.compute_publish_state(actual_item)
self.assertEqual(
exp_pub_state,
act_pub_state,
'Published states for usages {} and {} differ: {!r} != {!r}'.format(
expected_item.location,
actual_item.location,
exp_pub_state,
act_pub_state
)
)
# compare fields
self.assertEqual(expected_item.fields, actual_item.fields)
for field_name in expected_item.fields:
if (expected_item.scope_ids.usage_id, field_name) in self.field_exclusions:
continue
if (None, field_name) in self.field_exclusions:
continue
# Children are handled specially
if field_name == 'children':
continue
exp_value = getattr(expected_item, field_name)
actual_value = getattr(actual_item, field_name)
self.assertEqual(
exp_value,
actual_value,
"Field {!r} doesn't match between usages {} and {}: {!r} != {!r}".format(
field_name,
expected_item.scope_ids.usage_id,
actual_item.scope_ids.usage_id,
exp_value,
actual_value,
)
)
# compare children
self.assertEqual(expected_item.has_children, actual_item.has_children)
if expected_item.has_children:
expected_children = []
for course1_item_child in expected_item.children:
expected_children.append(
course1_item_child.map_into_course(actual_course_key)
)
self.assertEqual(expected_children, actual_item.children)
def assertAssetEqual(self, expected_course_key, expected_asset, actual_course_key, actual_asset):
"""
Assert that two assets are equal, allowing for differences related to their being from different courses.
"""
for key in self.ignored_asset_keys:
if key in expected_asset:
del expected_asset[key]
if key in actual_asset:
del actual_asset[key]
expected_key = expected_asset.pop('asset_key')
actual_key = actual_asset.pop('asset_key')
self.assertEqual(expected_key.map_into_course(actual_course_key), actual_key)
self.assertEqual(expected_key, actual_key.map_into_course(expected_course_key))
expected_filename = expected_asset.pop('filename')
actual_filename = actual_asset.pop('filename')
self.assertEqual(expected_key.to_deprecated_string(), expected_filename)
self.assertEqual(actual_key.to_deprecated_string(), actual_filename)
self.assertEqual(expected_asset, actual_asset)
def _assertAssetsEqual(self, expected_course_key, expected_assets, actual_course_key, actual_assets): # pylint: disable=invalid-name
"""
Private helper method for assertAssetsEqual
"""
self.assertEqual(len(expected_assets), len(actual_assets))
actual_assets_map = {asset['asset_key']: asset for asset in actual_assets}
for expected_item in expected_assets:
actual_item = actual_assets_map[expected_item['asset_key'].map_into_course(actual_course_key)]
self.assertAssetEqual(expected_course_key, expected_item, actual_course_key, actual_item)
def assertAssetsEqual(self, expected_store, expected_course_key, actual_store, actual_course_key):
"""
Assert that the course assets identified by ``expected_course_key`` in ``expected_store`` and
``actual_course_key`` in ``actual_store`` are identical, allowing for differences related
to their being from different course keys.
"""
expected_content, expected_count = expected_store.get_all_content_for_course(expected_course_key)
actual_content, actual_count = actual_store.get_all_content_for_course(actual_course_key)
self.assertEqual(expected_count, actual_count)
self._assertAssetsEqual(expected_course_key, expected_content, actual_course_key, actual_content)
expected_thumbs = expected_store.get_all_content_thumbnails_for_course(expected_course_key)
actual_thumbs = actual_store.get_all_content_thumbnails_for_course(actual_course_key)
self._assertAssetsEqual(expected_course_key, expected_thumbs, actual_course_key, actual_thumbs)
......@@ -123,17 +123,6 @@ class XmlDescriptor(XModuleDescriptor):
# Note -- url_name isn't in this list because it's handled specially on
# import and export.
# TODO (vshnayder): Do we need a list of metadata we actually
# understand? And if we do, is this the place?
# Related: What's the right behavior for clean_metadata?
metadata_attributes = ('format', 'graceperiod', 'showanswer', 'rerandomize',
'start', 'due', 'graded', 'display_name', 'url_name', 'hide_from_toc',
'ispublic', # if True, then course is listed for all users; see
'xqa_key', # for xqaa server access
'giturl', # url of git server for origin of file
# VS[compat] Remove once unused.
'name', 'slug')
metadata_to_strip = ('data_dir',
'tabs', 'grading_policy', 'published_by', 'published_date',
'discussion_blackouts',
......@@ -157,12 +146,12 @@ class XmlDescriptor(XModuleDescriptor):
@classmethod
def clean_metadata_from_xml(cls, xml_object):
"""
Remove any attribute named in cls.metadata_attributes from the supplied
Remove any attribute named for a field with scope Scope.settings from the supplied
xml_object
"""
for attr in cls.metadata_attributes:
if xml_object.get(attr) is not None:
del xml_object.attrib[attr]
for field_name, field in cls.fields.items():
if field.scope == Scope.settings and xml_object.get(field_name) is not None:
del xml_object.attrib[field_name]
@classmethod
def file_to_xml(cls, file_object):
......@@ -220,6 +209,9 @@ class XmlDescriptor(XModuleDescriptor):
definition_xml = cls.load_file(filepath, system.resources_fs, def_id)
# Add the attributes from the pointer node
definition_xml.attrib.update(xml_object.attrib)
definition_metadata = get_metadata_from_xml(definition_xml)
cls.clean_metadata_from_xml(definition_xml)
definition, children = cls.definition_from_xml(definition_xml, system)
......
<section class="about">
<h2>About This Course</h2>
<p>Include your long course description here. The long course description should contain 150-400 words.</p>
<p>This is paragraph 2 of the long course description. Add more paragraphs as needed. Make sure to enclose them in paragraph tags.</p>
</section>
<section class="prerequisites">
<h2>Prerequisites</h2>
<p>Add information about course prerequisites here.</p>
</section>
<section class="course-staff">
<h2>Course Staff</h2>
<article class="teacher">
<div class="teacher-image">
<img src="/static/images/pl-faculty.png" align="left" style="margin:0 20 px 0" alt="Course Staff Image #1">
</div>
<h3>Staff Member #1</h3>
<p>Biography of instructor/staff member #1</p>
</article>
<article class="teacher">
<div class="teacher-image">
<img src="/static/images/pl-faculty.png" align="left" style="margin:0 20 px 0" alt="Course Staff Image #2">
</div>
<h3>Staff Member #2</h3>
<p>Biography of instructor/staff member #2</p>
</article>
</section>
<section class="faq">
<section class="responses">
<h2>Frequently Asked Questions</h2>
<article class="response">
<h3>Do I need to buy a textbook?</h3>
<p>No, a free online version of Chemistry: Principles, Patterns, and Applications, First Edition by Bruce Averill and Patricia Eldredge will be available, though you can purchase a printed version (published by FlatWorld Knowledge) if you’d like.</p>
</article>
<article class="response">
<h3>Question #2</h3>
<p>Your answer would be displayed here.</p>
</article>
</section>
</section>
<annotatable>
<instructions>
<p>Enter your (optional) instructions for the exercise in HTML format.</p>
<p>Annotations are specified by an <code>&lt;annotation&gt;</code> tag which may may have the following attributes:</p>
<ul class="instructions-template">
<li><code>title</code> (optional). Title of the annotation. Defaults to <i>Commentary</i> if omitted.</li>
<li><code>body</code> (<b>required</b>). Text of the annotation.</li>
<li><code>problem</code> (optional). Numeric index of the problem associated with this annotation. This is a zero-based index, so the first problem on the page would have <code>problem="0"</code>.</li>
<li><code>highlight</code> (optional). Possible values: yellow, red, orange, green, blue, or purple. Defaults to yellow if this attribute is omitted.</li>
</ul>
</instructions>
<p>Add your HTML with annotation spans here.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <annotation title="My title" body="My comment" highlight="yellow" problem="0">Ut sodales laoreet est, egestas gravida felis egestas nec.</annotation> Aenean at volutpat erat. Cras commodo viverra nibh in aliquam.</p>
<p>Nulla facilisi. <annotation body="Basic annotation example." problem="1">Pellentesque id vestibulum libero.</annotation> Suspendisse potenti. Morbi scelerisque nisi vitae felis dictum mattis. Nam sit amet magna elit. Nullam volutpat cursus est, sit amet sagittis odio vulputate et. Curabitur euismod, orci in vulputate imperdiet, augue lorem tempor purus, id aliquet augue turpis a est. Aenean a sagittis libero. Praesent fringilla pretium magna, non condimentum risus elementum nec. Pellentesque faucibus elementum pharetra. Pellentesque vitae metus eros.</p>
</annotatable>
<annotatable>
<instructions>
<p>Enter your (optional) instructions for the exercise in HTML format.</p>
<p>Annotations are specified by an <code>&lt;annotation&gt;</code> tag which may may have the following attributes:</p>
<ul class="instructions-template">
<li><code>title</code> (optional). Title of the annotation. Defaults to <i>Commentary</i> if omitted.</li>
<li><code>body</code> (<b>required</b>). Text of the annotation.</li>
<li><code>problem</code> (optional). Numeric index of the problem associated with this annotation. This is a zero-based index, so the first problem on the page would have <code>problem="0"</code>.</li>
<li><code>highlight</code> (optional). Possible values: yellow, red, orange, green, blue, or purple. Defaults to yellow if this attribute is omitted.</li>
</ul>
</instructions>
<p>Add your HTML with annotation spans here.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <annotation title="My title" body="My comment" highlight="yellow" problem="0">Ut sodales laoreet est, egestas gravida felis egestas nec.</annotation> Aenean at volutpat erat. Cras commodo viverra nibh in aliquam.</p>
<p>Nulla facilisi. <annotation body="Basic annotation example." problem="1">Pellentesque id vestibulum libero.</annotation> Suspendisse potenti. Morbi scelerisque nisi vitae felis dictum mattis. Nam sit amet magna elit. Nullam volutpat cursus est, sit amet sagittis odio vulputate et. Curabitur euismod, orci in vulputate imperdiet, augue lorem tempor purus, id aliquet augue turpis a est. Aenean a sagittis libero. Praesent fringilla pretium magna, non condimentum risus elementum nec. Pellentesque faucibus elementum pharetra. Pellentesque vitae metus eros.</p>
</annotatable>
<annotatable>
<p>This is an example annotation.</p>
<p>This page is required to post a comment <annotation title="My title" body="My comment" highlight="yellow" problem="0">These are one of the tags.</annotation> Thanks</p>
<p>Check this. <annotation body="Basic annotation example." problem="1">This is something else.</annotation> Specialized problems are advanced problems such as annotations, open response assessments, and word clouds. These problems are available through the Advanced component</p>
</annotatable>
<annotatable>
<instructions>
<p>Enter your (optional) instructions for the exercise in HTML format.</p>
<p>Annotations are specified by an <code>&lt;annotation&gt;</code> tag which may may have the following attributes:</p>
<ul class="instructions-template">
<li><code>title</code> (optional). Title of the annotation. Defaults to <i>Commentary</i> if omitted.</li>
<li><code>body</code> (<b>required</b>). Text of the annotation.</li>
<li><code>problem</code> (optional). Numeric index of the problem associated with this annotation. This is a zero-based index, so the first problem on the page would have <code>problem="0"</code>.</li>
<li><code>highlight</code> (optional). Possible values: yellow, red, orange, green, blue, or purple. Defaults to yellow if this attribute is omitted.</li>
</ul>
</instructions>
<p>Add your HTML with annotation spans here.</p>
<p>
<a href="http://static.class.stanford.edu/stanford-hills-big.jpg" class="modal-content">
<img alt="The Stanford Hills" src="http://static.class.stanford.edu/stanford-hills-small.jpg"/>
</a>
</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <annotation title="My title" body="My comment" highlight="yellow" problem="0">Ut sodales laoreet est, egestas gravida felis egestas nec.</annotation> Aenean at volutpat erat. Cras commodo viverra nibh in aliquam.</p>
<p>Nulla facilisi. <annotation body="Basic annotation example." problem="1">Pellentesque id vestibulum libero.</annotation> Suspendisse potenti. Morbi scelerisque nisi vitae felis dictum mattis. Nam sit amet magna elit. Nullam volutpat cursus est, sit amet sagittis odio vulputate et. Curabitur euismod, orci in vulputate imperdiet, augue lorem tempor purus, id aliquet augue turpis a est. Aenean a sagittis libero. Praesent fringilla pretium magna, non condimentum risus elementum nec. Pellentesque faucibus elementum pharetra. Pellentesque vitae metus eros.</p>
</annotatable>
<annotatable>
<instructions>
<p>Enter your (optional) instructions for the exercise in HTML format.</p>
<p>Annotations are specified by an <code>&lt;annotation&gt;</code> tag which may may have the following attributes:</p>
<ul class="instructions-template">
<li><code>title</code> (optional). Title of the annotation. Defaults to <i>Commentary</i> if omitted.</li>
<li><code>body</code> (<b>required</b>). Text of the annotation.</li>
<li><code>problem</code> (optional). Numeric index of the problem associated with this annotation. This is a zero-based index, so the first problem on the page would have <code>problem="0"</code>.</li>
<li><code>highlight</code> (optional). Possible values: yellow, red, orange, green, blue, or purple. Defaults to yellow if this attribute is omitted.</li>
</ul>
</instructions>
<p>Add your HTML with annotation spans here.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <annotation title="My title" body="My comment" highlight="yellow" problem="0">Ut sodales laoreet est, egestas gravida felis egestas nec.</annotation> Aenean at volutpat erat. Cras commodo viverra nibh in aliquam.</p>
<p>Nulla facilisi. <annotation body="Basic annotation example." problem="1">Pellentesque id vestibulum libero.</annotation> Suspendisse potenti. Morbi scelerisque nisi vitae felis dictum mattis. Nam sit amet magna elit. Nullam volutpat cursus est, sit amet sagittis odio vulputate et. Curabitur euismod, orci in vulputate imperdiet, augue lorem tempor purus, id aliquet augue turpis a est. Aenean a sagittis libero. Praesent fringilla pretium magna, non condimentum risus elementum nec. Pellentesque faucibus elementum pharetra. Pellentesque vitae metus eros.</p>
</annotatable>
<annotatable>
<instructions>
<p>Enter your (optional) instructions for the exercise in HTML format.</p>
<p>Annotations are specified by an <code>&lt;annotation&gt;</code> tag which may may have the following attributes:</p>
<ul class="instructions-template">
<li><code>title</code> (optional). Title of the annotation. Defaults to <i>Commentary</i> if omitted.</li>
<li><code>body</code> (<b>required</b>). Text of the annotation.</li>
<li><code>problem</code> (optional). Numeric index of the problem associated with this annotation. This is a zero-based index, so the first problem on the page would have <code>problem="0"</code>.</li>
<li><code>highlight</code> (optional). Possible values: yellow, red, orange, green, blue, or purple. Defaults to yellow if this attribute is omitted.</li>
</ul>
</instructions>
<p>Add your HTML with annotation spans here.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <annotation title="My title" body="My comment" highlight="yellow" problem="0">Ut sodales laoreet est, egestas gravida felis egestas nec.</annotation> Aenean at volutpat erat. Cras commodo viverra nibh in aliquam.</p>
<p>Nulla facilisi. <annotation body="Basic annotation example." problem="1">Pellentesque id vestibulum libero.</annotation> Suspendisse potenti. Morbi scelerisque nisi vitae felis dictum mattis. Nam sit amet magna elit. Nullam volutpat cursus est, sit amet sagittis odio vulputate et. Curabitur euismod, orci in vulputate imperdiet, augue lorem tempor purus, id aliquet augue turpis a est. Aenean a sagittis libero. Praesent fringilla pretium magna, non condimentum risus elementum nec. Pellentesque faucibus elementum pharetra. Pellentesque vitae metus eros.</p>
</annotatable>
<chapter display_name="New Section 9 - Zoomable Image">
<sequential url_name="0cd40e13b4a045aba07d4f626c8b32de"/>
</chapter>
<chapter display_name="New Section 7 - Word Cloud">
<sequential url_name="613404c6df1445ed81f12883dde30a41"/>
</chapter>
<chapter display_name="New Section 4 - mathjax">
<sequential url_name="67c9c6cd94fe498fb1dc965c35eca3d3"/>
</chapter>
<chapter display_name="New Section 10 - Capa">
<sequential url_name="3aa3759deca94e1783b7dc9c148cd483"/>
<sequential url_name="bd0b30ef8bea48ff86559be1cbe2fa49"/>
<sequential url_name="dc2b88afd57241f9bcd2dcbd03c6c2f3"/>
<sequential url_name="fbbe37e2980c4f0d96b0b8ac45c0378b"/>
<sequential url_name="21b1a19dbe264a98b06ce9567a3e4171"/>
<sequential url_name="508e5fa820b643b1a329e2ab5dd59393"/>
<sequential url_name="f585fca58e5c4fe8ab231a5f62701de3"/>
<sequential url_name="17d39634673a4151b6f337a5c216eb52"/>
<sequential url_name="158963ff751747e3945f3834dd30e5fb"/>
<sequential url_name="d6d7e96bf6a441a4b4e7c7eac0d0e573"/>
<sequential url_name="c18b834531e14a3fb070dabf16380541"/>
<sequential url_name="d49ee0959c564c8d8b55660ca5fa9bcd"/>
<sequential url_name="313d1bb9031c4d529c7018248d6fff52"/>
<sequential url_name="bb9bc5a7d0d945cea2a77e3d85f28c41"/>
<sequential url_name="f0e52b8eec5647ffb6013aef62b3d309"/>
<sequential url_name="7a598df4cc4345138332c1d19ecd963d"/>
<sequential url_name="7fe9686bb8fe4edba75867ddd1d7b1c5"/>
<sequential url_name="c59bd9a5a7ec4b31a95515c14bb9f552"/>
<sequential url_name="0aa765632f4d4b84ad8d96f41cec5825"/>
<sequential url_name="8ad25eec767f40ae81bcc7555778c91e"/>
<sequential url_name="0d0e69d08e95436fbbf1be4c6dfec48a"/>
<sequential url_name="2db8efb4573842c8854648a3ac9e52a4"/>
<sequential url_name="7942fe1a06aa439092aabe3615d91b15"/>
<sequential url_name="1dd8f4178f2a4b9cb09f37c5d6230f9d"/>
<sequential url_name="bba59b360c344a1db0eb3239e2381484"/>
<sequential url_name="589cf38cfb22450a901818b48d4b7ff5"/>
<sequential url_name="b857bc7d37c74e38b51741340da91dcd"/>
<sequential url_name="ac37154b78454cecaad080221cf1dbd5"/>
<sequential url_name="30e61af5a8d74833bb66e19ccea1e5d8"/>
<sequential url_name="c76b46a765e24c1f9f51de2b49131be0"/>
<sequential url_name="3b115f75b12b42699a3148ea0ffee76b"/>
<sequential url_name="6c4c10b89cc449fcbde0006c47e3ee26"/>
<sequential url_name="aa338c6acd1e498ca8d4ccf6ded72f9b"/>
<sequential url_name="2e23db09e8b5472cbae9624208e3e1d7"/>
<sequential url_name="01a66b857fad4221b01f742ec0e86c49"/>
<sequential url_name="ca6fc483ef064fa7b275f9e712f041f6"/>
<sequential url_name="4026dba735fe450faf81f766c63bef8b"/>
<sequential url_name="4cd0b5b3dd3343b5937fea80ec5005cc"/>
</chapter>
<chapter display_name="New Section 8 - Drag and Drop">
<sequential url_name="47b7432f998c45abad9f79effeda60bf"/>
</chapter>
<chapter display_name="New Section 1 - Annotatable">
<sequential url_name="d7d631967807476485aa26ba0c39a992"/>
<sequential url_name="f09502cf408742c2aa3c92705ab1dce7"/>
<sequential url_name="0e86943b2cb54a56a1a14c13da3f388d"/>
<sequential url_name="948737f132254c2aa65f6024edee7e68"/>
<sequential url_name="f9372e3b199a4986a46c8d18e094b931"/>
<sequential url_name="d912a92ed03d4f818661a1636b8a6f9b"/>
</chapter>
<chapter display_name="New Section 3 - foldit">
<sequential url_name="363603b2c7d34d26a3baa9de29be2211"/>
</chapter>
<chapter display_name="New Section 6 - Video">
<sequential url_name="c681c865017d4c0ea931f7345aa79277"/>
</chapter>
<chapter display_name="New Section 5 - LTI">
<sequential url_name="d0e7879a63a4429fb1223a22443681b9"/>
</chapter>
<chapter display_name="New Section 2 - Open Ended">
<sequential url_name="b7ebe0f048e9466e9ef32e7815fb5a93"/>
<sequential url_name="5c33f2c2b3aa45f5bfbf7bf7f9bcb2ff"/>
<sequential url_name="f58fd90cbd794cad881692d3b6e5cdbf"/>
<sequential url_name="345d618ca88944668d86586f83bff338"/>
<sequential url_name="4eadf76912cd436b9d698c8759784d8d"/>
</chapter>
<combinedopenended accept_file_upload="true" markdown="[prompt]&#10; &lt;h3&gt;Censorship in the Libraries&lt;/h3&gt;&#10;&#10; &lt;p&gt;'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author&#10; &lt;/p&gt;&#10;&#10; &lt;p&gt;&#10; Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.&#10; &lt;/p&gt;&#10;[prompt]&#10;[rubric]&#10;+ Ideas&#10;- Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.&#10;- Attempts a main idea. Sometimes loses focus or ineffectively displays focus.&#10;- Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.&#10;- Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.&#10;+ Content&#10;- Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.&#10;- Includes little information and few or no details. Explores only one or two facets of the topic.&#10;- Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.&#10;- Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.&#10;+ Organization&#10;- Ideas organized illogically, transitions weak, and response difficult to follow.&#10;- Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.&#10;- Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.&#10;+ Style&#10;- Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.&#10;- Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).&#10;- Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.&#10;+ Voice&#10;- Demonstrates language and tone that may be inappropriate to task and reader.&#10;- Demonstrates an attempt to adjust language and tone to task and reader.&#10;- Demonstrates effective adjustment of language and tone to task and reader.&#10;[rubric]&#10;[tasks]&#10;(Self)&#10;[tasks]&#10;&#10;">
<prompt>
<h3>Censorship in the Libraries</h3>
<p>'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author
</p>
<p>
Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.
</p>
</prompt>
<rubric>
<rubric>
<category>
<description>
Ideas
</description>
<option>
Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.
</option>
<option>
Attempts a main idea. Sometimes loses focus or ineffectively displays focus.
</option>
<option>
Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.
</option>
<option>
Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.
</option>
</category>
<category>
<description>
Content
</description>
<option>
Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.
</option>
<option>
Includes little information and few or no details. Explores only one or two facets of the topic.
</option>
<option>
Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.
</option>
<option>
Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.
</option>
</category>
<category>
<description>
Organization
</description>
<option>
Ideas organized illogically, transitions weak, and response difficult to follow.
</option>
<option>
Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.
</option>
<option>
Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.
</option>
</category>
<category>
<description>
Style
</description>
<option>
Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.
</option>
<option>
Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).
</option>
<option>
Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.
</option>
</category>
<category>
<description>
Voice
</description>
<option>
Demonstrates language and tone that may be inappropriate to task and reader.
</option>
<option>
Demonstrates an attempt to adjust language and tone to task and reader.
</option>
<option>
Demonstrates effective adjustment of language and tone to task and reader.
</option>
</category>
</rubric>
</rubric>
<task>
<selfassessment/>
</task>
</combinedopenended>
<combinedopenended markdown="[prompt]&#10; &lt;h3&gt;Censorship in the Libraries&lt;/h3&gt;&#10;&#10; &lt;p&gt;'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author&#10; &lt;/p&gt;&#10;&#10; &lt;p&gt;&#10; Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.&#10; &lt;/p&gt;&#10;[prompt]&#10;[rubric]&#10;+ Ideas&#10;- Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.&#10;- Attempts a main idea. Sometimes loses focus or ineffectively displays focus.&#10;- Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.&#10;- Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.&#10;+ Content&#10;- Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.&#10;- Includes little information and few or no details. Explores only one or two facets of the topic.&#10;- Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.&#10;- Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.&#10;+ Organization&#10;- Ideas organized illogically, transitions weak, and response difficult to follow.&#10;- Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.&#10;- Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.&#10;+ Style&#10;- Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.&#10;- Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).&#10;- Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.&#10;+ Voice&#10;- Demonstrates language and tone that may be inappropriate to task and reader.&#10;- Demonstrates an attempt to adjust language and tone to task and reader.&#10;- Demonstrates effective adjustment of language and tone to task and reader.&#10;[rubric]&#10;[tasks]&#10;(Peer)&#10;[tasks]&#10;&#10;">
<prompt>
<h3>Censorship in the Libraries</h3>
<p>'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author
</p>
<p>
Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.
</p>
</prompt>
<rubric>
<rubric>
<category>
<description>
Ideas
</description>
<option>
Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.
</option>
<option>
Attempts a main idea. Sometimes loses focus or ineffectively displays focus.
</option>
<option>
Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.
</option>
<option>
Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.
</option>
</category>
<category>
<description>
Content
</description>
<option>
Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.
</option>
<option>
Includes little information and few or no details. Explores only one or two facets of the topic.
</option>
<option>
Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.
</option>
<option>
Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.
</option>
</category>
<category>
<description>
Organization
</description>
<option>
Ideas organized illogically, transitions weak, and response difficult to follow.
</option>
<option>
Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.
</option>
<option>
Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.
</option>
</category>
<category>
<description>
Style
</description>
<option>
Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.
</option>
<option>
Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).
</option>
<option>
Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.
</option>
</category>
<category>
<description>
Voice
</description>
<option>
Demonstrates language and tone that may be inappropriate to task and reader.
</option>
<option>
Demonstrates an attempt to adjust language and tone to task and reader.
</option>
<option>
Demonstrates effective adjustment of language and tone to task and reader.
</option>
</category>
</rubric>
</rubric>
<task>
<openended>
<openendedparam>
<initial_display>Enter essay here.</initial_display>
<answer_display>This is the answer.</answer_display>
<grader_payload>{"grader_settings" : "peer_grading.conf", "problem_id" : "6.002x/Welcome/OETest"}</grader_payload>
</openendedparam>
</openended>
</task>
</combinedopenended>
<combinedopenended markdown="[prompt]&#10; &lt;h3&gt;Censorship in the Libraries&lt;/h3&gt;&#10;&#10; &lt;p&gt;'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author&#10; &lt;/p&gt;&#10;&#10; &lt;p&gt;&#10; Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.&#10; &lt;/p&gt;&#10;[prompt]&#10;[rubric]&#10;+ Ideas&#10;- Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.&#10;- Attempts a main idea. Sometimes loses focus or ineffectively displays focus.&#10;- Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.&#10;- Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.&#10;+ Content&#10;- Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.&#10;- Includes little information and few or no details. Explores only one or two facets of the topic.&#10;- Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.&#10;- Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.&#10;+ Organization&#10;- Ideas organized illogically, transitions weak, and response difficult to follow.&#10;- Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.&#10;- Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.&#10;+ Style&#10;- Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.&#10;- Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).&#10;- Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.&#10;+ Voice&#10;- Demonstrates language and tone that may be inappropriate to task and reader.&#10;- Demonstrates an attempt to adjust language and tone to task and reader.&#10;- Demonstrates effective adjustment of language and tone to task and reader.&#10;[rubric]&#10;[tasks]&#10;(Self)&#10;[tasks]&#10;&#10;">
<prompt>
<h3>Censorship in the Libraries</h3>
<p>'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author
</p>
<p>
Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.
</p>
</prompt>
<rubric>
<rubric>
<category>
<description>
Ideas
</description>
<option>
Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.
</option>
<option>
Attempts a main idea. Sometimes loses focus or ineffectively displays focus.
</option>
<option>
Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.
</option>
<option>
Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.
</option>
</category>
<category>
<description>
Content
</description>
<option>
Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.
</option>
<option>
Includes little information and few or no details. Explores only one or two facets of the topic.
</option>
<option>
Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.
</option>
<option>
Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.
</option>
</category>
<category>
<description>
Organization
</description>
<option>
Ideas organized illogically, transitions weak, and response difficult to follow.
</option>
<option>
Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.
</option>
<option>
Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.
</option>
</category>
<category>
<description>
Style
</description>
<option>
Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.
</option>
<option>
Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).
</option>
<option>
Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.
</option>
</category>
<category>
<description>
Voice
</description>
<option>
Demonstrates language and tone that may be inappropriate to task and reader.
</option>
<option>
Demonstrates an attempt to adjust language and tone to task and reader.
</option>
<option>
Demonstrates effective adjustment of language and tone to task and reader.
</option>
</category>
</rubric>
</rubric>
<task>
<selfassessment/>
</task>
</combinedopenended>
<course url_name="2014" org="ManTestX" course="ManTest1"/>
\ No newline at end of file
<course advanced_modules="[&quot;annotatable&quot;, &quot;combinedopenended&quot;, &quot;peergrading&quot;, &quot;lti&quot;, &quot;word_cloud&quot;]" display_name="Manual Smoke Test Course 1" lti_passports="[&quot;ims:12345:secret&quot;]" pdf_textbooks="[{&quot;tab_title&quot;: &quot;An Example Paper&quot;, &quot;id&quot;: &quot;0An_Example_Paper&quot;, &quot;chapters&quot;: [{&quot;url&quot;: &quot;/static/1.pdf&quot;, &quot;title&quot;: &quot;Introduction &quot;}]}]" show_calculator="true" show_chat="true" start="2014-06-26T00:00:00Z">
<chapter url_name="a64a6f63f75d430aa71e6ce113c5b4d2"/>
<chapter url_name="d68c2861c10a4c9d92a679b4cfc0f924"/>
<chapter url_name="ab97a6dbfafd48868c36bed4c8c5391d"/>
<chapter url_name="5bb7a5ab824f460580a756a4f347377c"/>
<chapter url_name="ce2fd991d84b4a5ca75350eb8e350627"/>
<chapter url_name="be8a64868f2f460ea490e001a25e588d"/>
<chapter url_name="3d216a50442f4cd5a1d4171c68f13f58"/>
<chapter url_name="a0178ff300514e24829e239604dce12c"/>
<chapter url_name="2df1fe87253549199f30cabb19e14b7c"/>
<chapter url_name="60989ac1589241ed9dbca0f2070276fd"/>
<wiki slug="ManTestX.ManTest1.2014"/>
</course>
<combinedopenended accept_file_upload="true" markdown="[prompt]&#10; &lt;h3&gt;Censorship in the Libraries&lt;/h3&gt;&#10;&#10; &lt;p&gt;'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author&#10; &lt;/p&gt;&#10;&#10; &lt;p&gt;&#10; Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.&#10; &lt;/p&gt;&#10;[prompt]&#10;[rubric]&#10;+ Ideas&#10;- Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.&#10;- Attempts a main idea. Sometimes loses focus or ineffectively displays focus.&#10;- Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.&#10;- Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.&#10;+ Content&#10;- Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.&#10;- Includes little information and few or no details. Explores only one or two facets of the topic.&#10;- Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.&#10;- Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.&#10;+ Organization&#10;- Ideas organized illogically, transitions weak, and response difficult to follow.&#10;- Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.&#10;- Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.&#10;+ Style&#10;- Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.&#10;- Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).&#10;- Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.&#10;+ Voice&#10;- Demonstrates language and tone that may be inappropriate to task and reader.&#10;- Demonstrates an attempt to adjust language and tone to task and reader.&#10;- Demonstrates effective adjustment of language and tone to task and reader.&#10;[rubric]&#10;[tasks]&#10;(Self)&#10;[tasks]&#10;&#10;">
<prompt>
<h3>Censorship in the Libraries</h3>
<p>'All of us can think of a book that we hope none of our children or any other children have taken off the shelf. But if I have the right to remove that book from the shelf -- that work I abhor -- then you also have exactly the same right and so does everyone else. And then we have no books left on the shelf for any of us.' --Katherine Paterson, Author
</p>
<p>
Write a persuasive essay to a newspaper reflecting your views on censorship in libraries. Do you believe that certain materials, such as books, music, movies, magazines, etc., should be removed from the shelves if they are found offensive? Support your position with convincing arguments from your own experience, observations, and/or reading.
</p>
</prompt>
<rubric>
<rubric>
<category>
<description>
Ideas
</description>
<option>
Difficult for the reader to discern the main idea. Too brief or too repetitive to establish or maintain a focus.
</option>
<option>
Attempts a main idea. Sometimes loses focus or ineffectively displays focus.
</option>
<option>
Presents a unifying theme or main idea, but may include minor tangents. Stays somewhat focused on topic and task.
</option>
<option>
Presents a unifying theme or main idea without going off on tangents. Stays completely focused on topic and task.
</option>
</category>
<category>
<description>
Content
</description>
<option>
Includes little information with few or no details or unrelated details. Unsuccessful in attempts to explore any facets of the topic.
</option>
<option>
Includes little information and few or no details. Explores only one or two facets of the topic.
</option>
<option>
Includes sufficient information and supporting details. (Details may not be fully developed; ideas may be listed.) Explores some facets of the topic.
</option>
<option>
Includes in-depth information and exceptional supporting details that are fully developed. Explores all facets of the topic.
</option>
</category>
<category>
<description>
Organization
</description>
<option>
Ideas organized illogically, transitions weak, and response difficult to follow.
</option>
<option>
Attempts to logically organize ideas. Attempts to progress in an order that enhances meaning, and demonstrates use of transitions.
</option>
<option>
Ideas organized logically. Progresses in an order that enhances meaning. Includes smooth transitions.
</option>
</category>
<category>
<description>
Style
</description>
<option>
Contains limited vocabulary, with many words used incorrectly. Demonstrates problems with sentence patterns.
</option>
<option>
Contains basic vocabulary, with words that are predictable and common. Contains mostly simple sentences (although there may be an attempt at more varied sentence patterns).
</option>
<option>
Includes vocabulary to make explanations detailed and precise. Includes varied sentence patterns, including complex sentences.
</option>
</category>
<category>
<description>
Voice
</description>
<option>
Demonstrates language and tone that may be inappropriate to task and reader.
</option>
<option>
Demonstrates an attempt to adjust language and tone to task and reader.
</option>
<option>
Demonstrates effective adjustment of language and tone to task and reader.
</option>
</category>
</rubric>
</rubric>
<task>
<selfassessment/>
</task>
</combinedopenended>
<p><span style="color: #222222; font-family: nimbus-sans, sans-serif, Arial, Verdana; line-height: 25.200000762939453px;">What is edX?</span><br style="color: #222222; font-family: nimbus-sans, sans-serif, Arial, Verdana; line-height: 25.200000762939453px;" /><span style="color: #222222; font-family: nimbus-sans, sans-serif, Arial, Verdana; line-height: 25.200000762939453px;">An organization established by MIT and Harvard University that will develop an open-source technology platform to deliver online courses. EdX will support Harvard and MIT faculty in conducting research on teaching and learning on campus through tools that enrich classroom and laboratory experiences. At the same time, edX will also reach learners around the world through online course materials. The edX website will begin by hosting&nbsp;</span><i style="color: #222222; font-family: nimbus-sans, sans-serif, Arial, Verdana; line-height: 25.200000762939453px;">MITx</i><span style="color: #222222; font-family: nimbus-sans, sans-serif, Arial, Verdana; line-height: 25.200000762939453px;">&nbsp;and Harvardx content, with the goal of adding content from other universities interested in joining the platform. edX will also support the Harvard and MIT faculty in conducting research on teaching and learning.</span></p>
\ No newline at end of file
<problem display_name="Chemical Equation" markdown="null">
<startouttext/>
<p>Some problems may ask for a particular chemical equation. You can practice this technique by writing out the following reaction in the box below.</p>
<center>\( \text{H}_2\text{SO}_4 \longrightarrow \text{ H}^+ + \text{ HSO}_4^-\)</center>
<br/>
<customresponse>
<chemicalequationinput size="50"/>
<answer type="loncapa/python">
if chemcalc.chemical_equations_equal(submission[0], 'H2SO4 -&gt; H^+ + HSO4^-'):
correct = ['correct']
else:
correct = ['incorrect']
</answer>
</customresponse>
<p> Some tips:<ul><li>Only real element symbols are permitted.</li><li>Subscripts are entered with plain text.</li><li>Superscripts are indicated with a caret (^).</li><li>The reaction arrow (\(\longrightarrow\)) is indicated with "-&gt;".</li></ul>
So, you can enter "H2SO4 -&gt; H^+ + HSO4^-".</p>
<endouttext/>
</problem>
<problem display_name="Multiple Choice" markdown="A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.&#10;&#10;One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.&#10;&#10;&gt;&gt;What Apple device competed with the portable CD player?&lt;&lt;&#10; ( ) The iPad&#10; ( ) Napster&#10; (x) The iPod&#10; ( ) The vegetable peeler&#10; &#10;[explanation]&#10;The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks.&#10;[explanation]&#10;">
<p>
A multiple choice problem presents radio buttons for student
input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.</p>
<p> One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.
</p>
<p>What Apple device competed with the portable CD player?</p>
<multiplechoiceresponse>
<choicegroup type="MultipleChoice" label="What Apple device competed with the portable CD player?">
<choice correct="false" name="ipad">The iPad</choice>
<choice correct="false" name="beatles">Napster</choice>
<choice correct="true" name="ipod">The iPod</choice>
<choice correct="false" name="peeler">The vegetable peeler</choice>
</choicegroup>
</multiplechoiceresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks. </p>
</div>
</solution>
</problem>
<problem display_name="Blank Common Problem" markdown="Sample Choice Response &#10;&#10;">
<p>Sample Choice Response </p>
</problem>
<problem display_name="Text Input" markdown="A text input problem accepts a line of text from the student, and evaluates the input for correctness based on an expected answer.&#10;&#10;The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.&#10;&#10;&gt;&gt;Which US state has Lansing as its capital?&lt;&lt;&#10;&#10;= Michigan&#10;&#10;&#10;[explanation]&#10;Lansing is the capital of Michigan, although it is not Michigan's largest city, or even the seat of the county in which it resides.&#10;[explanation]&#10;">
<p>
A text input problem accepts a line of text from the
student, and evaluates the input for correctness based on an expected
answer.
</p>
<p>
The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.
</p>
<p>Which US state has Lansing as its capital? </p>
<stringresponse answer="Michigan" type="ci">
<textline size="20" label="Which US state has Lansing as its capital?"/>
</stringresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Lansing is the capital of Michigan, although it is not Michigan's largest city, or even the seat of the county in which it resides.</p>
</div>
</solution>
</problem>
<problem display_name="Custom Javascript Display and Grading" markdown="null">
<script type="loncapa/python">
import json
def vglcfn(e, ans):
'''
par is a dictionary containing two keys, "answer" and "state"
The value of answer is the JSON string returned by getGrade
The value of state is the JSON string returned by getState
'''
par = json.loads(ans)
# We can use either the value of the answer key to grade
answer = json.loads(par["answer"])
return answer["cylinder"] and not answer["cube"]
'''
# Or we could use the value of the state key
state = json.loads(par["state"])
selectedObjects = state["selectedObjects"]
return selectedObjects["cylinder"] and not selectedObjects["cube"]
'''
</script>
<p>
The shapes below can be selected (yellow) or unselected (cyan).
Clicking on them repeatedly will cycle through these two states.
</p>
<p>
If the cone is selected (and not the cube), a correct answer will be
generated after pressing "Check". Clicking on either "Check" or "Save"
will register the current state.
</p>
<customresponse cfn="vglcfn">
<jsinput gradefn="WebGLDemo.getGrade" get_statefn="WebGLDemo.getState" set_statefn="WebGLDemo.setState" width="400" height="400" html_file="https://studio.edx.org/c4x/edX/DemoX/asset/webGLDemo.html" sop="false"/>
</customresponse>
</problem>
<vertical display_name="text" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/ca6fc483ef064fa7b275f9e712f041f6" index_in_children_list="0">
<html url_name="fd120d9503334db5a2ce53c2e0162128"/>
</vertical>
<vertical display_name="crystallography" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/f0e52b8eec5647ffb6013aef62b3d309" index_in_children_list="0">
<problem url_name="7e39859879f24e8689861024d4f7cb1e"/>
</vertical>
<vertical display_name="chemicalequationinput" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/7a598df4cc4345138332c1d19ecd963d" index_in_children_list="0">
<problem url_name="29fe8cca3a99412c801c5b9ce53780c5"/>
</vertical>
<vertical display_name="choicetext response" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/01a66b857fad4221b01f742ec0e86c49" index_in_children_list="0"/>
<vertical display_name="choice response" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/bd0b30ef8bea48ff86559be1cbe2fa49" index_in_children_list="0">
<problem url_name="5904f30aba7a41d3ab1609e58bb5a6c2"/>
</vertical>
<vertical display_name="textbox" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/b857bc7d37c74e38b51741340da91dcd" index_in_children_list="0">
<problem url_name="5c49dcff565848b8a4834ee8b3beeebc"/>
</vertical>
<vertical display_name="editageneinput" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/0d0e69d08e95436fbbf1be4c6dfec48a" index_in_children_list="0"/>
<vertical display_name="radio group" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/dc2b88afd57241f9bcd2dcbd03c6c2f3" index_in_children_list="0"/>
<vertical display_name="textline" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/313d1bb9031c4d529c7018248d6fff52" index_in_children_list="0"/>
<vertical display_name="file submission" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/ac37154b78454cecaad080221cf1dbd5" index_in_children_list="0"/>
<vertical display_name="Self Assessment" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/b7ebe0f048e9466e9ef32e7815fb5a93" index_in_children_list="0">
<combinedopenended url_name="ecfe4fa774ff48d089ae84daa1f6cc75"/>
</vertical>
<vertical display_name="matlab input" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/30e61af5a8d74833bb66e19ccea1e5d8" index_in_children_list="0"/>
<vertical display_name="formulaeqautioninput" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/1dd8f4178f2a4b9cb09f37c5d6230f9d" index_in_children_list="0"/>
<vertical display_name="symbolic response" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/bba59b360c344a1db0eb3239e2381484" index_in_children_list="0"/>
<vertical display_name="radio group" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/4026dba735fe450faf81f766c63bef8b" index_in_children_list="0">
<problem url_name="370cfd42f00843578f50e32545356ef1"/>
</vertical>
<vertical display_name="external response " parent_sequential_url="i4x://ManTestX/ManTest1/sequential/c76b46a765e24c1f9f51de2b49131be0" index_in_children_list="0"/>
<vertical display_name="custom response" parent_sequential_url="i4x://ManTestX/ManTest1/sequential/d49ee0959c564c8d8b55660ca5fa9bcd" index_in_children_list="0"/>
<h2>Link rewrite tests:</h2>
<p>
<a href="/jump_to/i4x://ManTestX/ManTest1/problem/009f9b6b79404206a2c316117099fed5">Jump to Sports Problem</a>
<a href="/jump_to_id/009f9b6b79404206a2c316117099fed5">Jump to Sports Problem by ID</a>
</p>
<h2>ZOOMING DIAGRAMS</h2>
<p>Some edX classes use extremely large, extremely detailed graphics. To make it easier to understand we can offer two versions of those graphics, with the zoomed section showing when you click on the main view.</p>
<p>The example below is from <a href="https://www.edx.org/course/mit/7-00x/introduction-biology-secret-life/1014" target="_blank">7.00x: Introduction to Biology</a> and shows a subset of the biochemical reactions that cells carry out. </p>
<p>You can view the chemical structures of the molecules by clicking on them. The magnified view also lists the enzymes involved in each step.</p>
<p class="sr">Press spacebar to open the magifier.</p>
<div class="zooming-image-place" style="position: relative;">
<a class="loupe" href="https://studio.edx.org/c4x/edX/DemoX/asset/pathways_detail_01.png">
<img alt="magnify" src="https://studio.edx.org/c4x/edX/DemoX/asset/pathways_overview_01.png" />
</a>
<div class="script_placeholder" data-src="https://studio.edx.org/c4x/edX/DemoX/asset/jquery.loupeAndLightbox.js" />
</div>
<script type="text/javascript">// <![CDATA[
JavascriptLoader.executeModuleScripts($('.zooming-image-place').eq(0), function() {
$('.loupe').loupeAndLightbox({
width: 350,
height: 350,
lightbox: false
});
$(document).keydown(function(event) {
if (event.keyCode == 32) {
event.preventDefault();
$('.loupe img').click();
}
});
});
// ]]></script>
<div id="ap_listener_added"></div>
<html filename="82e9d374eeb944489d5decdb6b8fbd76" display_name="Zooming Image"/>
<ol>Testing</ol>
\ No newline at end of file
<section><article><h2>July 15, 2014</h2>Testing</article></section>
\ No newline at end of file
[{"date": "July 15, 2014", "content": "Testing", "status": "visible", "id": 1}]
\ No newline at end of file
<lti launch_url="http://www.imsglobal.org/developers/LTI/test/v1p1/tool.php" lti_id="ims"/>
{"GRADER": [{"short_label": "HW", "min_count": 12, "type": "Homework", "drop_count": 2, "weight": 0.15}, {"min_count": 12, "type": "Lab", "drop_count": 2, "weight": 0.15}, {"short_label": "Midterm", "min_count": 1, "type": "Midterm Exam", "drop_count": 0, "weight": 0.3}, {"short_label": "Final", "min_count": 1, "type": "Final Exam", "drop_count": 0, "weight": 0.4}], "GRADE_CUTOFFS": {"Pass": 0.5}}
\ No newline at end of file
{"course/2014": {"advanced_modules": ["annotatable", "combinedopenended", "peergrading", "lti", "word_cloud"], "show_calculator": true, "display_name": "Manual Smoke Test Course 1", "tabs": [{"type": "courseware", "name": "Courseware"}, {"type": "course_info", "name": "Course Info"}, {"type": "textbooks", "name": "Textbooks"}, {"type": "discussion", "name": "Discussion"}, {"type": "wiki", "name": "Wiki"}, {"type": "progress", "name": "Progress"}, {"type": "pdf_textbooks", "name": "Textbooks"}, {"type": "open_ended", "name": "Open Ended Panel"}], "discussion_topics": {"General": {"id": "i4x-ManTestX-ManTest1-course-2014"}}, "start": "2014-06-26T00:00:00Z", "pdf_textbooks": [{"tab_title": "An Example Paper", "id": "0An_Example_Paper", "chapters": [{"url": "/static/1.pdf", "title": "Introduction "}]}], "lti_passports": ["ims:12345:secret"], "show_chat": true}}
\ No newline at end of file
{"1.pdf": {"contentType": "application/pdf", "displayname": "1.pdf", "locked": false, "filename": "/c4x/ManTestX/ManTest1/asset/1.pdf", "import_path": null, "thumbnail_location": null}, "subs_OEoXaMPEzfM.srt.sjson": {"contentType": "application/json", "displayname": "subs_OEoXaMPEzfM.srt.sjson", "locked": false, "filename": "/c4x/ManTestX/ManTest1/asset/subs_OEoXaMPEzfM.srt.sjson", "import_path": null, "thumbnail_location": null}, "Screen_Shot_2013-04-16_at_1.43.36_PM.png": {"contentType": "image/png", "displayname": "Screen Shot 2013-04-16 at 1.43.36 PM.png", "locked": false, "filename": "/c4x/ManTestX/ManTest1/asset/Screen_Shot_2013-04-16_at_1.43.36_PM.png", "import_path": null, "thumbnail_location": ["c4x", "ManTestX", "ManTest1", "thumbnail", "Screen_Shot_2013-04-16_at_1.43.36_PM.jpg", null]}}
\ No newline at end of file
<problem display_name="Blank Common Problem" markdown="Which of the following are in door sports:&#10;1- Football&#10;2- Squash &#10;3- Badminton &#10;&#10;( ) option 1 and 2&#10;( ) option 1 and 3&#10;(x) option 2 and 3&#10;">
<p>Which of the following are in door sports:</p>
<p>1- Football</p>
<p>2- Squash </p>
<p>3- Badminton </p>
<multiplechoiceresponse>
<choicegroup type="MultipleChoice">
<choice correct="false">option 1 and 2</choice>
<choice correct="false">option 1 and 3</choice>
<choice correct="true">option 2 and 3</choice>
</choicegroup>
</multiplechoiceresponse>
</problem>
<problem display_name="Drag and Drop" markdown="null">
Here's an example of a "Drag and Drop" question set. Click and drag each word in the scrollbar below, up to the numbered bucket which matches the number of letters in the word.
<customresponse><drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/L9_buckets.png"><draggable id="1" label="a"/><draggable id="2" label="cat"/><draggable id="3" label="there"/><draggable id="4" label="pear"/><draggable id="5" label="kitty"/><draggable id="6" label="in"/><draggable id="7" label="them"/><draggable id="8" label="za"/><draggable id="9" label="dog"/><draggable id="10" label="slate"/><draggable id="11" label="few"/></drag_and_drop_input><answer type="loncapa/python">
correct_answer = {
'1': [[70, 150], 121],
'6': [[190, 150], 121],
'8': [[190, 150], 121],
'2': [[310, 150], 121],
'9': [[310, 150], 121],
'11': [[310, 150], 121],
'4': [[420, 150], 121],
'7': [[420, 150], 121],
'3': [[550, 150], 121],
'5': [[550, 150], 121],
'10': [[550, 150], 121]}
if draganddrop.grade(submission[0], correct_answer):
correct = ['correct']
else:
correct = ['incorrect']
</answer></customresponse>
<customresponse><text><h2>Drag and Drop with Outline</h2><p>Please label hydrogen atoms connected with left carbon atom.</p></text><drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/ethglycol.jpg" target_outline="true" one_per_target="true" no_labels="true" label_bg_color="rgb(222, 139, 238)"><draggable id="1" label="Hydrogen"/><draggable id="2" label="Hydrogen"/><target id="t1_o" x="10" y="67" w="100" h="100"/><target id="t2" x="133" y="3" w="70" h="70"/><target id="t3" x="2" y="384" w="70" h="70"/><target id="t4" x="95" y="386" w="70" h="70"/><target id="t5_c" x="94" y="293" w="91" h="91"/><target id="t6_c" x="328" y="294" w="91" h="91"/><target id="t7" x="393" y="463" w="70" h="70"/><target id="t8" x="344" y="214" w="70" h="70"/><target id="t9_o" x="445" y="162" w="100" h="100"/><target id="t10" x="591" y="132" w="70" h="70"/></drag_and_drop_input><answer type="loncapa/python">
correct_answer = [{
'draggables': ['1', '2'],
'targets': ['t2', 't3', 't4' ],
'rule':'anyof'
}]
if draganddrop.grade(submission[0], correct_answer):
correct = ['correct']
else:
correct = ['incorrect']
</answer></customresponse>
</problem>
<problem display_name="Chemical Equation" markdown="null">
<startouttext/>
<p>Some problems may ask for a particular chemical equation. You can practice this technique by writing out the following reaction in the box below.</p>
<center>\( \text{H}_2\text{SO}_4 \longrightarrow \text{ H}^+ + \text{ HSO}_4^-\)</center>
<br/>
<customresponse>
<chemicalequationinput size="50"/>
<answer type="loncapa/python">
if chemcalc.chemical_equations_equal(submission[0], 'H2SO4 -&gt; H^+ + HSO4^-'):
correct = ['correct']
else:
correct = ['incorrect']
</answer>
</customresponse>
<p> Some tips:<ul><li>Only real element symbols are permitted.</li><li>Subscripts are entered with plain text.</li><li>Superscripts are indicated with a caret (^).</li><li>The reaction arrow (\(\longrightarrow\)) is indicated with "-&gt;".</li></ul>
So, you can enter "H2SO4 -&gt; H^+ + HSO4^-".</p>
<endouttext/>
</problem>
<problem display_name="Circuit Schematic Builder" markdown="null">
Please make a voltage divider that splits the provided voltage evenly.
<schematicresponse><center><schematic height="500" width="600" parts="g,r" analyses="dc" initial_value="[[&quot;v&quot;,[168,144,0],{&quot;value&quot;:&quot;dc(1)&quot;,&quot;_json_&quot;:0},[&quot;1&quot;,&quot;0&quot;]],[&quot;r&quot;,[296,120,0],{&quot;r&quot;:&quot;1&quot;,&quot;_json_&quot;:1},[&quot;1&quot;,&quot;output&quot;]],[&quot;L&quot;,[296,168,3],{&quot;label&quot;:&quot;output&quot;,&quot;_json_&quot;:2},[&quot;output&quot;]],[&quot;w&quot;,[296,216,168,216]],[&quot;w&quot;,[168,216,168,192]],[&quot;w&quot;,[168,144,168,120]],[&quot;w&quot;,[168,120,296,120]],[&quot;g&quot;,[168,216,0],{&quot;_json_&quot;:7},[&quot;0&quot;]],[&quot;view&quot;,-67.49999999999994,-78.49999999999994,1.6000000000000003,&quot;50&quot;,&quot;10&quot;,&quot;1G&quot;,null,&quot;100&quot;,&quot;1&quot;,&quot;1000&quot;]]"/></center><answer type="loncapa/python">
dc_value = "dc analysis not found"
for response in submission[0]:
if response[0] == 'dc':
for node in response[1:]:
dc_value = node['output']
if dc_value == .5:
correct = ['correct']
else:
correct = ['incorrect']
</answer></schematicresponse>
<schematicresponse><p>Make a high pass filter</p><center><schematic height="500" width="600" parts="g,r,s,c" analyses="ac" submit_analyses="{&quot;ac&quot;:[[&quot;NodeA&quot;,1,9]]}" initial_value="[[&quot;v&quot;,[160,152,0],{&quot;name&quot;:&quot;v1&quot;,&quot;value&quot;:&quot;sin(0,1,1,0,0)&quot;,&quot;_json_&quot;:0},[&quot;1&quot;,&quot;0&quot;]],[&quot;w&quot;,[160,200,240,200]],[&quot;g&quot;,[160,200,0],{&quot;_json_&quot;:2},[&quot;0&quot;]],[&quot;L&quot;,[240,152,3],{&quot;label&quot;:&quot;NodeA&quot;,&quot;_json_&quot;:3},[&quot;NodeA&quot;]],[&quot;s&quot;,[240,152,0],{&quot;color&quot;:&quot;cyan&quot;,&quot;offset&quot;:&quot;0&quot;,&quot;_json_&quot;:4},[&quot;NodeA&quot;]],[&quot;view&quot;,64.55878906250004,54.114697265625054,2.5000000000000004,&quot;50&quot;,&quot;10&quot;,&quot;1G&quot;,null,&quot;100&quot;,&quot;1&quot;,&quot;1000&quot;]]"/></center><answer type="loncapa/python">
ac_values = None
for response in submission[0]:
if response[0] == 'ac':
for node in response[1:]:
ac_values = node['NodeA']
print "the ac analysis value:", ac_values
if ac_values == None:
correct = ['incorrect']
elif ac_values[0][1] &lt; ac_values[1][1]:
correct = ['correct']
else:
correct = ['incorrect']
</answer></schematicresponse>
<solution><div class="detailed-solution"><p>Explanation</p><p>A voltage divider that evenly divides the input voltage can be formed with two identically valued resistors, with the sampled voltage taken in between the two.</p><p><img src="/static/images/voltage_divider.png"/></p><p>A simple high-pass filter without any further constaints can be formed by simply putting a resister in series with a capacitor. The actual values of the components do not really matter in order to meet the constraints of the problem.</p><p><img src="/static/images/high_pass_filter.png"/></p></div></solution>
</problem>
<problem display_name="Custom Javascript Display and Grading" markdown="null">
<script type="loncapa/python">
import json
def vglcfn(e, ans):
'''
par is a dictionary containing two keys, "answer" and "state"
The value of answer is the JSON string returned by getGrade
The value of state is the JSON string returned by getState
'''
par = json.loads(ans)
# We can use either the value of the answer key to grade
answer = json.loads(par["answer"])
return answer["cylinder"] and not answer["cube"]
'''
# Or we could use the value of the state key
state = json.loads(par["state"])
selectedObjects = state["selectedObjects"]
return selectedObjects["cylinder"] and not selectedObjects["cube"]
'''
</script>
<p>
The shapes below can be selected (yellow) or unselected (cyan).
Clicking on them repeatedly will cycle through these two states.
</p>
<p>
If the cone is selected (and not the cube), a correct answer will be
generated after pressing "Check". Clicking on either "Check" or "Save"
will register the current state.
</p>
<customresponse cfn="vglcfn">
<jsinput gradefn="WebGLDemo.getGrade" get_statefn="WebGLDemo.getState" set_statefn="WebGLDemo.setState" width="400" height="400" html_file="https://studio.edx.org/c4x/edX/DemoX/asset/webGLDemo.html" sop="false"/>
</customresponse>
</problem>
<problem display_name="editmoleculeinput" markdown="null">
<p>
A JSDraw problem lets the user use the JSDraw editor component to draw a
new molecule or update an existing drawing and then submit their work.
Answers are specified as SMILES strings.
</p>
<p>
I was trying to draw my favorite molecule, caffeine. Unfortunately,
I'm not a very good biochemist. Can you correct my molecule?
</p>
<jsdrawresponse>
<jsdraw>
<initial-state>
JSDraw201081410342D
12 13 0 0 0 0 0 V2000
12.0000 -6.7600 0.0000 N 0 0 0 0 0 0 0
10.6490 -5.9800 0.0000 C 0 0 0 0 0 0 0
10.6490 -4.4200 0.0000 N 0 0 0 0 0 0 0
12.0000 -3.6400 0.0000 C 0 0 0 0 0 0 0
13.3510 -4.4200 0.0000 C 0 0 0 0 0 0 0
13.3510 -5.9800 0.0000 C 0 0 0 0 0 0 0
14.8347 -6.4620 0.0000 N 0 0 0 0 0 0 0
15.7515 -5.1998 0.0000 C 0 0 0 0 0 0 0
14.8346 -3.9379 0.0000 N 0 0 0 0 0 0 0
15.3166 -2.4542 0.0000 C 0 0 0 0 0 0 0
9.2980 -3.6400 0.0000 C 0 0 0 0 0 0 0
9.2980 -6.7600 0.0000 O 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
4 5 1 0 0 0 0
5 6 2 0 0 0 0
6 1 1 0 0 0 0
6 7 1 0 0 0 0
7 8 1 0 0 0 0
8 9 1 0 0 0 0
9 5 1 0 0 0 0
9 10 1 0 0 0 0
3 11 1 0 0 0 0
2 12 1 0 0 0 0
M END
</initial-state>
<answer>
JSDraw203201413042D
14 15 0 0 0 0 0 V2000
12.9049 -6.2400 0.0000 N 0 0 0 0 0 0 0
11.5539 -5.4600 0.0000 C 0 0 0 0 0 0 0
11.5539 -3.9000 0.0000 N 0 0 0 0 0 0 0
12.9049 -3.1200 0.0000 C 0 0 0 0 0 0 0
14.2558 -3.9000 0.0000 C 0 0 0 0 0 0 0
14.2558 -5.4600 0.0000 C 0 0 0 0 0 0 0
15.7395 -5.9420 0.0000 N 0 0 0 0 0 0 0
16.6563 -4.6798 0.0000 C 0 0 0 0 0 0 0
15.7394 -3.4179 0.0000 N 0 0 0 0 0 0 0
16.2214 -1.9342 0.0000 C 0 0 0 0 0 0 0
10.2029 -3.1200 0.0000 C 0 0 0 0 0 0 0
10.2029 -6.2400 0.0000 O 0 0 0 0 0 0 0
12.9049 -7.8000 0.0000 C 0 0 0 0 0 0 0
12.9050 -1.5600 0.0000 O 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
4 5 1 0 0 0 0
5 6 2 0 0 0 0
6 1 1 0 0 0 0
6 7 1 0 0 0 0
7 8 2 0 0 0 0
8 9 1 0 0 0 0
9 5 1 0 0 0 0
9 10 1 0 0 0 0
3 11 1 0 0 0 0
2 12 2 0 0 0 0
1 13 1 0 0 0 0
4 14 2 0 0 0 0
M END
</answer>
</jsdraw>
<answer>C8H10N4O2</answer>
</jsdrawresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>
Some scholars have hypothesized that the renaissance was made possible
by the introduction of coffee to Italy. Likewise scholars have linked
the Enlightenment with the rise of coffee houses in England.
</p>
</div>
</solution>
</problem>
<problem display_name="String response" markdown="null" showanswer="attempted">
<p>
A custom python-evaluated input problem accepts one or more lines of text input from the
student, and evaluates the inputs for correctness based on evaluation using a
python script embedded within the problem.
</p>
<script type="loncapa/python">
import re
def test_contains_stan(expect, ans):
response = re.search('^[sS]tan', ans)
if response:
return 1
else:
return 0
</script>
<p>Nice university, whose name begins with "s"...</p>
<customresponse cfn="test_contains_stan">
<textline size="40"/>
</customresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Stanford</p>
</div>
</solution>
</problem>
<problem display_name="Blank Common Problem" markdown="Capital of France is Paris:&#10;&#10;[[false, (true)]]&#10;">
<p>Capital of France is Paris:</p>
<optionresponse>
<optioninput options="('false','true')" correct="true"/>
</optionresponse>
</problem>
<problem display_name="Text Input" markdown="A text input problem accepts a line of text from the student, and evaluates the input for correctness based on an expected answer.&#10;&#10;The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.&#10;&#10;&gt;&gt;Which US state has Lansing as its capital?&lt;&lt;&#10;&#10;= Michigan&#10;&#10;&#10;[explanation]&#10;Lansing is the capital of Michigan, although it is not Michigan's largest city, or even the seat of the county in which it resides.&#10;[explanation]&#10;">
<p>
A text input problem accepts a line of text from the
student, and evaluates the input for correctness based on an expected
answer.
</p>
<p>
The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.
</p>
<p>Which US state has Lansing as its capital? </p>
<stringresponse answer="Michigan" type="ci">
<textline size="20" label="Which US state has Lansing as its capital?"/>
</stringresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Lansing is the capital of Michigan, although it is not Michigan's largest city, or even the seat of the county in which it resides.</p>
</div>
</solution>
</problem>
<problem weight="null" display_name="vsepr_input" markdown="null">
<p> The Dopamine molecule, as shown, cannot make ionic bonds. Edit the dopamine molecule so it can make ionic bonds.
</p>
<p>
When you are ready, click "Check.” If you need to start over, click
"Reset.”
</p>
<script type="loncapa/python">
def check1(expect, ans):
import json
mol_info = json.loads(ans)["info"]
return any(res == "Can Make Ionic Bonds" for res in mol_info)
</script>
<customresponse cfn="check1">
<editamoleculeinput file="/static/molecules/dopamine.mol">
</editamoleculeinput>
</customresponse>
<solution>
<img src="/static/Screen_Shot_2013-04-16_at_1.43.36_PM.png"/>
</solution>
</problem>
<problem attempts="10" weight="null" max_attempts="null" markdown="null">
<script type="loncapa/python">
def two_d_grader(expect,ans):
import json
ans=json.loads(ans)
if "ERROR" in ans["protex_answer"]:
raise ValueError("Protex did not understand your answer... try folding the protein")
return ans["protex_answer"]=="CORRECT"
</script>
<text>
<customresponse cfn="two_d_grader">
<designprotein2dinput width="855" height="500" target_shape="W;W;W;W;W;W;W"/>
</customresponse>
</text>
<p>Be sure to click "Fold" to fold your protein before you click "Check".</p>
<solution>
<p>
There are many protein sequences that will fold to the shape we asked you
about. Here is a sample sequence that will work. You can play around with
it if you are curious.
</p>
<ul>
<li>
Stick: RRRRRRR
</li>
</ul>
</solution>
</problem>
<problem display_name="Text Input" markdown="A text input problem accepts a line of text from the student, and evaluates the input for correctness based on an expected answer.&#10;&#10;The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.&#10;&#10;&gt;&gt;Which US state has Lansing as its capital?&lt;&lt;&#10;&#10;= Michigan&#10;&#10;&#10;[explanation]&#10;Lansing is the capital of Michigan, although it is not Michigan's largest city, or even the seat of the county in which it resides.&#10;[explanation]&#10;">
<p>
A text input problem accepts a line of text from the
student, and evaluates the input for correctness based on an expected
answer.
</p>
<p>
The answer is correct if it matches every character of the expected answer. This can be a problem with international spelling, dates, or anything where the format of the answer is not clear.
</p>
<p>Which US state has Lansing as its capital? </p>
<stringresponse answer="Michigan" type="ci">
<textline size="20" label="Which US state has Lansing as its capital?"/>
</stringresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Lansing is the capital of Michigan, although it is not Michigan's largest city, or even the seat of the county in which it resides.</p>
</div>
</solution>
</problem>
<problem max_attempts="1" weight="" parent_sequential_url="i4x://HarvardX/CB22x/sequential/bf06d525251c432696650f1a8b1b8e12" index_in_children_list="0" display_name="Question 1" markdown="null">
<annotationresponse>
<annotationinput>
<title>Annotation Exercise</title>
<text>They are the ones who, at the public assembly, had put savage derangement [atē] into my thinking [phrenes] |89 on that day when I myself deprived Achilles of his honorific portion [geras]</text>
<comment>Agamemnon says that atē or ‘derangement’ was the cause of his actions: why could Zeus say the same thing?</comment>
<comment_prompt>Type your response below:</comment_prompt>
<tag_prompt>In your answer to A) and considering the way atē or 'derangement' works in the Iliad as a whole, did you describe atē as:</tag_prompt>
<options>
<option choice="correct">atē - both a cause and an effect</option>
<option choice="incorrect">atē - a cause</option>
<option choice="partially-correct">atē - an effect</option>
</options>
</annotationinput>
</annotationresponse>
<solution>
<p>If you answered “a cause,” you would be following the logic of the speaker, Agamemnon. But there is another logic at work here, and that is the superhuman logic that operates the cosmos. According to that logic, you have to look at the consequences of what you have done, not only the causes, and only then can you figure out the meaning of it all. If you answered “both a cause and an effect,” you would be reading out of the text in a more complete way. If you answered “an effect,” however, the reading would be less complete. Yes, you would still be reading out of the text, since the basic logic of the story is that a disaster happened. But it would be an incomplete reading, since the story is also about the need for explaining why the disaster happened.</p>
<p>Going back to the answer “a cause,” the problem with this reading is that you would have simply taken Agamemnon’s words at face value. It is tempting, I admit, for us to see things the way Agamemnon sees things, since his world view in many ways resembles our own view of the Iliad when we read it for the very first time. Agamemnon is saying: I made a mistake, but it is not my fault, since a god made me do it. In Homeric poetry, we too see the gods intervening in the lives of humans. Yes, but we also see humans making their own free choices. If we forget about the free choice of Agamemnon, then we are simply reading into the text and not paying full attention to what the text says in its entirety.</p>
</solution>
</problem>
<problem display_name="Drag and Drop" markdown="null">
Here's an example of a "Drag and Drop" question set. Click and drag each word in the scrollbar below, up to the numbered bucket which matches the number of letters in the word.
<customresponse><drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/L9_buckets.png"><draggable id="1" label="a"/><draggable id="2" label="cat"/><draggable id="3" label="there"/><draggable id="4" label="pear"/><draggable id="5" label="kitty"/><draggable id="6" label="in"/><draggable id="7" label="them"/><draggable id="8" label="za"/><draggable id="9" label="dog"/><draggable id="10" label="slate"/><draggable id="11" label="few"/></drag_and_drop_input><answer type="loncapa/python">
correct_answer = {
'1': [[70, 150], 121],
'6': [[190, 150], 121],
'8': [[190, 150], 121],
'2': [[310, 150], 121],
'9': [[310, 150], 121],
'11': [[310, 150], 121],
'4': [[420, 150], 121],
'7': [[420, 150], 121],
'3': [[550, 150], 121],
'5': [[550, 150], 121],
'10': [[550, 150], 121]}
if draganddrop.grade(submission[0], correct_answer):
correct = ['correct']
else:
correct = ['incorrect']
</answer></customresponse>
<customresponse><text><h2>Drag and Drop with Outline</h2><p>Please label hydrogen atoms connected with left carbon atom.</p></text><drag_and_drop_input img="https://studio.edx.org/c4x/edX/DemoX/asset/ethglycol.jpg" target_outline="true" one_per_target="true" no_labels="true" label_bg_color="rgb(222, 139, 238)"><draggable id="1" label="Hydrogen"/><draggable id="2" label="Hydrogen"/><target id="t1_o" x="10" y="67" w="100" h="100"/><target id="t2" x="133" y="3" w="70" h="70"/><target id="t3" x="2" y="384" w="70" h="70"/><target id="t4" x="95" y="386" w="70" h="70"/><target id="t5_c" x="94" y="293" w="91" h="91"/><target id="t6_c" x="328" y="294" w="91" h="91"/><target id="t7" x="393" y="463" w="70" h="70"/><target id="t8" x="344" y="214" w="70" h="70"/><target id="t9_o" x="445" y="162" w="100" h="100"/><target id="t10" x="591" y="132" w="70" h="70"/></drag_and_drop_input><answer type="loncapa/python">
correct_answer = [{
'draggables': ['1', '2'],
'targets': ['t2', 't3', 't4' ],
'rule':'anyof'
}]
if draganddrop.grade(submission[0], correct_answer):
correct = ['correct']
else:
correct = ['incorrect']
</answer></customresponse>
</problem>
<problem display_name="JSDraw Input" markdown="null">
<p>
A JSDraw problem lets the user use the JSDraw editor component to draw a
new molecule or update an existing drawing and then submit their work.
Answers are specified as SMILES strings.
</p>
<p>
I was trying to draw my favorite molecule, caffeine. Unfortunately,
I'm not a very good biochemist. Can you correct my molecule?
</p>
<jsdrawresponse>
<jsdraw>
<initial-state>
JSDraw201081410342D
12 13 0 0 0 0 0 V2000
12.0000 -6.7600 0.0000 N 0 0 0 0 0 0 0
10.6490 -5.9800 0.0000 C 0 0 0 0 0 0 0
10.6490 -4.4200 0.0000 N 0 0 0 0 0 0 0
12.0000 -3.6400 0.0000 C 0 0 0 0 0 0 0
13.3510 -4.4200 0.0000 C 0 0 0 0 0 0 0
13.3510 -5.9800 0.0000 C 0 0 0 0 0 0 0
14.8347 -6.4620 0.0000 N 0 0 0 0 0 0 0
15.7515 -5.1998 0.0000 C 0 0 0 0 0 0 0
14.8346 -3.9379 0.0000 N 0 0 0 0 0 0 0
15.3166 -2.4542 0.0000 C 0 0 0 0 0 0 0
9.2980 -3.6400 0.0000 C 0 0 0 0 0 0 0
9.2980 -6.7600 0.0000 O 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
4 5 1 0 0 0 0
5 6 2 0 0 0 0
6 1 1 0 0 0 0
6 7 1 0 0 0 0
7 8 1 0 0 0 0
8 9 1 0 0 0 0
9 5 1 0 0 0 0
9 10 1 0 0 0 0
3 11 1 0 0 0 0
2 12 1 0 0 0 0
M END
</initial-state>
<answer>
JSDraw203201413042D
14 15 0 0 0 0 0 V2000
12.9049 -6.2400 0.0000 N 0 0 0 0 0 0 0
11.5539 -5.4600 0.0000 C 0 0 0 0 0 0 0
11.5539 -3.9000 0.0000 N 0 0 0 0 0 0 0
12.9049 -3.1200 0.0000 C 0 0 0 0 0 0 0
14.2558 -3.9000 0.0000 C 0 0 0 0 0 0 0
14.2558 -5.4600 0.0000 C 0 0 0 0 0 0 0
15.7395 -5.9420 0.0000 N 0 0 0 0 0 0 0
16.6563 -4.6798 0.0000 C 0 0 0 0 0 0 0
15.7394 -3.4179 0.0000 N 0 0 0 0 0 0 0
16.2214 -1.9342 0.0000 C 0 0 0 0 0 0 0
10.2029 -3.1200 0.0000 C 0 0 0 0 0 0 0
10.2029 -6.2400 0.0000 O 0 0 0 0 0 0 0
12.9049 -7.8000 0.0000 C 0 0 0 0 0 0 0
12.9050 -1.5600 0.0000 O 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
4 5 1 0 0 0 0
5 6 2 0 0 0 0
6 1 1 0 0 0 0
6 7 1 0 0 0 0
7 8 2 0 0 0 0
8 9 1 0 0 0 0
9 5 1 0 0 0 0
9 10 1 0 0 0 0
3 11 1 0 0 0 0
2 12 2 0 0 0 0
1 13 1 0 0 0 0
4 14 2 0 0 0 0
M END
</answer>
</jsdraw>
<answer>C8H10N4O2</answer>
</jsdrawresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>
Some scholars have hypothesized that the renaissance was made possible
by the introduction of coffee to Italy. Likewise scholars have linked
the Enlightenment with the rise of coffee houses in England.
</p>
</div>
</solution>
</problem>
<problem display_name="Image Mapped Input" markdown="null">
<p>
An image mapped input problem presents an image for the student.
Input is given by the location of mouse clicks on the image.
Correctness of input can be evaluated based on expected dimensions of a rectangle.
</p>
<p>Which animal shown below is a kitten?</p>
<imageresponse>
<imageinput src="https://studio.edx.org/c4x/edX/DemoX/asset/Dog-and-Cat.jpg" width="640" height="400" rectangle="(385,98)-(600,337)"/>
</imageresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>The animal on the right is a kitten. The animal on the left is a puppy, not a kitten.</p>
</div>
</solution>
</problem>
<problem display_name="Numerical Input" markdown="A numerical input problem accepts a line of text input from the student, and evaluates the input for correctness based on its numerical value.&#10;&#10;The answer is correct if it is within a specified numerical tolerance of the expected answer.&#10;&#10;&gt;&gt;Enter the number of fingers on a human hand&lt;&lt;&#10;= 5&#10;&#10;[explanation]&#10;If you look at your hand, you can count that you have five fingers.&#10;[explanation]&#10;">
<p>A numerical input problem accepts a line of text input from the student, and evaluates the input for correctness based on its numerical value.</p>
<p>The answer is correct if it is within a specified numerical tolerance of the expected answer.</p>
<p>Enter the number of fingers on a human hand</p>
<numericalresponse answer="5">
<formulaequationinput label="Enter the number of fingers on a human hand"/>
</numericalresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>If you look at your hand, you can count that you have five fingers.</p>
</div>
</solution>
</problem>
<problem display_name="Multiple Choice" markdown="A multiple choice problem presents radio buttons for student input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.&#10;&#10;One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.&#10;&#10;&gt;&gt;What Apple device competed with the portable CD player?&lt;&lt;&#10; ( ) The iPad&#10; ( ) Napster&#10; (x) The iPod&#10; ( ) The vegetable peeler&#10; &#10;[explanation]&#10;The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks.&#10;[explanation]&#10;">
<p>
A multiple choice problem presents radio buttons for student
input. Students can only select a single option presented. Multiple Choice questions have been the subject of many areas of research due to the early invention and adoption of bubble sheets.</p>
<p> One of the main elements that goes into a good multiple choice question is the existence of good distractors. That is, each of the alternate responses presented to the student should be the result of a plausible mistake that a student might make.
</p>
<p>What Apple device competed with the portable CD player?</p>
<multiplechoiceresponse>
<choicegroup type="MultipleChoice" label="What Apple device competed with the portable CD player?">
<choice correct="false" name="ipad">The iPad</choice>
<choice correct="false" name="beatles">Napster</choice>
<choice correct="true" name="ipod">The iPod</choice>
<choice correct="false" name="peeler">The vegetable peeler</choice>
</choicegroup>
</multiplechoiceresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>The release of the iPod allowed consumers to carry their entire music library with them in a format that did not rely on fragile and energy-intensive spinning disks. </p>
</div>
</solution>
</problem>
<problem display_name="Checkboxes" markdown="A checkboxes problem presents checkbox buttons for student input. Students can select more than one option presented.&#10;&gt;&gt;Select the answer that matches&lt;&lt;&#10;&#10;[x] correct&#10;[ ] incorrect&#10;[x] correct&#10;">
<p>A checkboxes problem presents checkbox buttons for student input. Students can select more than one option presented.</p>
<p>Select the answer that matches</p>
<choiceresponse>
<checkboxgroup direction="vertical" label="Select the answer that matches">
<choice correct="true">correct</choice>
<choice correct="false">incorrect</choice>
<choice correct="true">correct</choice>
</checkboxgroup>
</choiceresponse>
</problem>
<problem display_name="Multiple Choice" markdown="&#10;&#10;&gt;&gt;Which of the following equations is the most complex&lt;&lt;&#10; ( ) \(E = m c^2 \)&#10; (x) \(A = \pi r^2\)&#10; &#10;">
<p>Which of the following equations is the most complex</p>
<multiplechoiceresponse>
<choicegroup label="Which of the following equations is the most complex" type="MultipleChoice">
<choice correct="false">\(E = m c^2 \)</choice>
<choice correct="true">\(A = \pi r^2\)</choice>
</choicegroup>
</multiplechoiceresponse>
<p> </p>
</problem>
<problem display_name="Math Expression Input" markdown="null">
<p>
A math expression input problem accepts a line of text representing a mathematical expression from the
student, and evaluates the input for equivalence to a mathematical expression provided by the
grader. Correctness is based on numerical sampling of the symbolic expressions.
</p>
<p>
The answer is correct if both the student provided response and the grader's mathematical
expression are equivalent to specified numerical tolerance, over a specified range of values for each
variable.
</p>
<p>This kind of response checking can handle symbolic expressions, but places an extra burden
on the problem author to specify the allowed variables in the expression, and the
numerical ranges over which the variables must be sampled in order to test for correctness.</p>
<script type="loncapa/python">
VoVi = "(R_1*R_2)/R_3"
</script>
<p>Give an equation for the relativistic energy of an object with mass m. Explicitly indicate multiplication with a <tt>*</tt> symbol.</p>
<formularesponse type="cs" samples="m,c@1,2:3,4#10" answer="m*c^2">
<responseparam type="tolerance" default="0.00001"/>
<br/>
<text>E =</text>
<formulaequationinput size="40"/>
</formularesponse>
<p>The answer to this question is (R_1*R_2)/R_3. </p>
<formularesponse type="ci" samples="R_1,R_2,R_3@1,2,3:3,4,5#10" answer="$VoVi">
<responseparam type="tolerance" default="0.00001"/>
<formulaequationinput size="40" label="Enter the equation"/>
</formularesponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>The mathematical summary of many of the theory of relativity developed by Einstein is that the amount of energy contained in a mass m is the mass time the speed of light squared.</p>
<p>As you can see with the formula entry, the answer is \(\frac{R_1*R_2}{R_3}\)</p>
</div>
</solution>
</problem>
<problem title="Embedded Code Box" markdown="null">
<text>
<p> We are searching for
the smallest monthly payment such that we can pay off the
entire balance of a loan within a year.</p>
<p> The following values might be useful when writing your solution</p>
<blockquote>
<p><strong>Monthly interest rate</strong>
= (Annual interest rate) / 12<br/>
<strong>Monthly payment lower bound</strong>
= Balance / 12<br/>
<strong>Monthly payment upper bound</strong> = (Balance x
(1 + Monthly interest rate)<sup>12</sup>) / 12
</p>
</blockquote>
<p>The following variables contain values as described below:</p>
<ol>
<li>
<p><code>balance</code> - the outstanding balance on the credit card</p>
</li>
<li>
<p><code>annualInterestRate</code> - annual interest rate as a decimal</p>
</li>
</ol>
<p>Write a program that uses these bounds and bisection
search (for more info check out <a href="http://en.wikipedia.org/wiki/Bisection_method" target="_blank">the Wikipedia page
on bisection search</a>)
to find the smallest monthly payment <em>to the cent</em>
such that we can pay off the
debt within a year.</p>
<p>Note that if you do not use bisection search, your code will not run - your code only has
30 seconds to run on our servers. If you get a message that states "Your submission could not be graded. Please recheck your
submission and try again. If the problem persists, please notify the course staff.", check to be
sure your code doesn't take too long to run.</p>
<p>The code you paste into the following box should not specify the values for the variables <code>balance</code>
or <code>annualInterestRate</code> - our test code will define those values
before testing your submission. </p>
</text>
<coderesponse>
<textbox rows="10" cols="70" mode="python" tabsize="4"/>
<codeparam>
<initial_display/>
<answer_display>
monthlyInterestRate = annualInterestRate/12
lowerBound = balance/12
upperBound = (balance * (1+annualInterestRate/12)**12)/12
originalBalance = balance
# Keep testing new payment values
# until the balance is +/- $0.02
while abs(balance) &gt; .02:
# Reset the value of balance to its original value
balance = originalBalance
# Calculate a new monthly payment value from the bounds
payment = (upperBound - lowerBound)/2 + lowerBound
# Test if this payment value is sufficient to pay off the
# entire balance in 12 months
for month in range(12):
balance -= payment
balance *= 1+monthlyInterestRate
# Reset bounds based on the final value of balance
if balance &gt; 0:
# If the balance is too big, need higher payment
# so we increase the lower bound
lowerBound = payment
else:
# If the balance is too small, we need a lower
# payment, so we decrease the upper bound
upperBound = payment
# When the while loop terminates, we know we have
# our answer!
print "Lowest Payment:", round(payment, 2)
</answer_display>
<grader_payload>
{"grader": "ps02/bisect/grade_bisect.py"}
</grader_payload>
</codeparam>
</coderesponse>
<text>
<div>
<b>Note:</b>
<p>Depending on where, and how frequently, you round during
this function, your answers may be off a few cents in
either direction. Try rounding as few times as possible
in order to increase the accuracy of your result. </p>
</div>
<section class="hints">
<h3>Hints</h3>
<div class="collapsible">
<header>
<a href="#" id="ht3l">Test Cases to test your code with. Be sure to test these on your own machine -
and that you get the same output! - before running your code on this webpage! </a>
</header>
<section id="ht3">
<p><b>Note:</b> The automated tests are lenient - if your answers are off by a few cents
in either direction, your code is OK. </p>
<p>Test Cases:</p>
<p>
<pre>
<code>
Test Case 1:
balance = 320000
annualInterestRate = 0.2
Result Your Code Should Generate:
-------------------
Lowest Payment: 29157.09
</code>
</pre>
</p>
<p>
<pre>
<code>
Test Case 2:
balance = 999999
annualInterestRate = 0.18
Result Your Code Should Generate:
-------------------
Lowest Payment: 90325.07
</code>
</pre>
</p>
</section>
</div>
<div class="collapsible">
<header>
<a href="#" id="ht4">The autograder says, "Your submission could not be graded." Help!</a>
</header>
<section id="ht4">
<p> If the autograder gives you the following message:</p>
<pre>
Your submission could not be graded.
Please recheck your submission and try again. If the problem persists, please notify the course staff.
</pre>
<p>Don't panic! There are a few things that might be wrong with your code that you should
check out. The number one reason this message appears is because your code timed out.
You only get 30 seconds of computation time on our servers. If your code times out,
you probably have an infinite loop. What to do?</p>
<p>The number 1 thing to do is that you need to run this code in your own local
environment. Your code should print one line at the end of the loop. If your code never prints anything
out - you have an infinite loop!</p>
<p>To debug your infinite loop - check your loop conditional. When will it stop?
Try inserting print statements inside your loop that prints out information (like variables) - are you
incrementing or decrementing your loop counter correctly?
Search the forum for people with similar issues. If your search turns up nothing,
make a new post and paste in your loop conditional for others to help you out with.</p>
<p>Please don't email the course staff unless your code legitimately works and prints out the
correct answers in your local environment. In that case, please email your code file,
a screenshot of the code printing out the correct answers in your local environment,
and a screenshot of the exact same code not working on the tutor. The course staff is
otherwise unable to help debug your problem set via email - we can only address platform issues.</p>
</section>
</div>
</section>
<br/>
</text>
</problem>
<problem attempts="10" weight="null" max_attempts="null" markdown="null">
<script type="loncapa/python">
def two_d_grader(expect,ans):
import json
ans=json.loads(ans)
if "ERROR" in ans["protex_answer"]:
raise ValueError("Protex did not understand your answer... try folding the protein")
return ans["protex_answer"]=="CORRECT"
</script>
<text>
<customresponse cfn="two_d_grader">
<designprotein2dinput width="855" height="500" target_shape="W;W;W;W;W;W;W"/>
</customresponse>
</text>
<p>Be sure to click "Fold" to fold your protein before you click "Check".</p>
<solution>
<p>
There are many protein sequences that will fold to the shape we asked you
about. Here is a sample sequence that will work. You can play around with
it if you are curious.
</p>
<ul>
<li>
Stick: RRRRRRR
</li>
</ul>
</solution>
</problem>
<problem display_name="Numerical Input" markdown="A numerical input problem accepts a line of text input from the student, and evaluates the input for correctness based on its numerical value.&#10;&#10;The answer is correct if it is within a specified numerical tolerance of the expected answer.&#10;&#10;&gt;&gt;Enter the numerical value of Pi:&lt;&lt;&#10;= 3.14159 +- .02&#10;&#10;[explanation]&#10;Pi, or the the ratio between a circle's circumference to its diameter, is an irrational number known to extreme precision. It is value is approximately equal to 3.14.&#10;[explanation]&#10;">
<p>A numerical input problem accepts a line of text input from the student, and evaluates the input for correctness based on its numerical value.</p>
<p>The answer is correct if it is within a specified numerical tolerance of the expected answer.</p>
<p>Enter the numerical value of Pi:</p>
<numericalresponse answer="3.14159">
<responseparam type="tolerance" default=".02"/>
<formulaequationinput label="Enter the numerical value of Pi:"/>
</numericalresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Pi, or the the ratio between a circle's circumference to its diameter, is an irrational number known to extreme precision. It is value is approximately equal to 3.14.</p>
</div>
</solution>
</problem>
<problem display_name="Checkboxes" markdown="A checkboxes problem presents checkbox buttons for student input. Students can select more than one option presented.&#10;&gt;&gt;Select the answer that matches&lt;&lt;&#10;&#10;[x] correct&#10;[ ] incorrect&#10;[x] correct&#10;">
<p>A checkboxes problem presents checkbox buttons for student input. Students can select more than one option presented.</p>
<p>Select the answer that matches</p>
<choiceresponse>
<checkboxgroup direction="vertical" label="Select the answer that matches">
<choice correct="true">correct</choice>
<choice correct="false">incorrect</choice>
<choice correct="true">correct</choice>
</checkboxgroup>
</choiceresponse>
</problem>
<problem display_name="Numerical Input" markdown="A numerical input problem accepts a line of text input from the student, and evaluates the input for correctness based on its numerical value.&#10;&#10;The answer is correct if it is within a specified numerical tolerance of the expected answer.&#10;&#10;&#10;&gt;&gt;Enter the approximate value of 502*9:&lt;&lt;&#10;= 4518 +- 15%&#10;&#10;[explanation]&#10;&#10;Although you can get an exact value by typing 502*9 into a calculator, the result will be close to 500*10, or 5,000. The grader accepts any response within 15% of the true value, 4518, so that you can use any estimation technique that you like.&#10;&#10;&#10;[explanation]&#10;">
<p>A numerical input problem accepts a line of text input from the student, and evaluates the input for correctness based on its numerical value.</p>
<p>The answer is correct if it is within a specified numerical tolerance of the expected answer.</p>
<p>Enter the approximate value of 502*9:</p>
<numericalresponse answer="4518">
<responseparam type="tolerance" default="15%"/>
<formulaequationinput label="Enter the approximate value of 502*9:"/>
</numericalresponse>
<solution>
<div class="detailed-solution">
<p>Explanation</p>
<p>Although you can get an exact value by typing 502*9 into a calculator, the result will be close to 500*10, or 5,000. The grader accepts any response within 15% of the true value, 4518, so that you can use any estimation technique that you like.</p>
</div>
</solution>
</problem>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment