Git Product home page Git Product logo

blackboard-scorm-analysis's Introduction

Blackboard SCORM analysis

Part of a report

Blackboard doesn't make it easy to analyse data to do with SCORM packages: the built-in SCORM reports don't give much useful information and are tedious to generate, and it's unclear where in the database the SCORM data lies.

We discovered that the Export/Archive Course tool collects together all of the attempt data for SCORM packages in a way that can be easily interpreted.

This tool allows you to analyse all of the information held by Blackboard about SCORM packages in your course, by presenting the data from a course archive nicely. It's designed to work with SCORM packages generated using Numbas; other packages might work, but we don't guarantee it.

First, a warning

We've found that Blackboard often loses data, or saves inconsistent data. That can mean that a student's attempt is missing, or the question scores don't tally up with the part scores, or the suspend data and correct answers don't match what the student saw.

This happens in a small but significant number of cases. It should be obvious on looking at an individual attempt whether there's something wrong, but bear in mind that inconsistencies can appear if you try to do analyse the set of attempts as a whole.

We've also had a report that if any student has unenrolled from a course, the export will stop as soon as it tries to match an attempt by that student with their Grade Centre entry. This means that tests will appear to have far fewer attempts in the analysis tool than are shown in the Grade Centre.

Finally, the reported durations of attempts only rarely match up with reality. Best not to try to draw any conclusions from those.

Installation

The tool is a self-contained Python Flask server, which you can run on your own PC. Install Python 3, and then install the required Python packages by running the following command:

pip install -r requirements.txt

Obtain a copy of the Blackboard SCORM analysis server (either clone this repository or download a .zip) and extract it into a directory on your PC.

To start the server, run

python server.py

And open http://localhost:5000 in your browser.

Uploading a course

  • Go to your Blackboard course, and click on Packages and Utilities, then Export/Archive Course.
  • Click on the Archive Course button.
  • In the following form, make sure Include Grade Centre History is ticked, then click Submit.
  • It takes a while to create the archive. You'll get an email when it's ready - once that happens, go back to the Export/Archive Course page and click on the .zip file to download it.
  • In the Blackboard SCORM analysis tool, click on Upload a zip file, and then upload the file you just got from Blackboard.

You can update a course's data by generating another archive and uploading that. The old version will be automatically rewritten.

blackboard-scorm-analysis's People

Contributors

christianp avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

rako9000

blackboard-scorm-analysis's Issues

UTC formatting in dates

It seems that the datestamps that come from Blackboard now have an additional UTC identifier at the end of their string, which gives a 'unconverted data remains' error when server.py is called. In L98 of blackboardscorm.py, I think changing '%Y-%m-%dT%H:%M:%S' to '%Y-%m-%dT%H:%M:%S.%fZ' should fix it.

Requirements may need updating (or backdating)

Thanks for the great tool!
I tried a new install of this in August 2022, but suspect that some of the python packages have changed and broken a few more things.

I was getting errors to do with flask and Jijna2, before launching the server. Then after server launch Markup safe caused an issue.

With some websearching I managed to find a list of package versions which were useful to someone on a similar project from around the time, so I updated the requirements.txt list to the following:

Flask==1.0.2
lxml==4.3.0
pygal==2.4.0
Jinja2==2.10.3
MarkupSafe==1.1.1
itsdangerous==1.1.0
Werkzeug==0.12.2
click==8.1.3

I still had the issue with 'seekable' files when uploading so had to make the edits in #5 to server.py and blackboardscorm.py too

But it does still work nicely!

SCORM XML analysis fails when item has no identifierref

Blackboard generated a manifest file containing the following:-

-<item identifier="itm00011">
<title>placeholder/staff-info</title>
+<item identifier="itm00012" identifierref="res00025">
</item>

Analysis failed when file None.dat was not found, since itm00011 has no resource file associated.
Workaround was possible by deleting the lines from the manifest.

Reappearance of AttributeError: 'SpooledTemporaryFile' object has no attribute 'seekable'

There is a closed issue with this error (#3), unfortunately, I have problem showing on two different systems.

Error message:

Traceback (most recent call last):
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 2309, in __call__
   return self.wsgi_app(environ, start_response)
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 2295, in wsgi_app
   response = self.handle_exception(e)
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 1741, in handle_exception
   reraise(exc_type, exc_value, tb)
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
   raise value
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
   response = self.full_dispatch_request()
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
   rv = self.handle_user_exception(e)
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
   reraise(exc_type, exc_value, tb)
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
   raise value
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
   rv = self.dispatch_request()
 File "/Users/zaript/src/blackboard-scorm-analysis/_pyvenv/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
   return self.view_functions[rule.endpoint](**req.view_args)
 File "/Users/zaript/src/blackboard-scorm-analysis/server.py", line 83, in upload_zip
   zip.extractall(extract_path)
 File "/Users/zaript/miniconda3/lib/python3.7/zipfile.py", line 1636, in extractall
   self._extract_member(zipinfo, path, pwd)
 File "/Users/zaript/miniconda3/lib/python3.7/zipfile.py", line 1689, in _extract_member
   with self.open(member, pwd=pwd) as source, \
 File "/Users/zaript/miniconda3/lib/python3.7/zipfile.py", line 1516, in open
   self._fpclose, self._lock, lambda: self._writing)
 File "/Users/zaript/miniconda3/lib/python3.7/zipfile.py", line 734, in __init__
   self.seekable = file.seekable
AttributeError: 'SpooledTemporaryFile' object has no attribute 'seekable'

Installed packages:

(_pyvenv) > ~/s/blackboard-scorm-analysis git:(master)
> pip list
Package      Version
------------ -------
Click        7.0
Flask        1.0.2
itsdangerous 1.1.0
Jinja2       2.10.3
lxml         4.3.0
MarkupSafe   1.1.1
pip          19.3.1
pygal        2.4.0
setuptools   44.0.0
Werkzeug     0.16.0
wheel        0.33.6

Python version:

(_pyvenv) > ~/s/blackboard-scorm-analysis git:(master)
> python --version
Python 3.7.6

Zero division error

I am getting a divide by zero error (see gist, https://gist.github.com/anonymous/034f3bfb629642ee0680) when I try to run a report on a recent quiz, or to click on any question to view the transcript. One possible cause is that I set up a zero mark question as part of the quiz (it was an opportunity for students to feed back a question to me for answering in lectures).

Am running this on Linux Mint 17.3, with Python 3.4.3 and up-to-date versions of required packages.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.