Rustici Software's
SCORM Blog

Subscribe

 Subscribe in a reader

Enter your email address:


Archive


@timpmartin on Twitter
  • RT @bluewaterlearn: Taleo purchasing Learn.com. Interesting move . #LMS http://tinyurl.com/2ajj7m7

More...



Topics

Authors

SCORM isn’t easy. Everywhere you turn, someone’s having a challenge making it work, whether through human, system or developer error.

Which is why we make such a big deal about encouraging people to ask us questions. The best way to get SCORM to work is to ask people who know. It helps you get what you need, it helps us because people stop (hopefully) cursing SCORM, and well, we just like talking with you to see how you’re using SCORM.

Most of our questions come in via the contact form on the website. Some come from current customers. Some come up in conversations with prospective customers. We try to bring questions and answers together over in our support forum to provide a resource for everyone struggling with SCORM issues.

And since I love video, I’ve started turning some questions into video resources over on our YouTube channel. Short answers to quick questions, most of which I had when I started working here and had no clue about SCORM. (I have one solitary clue now.) Look for more videos from me and our fabulous support dude Joe with answers to your SCORM questions.

12 Comments | Post a comment »



SCORM for RFPs e-bookSCORM used to be binary, either you had it or you didn’t. But that’s not right. Let’s face it, in reality there are some good SCORM implementations and some, well, really bad SCORM implementations. Our new e-book will help you decide which is which.

No Comments | Post a comment »



SCORM is a difficult problem, no doubt. As a content creator, there are countless things that you should do well in every piece of content if you want it to work in as many LMSs as possible.

Today, I’m focusing on particular technical choices at runtime, rather than packaging or “process”. (If process were part of this, I think all five things would be “test your content”.) Without further ado:

1. Find the SCORM API well

Once a piece of SCORM content is launched, its first task should be finding the SCORM API. Without this API, it can’t communicate with the LMS at all. (And a piece of SCORM content that can’t communicate with an LMS is just a webpage with annoying popup error messages…)

Finding the API isn’t a trivial task. It can be located in a parent frame or a parent window. This distinction is a crucial one, and isn’t tested well by the SCORM test suite. If your content adheres to the standard, it will perform well either in a frameset or in its own window. Take the time to get this right, or you’ll suffer the pain of fixing it when you send your content to the second LMS you want it to work in. (And for goodness sake, we’ve provided you with the code for an improved API discovery algorithm. Go ahead and use it. All of you.)

Lastly, if you can’t find the API, be sure to tell the user. The user needs to know right away that they won’t be getting credit for any of the work they’re doing.

2. Set your status right away

The first thing a piece of content should do with the API after it finds it is call GetValue(cmi.completion_status). [Note: This article is not about syntax. I'm intentionally avoiding committing to a version of SCORM.] If the current status is “not attempted”, it’s crucial that the content change it to “incomplete” right away. If the content fails to make this change, the LMS is obligated to consider the content complete on exit, even if it isn’t!

3. For the love of your users, use bookmarks

I suppose this is the least crucial of the elements in this missive, but please take care of your users! SCORM offers a simple concept of bookmarking (cmi.location). As your learner progresses through your content, set a bookmark periodically. Then, when the learner returns, be sure to give them the opportunity to return to where they left off. You would expect that level of courtesy in any piece of content you take, so provide it to your learners.

4. Record completion

The vast majority of SCORM content is taken at the encouragement of another. In a corporate environment, training is pushed on learners for compliance reasons. In the education world, professors often want to know that the learning material has been reviewed. In many ways, SCORM is largely about tracking the completion of training.

The only way the LMS knows that the learner has completed the training is if the content tells the LMS that the learner completed the training. Please tell the LMS.

5. Exit gracefully

top.window.close() is not the right way to exit from a piece of SCORM content. Is that clear? Sometimes, content is opened in its own window. If this is the case, then top.window.close() will probably be just fine. Sometimes, content is opened in a frameset. If this is the case, the world will come to an end.

Section 2.1.3 of the SCORM 2004 3rd & 4th Edition Specs puts it like this:

If the window in which the SCO was launched is a top-level window (i.e., the
window has no parent window, but it has an opener) then the SCO may attempt to
close the window after calling Terminate(“”).

[...]

If the window is not a top-level window (i.e., the window has a parent window),
the SCO may not act on the parent window or any window in the chain of parents.
For example, a SCO is not allowed to attempt to close the top window, unless it is
its own window.

This is one to get right. As an LMS vendor, content that obliterates the entire LMS (by closing its window) is annoying both from a user experience perspective and from a data perspective (in poorly implemented LMSs). Put simply, don’t trash the room on your way out the door.

________

These five things alone won’t make your content conformant, but they will move you a long way down the path to creating interoperable, well liked content. So, what did I miss? Are these things the top 5?

3 Comments | Post a comment »



I got this question today (and yes, we really do mean you can ask us anything…):

We are making configuration settings for our new LMS ([redacted]) and one of the questions is:

1.3.5. How is the overall score for a SCORM course with more than one SCO computed? With the following choices:

  • MaximumScore. Highest score of all items (SCOs) in the course.
  • AverageScore. Average score of all items (SCOs) in the course.
  • FirstScore. The first score achieved by the user across all items (SCOs) in the course. Note: If this option is selected, ScormScoreUpdateOption should be set to “Never” and the user’s score will always remain the first score they achieved.
  • MostRecentScore. The most recent score achieved by the user across all items (SCOs) in the course.

What do you recommend?

My first reaction

Well, clearly we’re talking about an LMS that is really SCORM 1.2 centric. This ability to manage scores across attempts and SCOs is one of the things that SCORM 2004 actually does very well. Rollup rules allow the content author to specify these behaviors in great detail, including weighting the various elements and even excluding some. This provides the author with useful tools such as pre-assessment that doesn’t impact overall satisfaction.

My second reaction

There simply is not a good answer to this question. If these settings are global, as they appear to be, I can’t be forced to pick one in particular as it wouldn’t serve other situations adequately. The most common multi-SCO package structure, to my mind, is a course with several SCOs and a single post test (assuming we’re dealing with more than one score). I’m not sure that any of these options serve that package structure well at all.

My ultimate conclusion

An LMS simply can’t afford to make singular decisions about how to deal with content. It absolutely has to provide configurability on a package by package basis. Failing to acknowledge that the world of content is widely varied will lead to content that doesn’t work as desired. This, frankly, is why building an LMS with SCORM conformance is so difficult to get right.

How we handle it in SCORM Engine and SCORM Cloud implementations

Package properties provide our ability to address different pieces of content differently. (Take a look at the possibilities. There are more than 50 options for configuring a course. All are defaulted intelligently, but all are also the answer to a question that has to be answered for certain courses.)

packageproperty-1

Take a look at how we’ve approached the particular problem of rolling up scores in SCORM 1.2. We have options that aren’t unlike those offered in the question above. The differences are relevant, but only to a degree. Fundamentally important, though, is that you can set these properties for each package.

I hope this provides a bit of illustration as the level of detail required to really nail the SCORM problem. We suffer this minutiae so our customers don’t have to.

Note: Don’t worry, my recommendation for the person who sent the question isn’t as obtuse as, “Use the SCORM Engine”… We’re still chatting via email…

3 Comments | Post a comment »



Here I go, here I go, here I go… again. I’ve been called to defend SCORM’s honor again.

I caught this tweet yesterday.

E-Learning in Drupal – SCORM RTE for Drupal now released! Watch the demo: http://tinyurl.com/l9des6

-@BusinessCarrots

We are big believers in SCORM being implemented everywhere. Obviously, we like the idea of any system in the world being able to deliver SCORM training. (We like it more if we’re the ones doing it, but really, if SCORM becomes progressively more important, I’m pretty sure we’ll benefit from that.)

So, as you would expect, I went to check out the screencast of the Drupal/SCORM integration. I’d be more than happy for you to do the same. (You can see it here.)



<rant>

DO NOT DO SCORM PART WAY. EVER.

When The Partridge Family famously said, “I’ll meet you halfway, that’s better than no way,” they weren’t talking about SCORM. Half of a SCORM implementation is a bizarre form of torture.

</rant>

So what brings me to the point of quoting The Partridge Family today? As you might imagine, the Drupal SCORM implementation mentioned above falls well short of SCORM conformance. How do I know? The screencast indicates that the implementation supports neither completion_status nor location. The first two things I would tell any content vendor to implement in their content would be completion and bookmarking, neither of which will work in this implementation!

Truth be told, I’m not really this angry about it. I appreciate the efforts to include SCORM in more systems, but SCORM really suffers from inconsistent implementations. If you’re going to implement part of SCORM, please do the industry as a whole a favor… finish it.

3 Comments | Post a comment »


Older Posts »

Browse Categories

Using the Standards

Tips, tricks and solutions for using SCORM and AICC.

Standards Evolution

Our chronicling and opinion of the evolution of SCORM.

Rustici Software

Stories about who we are and what we're up to.

Products

News about our products. Notifications of new releases and new features.

Ideas and Thoughts

Miscellaneous thoughts and ideas about e-learning, entrepreneurship and whatever else is on our minds.

Software Development

Ideas about software development and how we manage things internally.