Development

Question: SCORM on a Mac

From the LETSI Wiki

“Our company is starting to venture into creating SCORM modules.
What is the Best Mac software for developing SCORM content?

One option was Lectora? Any good?”

SCORM on a Mac… it’s tough. I assume you’re looking for authoring tools. On a Mac, there aren’t a lot of options at the moment. There’s no Captivate for the Mac. There’s no Articulate Presenter, no Lectora or Adobe Presenter for the Mac either. The only authoring tool I’ve seen that works straightforward on the Mac is eXe – http://exelearning.org/ — which produces standards compliant XHTML/CSS and a SCORM 1.2 content package.

The other option if you’re using a Mac is… and it pains me to say this as a longtime Mac user and advocate — is to run Windows on your Mac, and install one of the content authoring tools of choice (I feel best about Articulate’s suite of products if you’re not into “coding”). If, however, you are into actually coding, there are lots of options that are Mac native for beautiful multimedia — and if you have the requisite ability to tie everything together with HTML, JavaScript and feel comfortable using a packaging tool like Reload – I’d be happy to direct you to some fantastic tools.

And what tools would I point you to? I’m glad you asked.

  • ScreenFlow
  • Snapz Pro
  • Keynote
  • iMovie


Development
SCORM
Tools

Comments (4)

Permalink

Desiging for the iPhone? Check this out…


Yahoo has a fantastic Design Stencil Kit in several formats, including OmniGraffle and Visio. I’ve recently started jumping on the Information Architecture bandwagon and found that visually planning out a web-based design with wireframes was not only helpful but saved me a bunch of time from the “let’s see what kind of layout I can code today” method.

As I continue to work on my pet project of building good SCORM content for the iPhone (just for kicks), this kit from Yahoo will be a big help.

Development
Mobile
Productivity
Tools

Comments Off

Permalink

Stuff I’m Playing With (This Week)

  • Firefox 3 was finally released out of Beta, and it’s pretty sweet. I’m using a bunch of extensions that are helping out my productivity and workflow quite a bit.
  • I’m using the ScribeFire extension in FF3 to post this to the blog.
  • I’m using the Remember the Milk extension to flesh out a Tasks pane that’s available from my Gmail interface. I’m also using the RTM extension for Google calendar to keep track of my tasks by day, in case I’m in there, too.
  • I went through the tutorials for SproutCore, which is a Ruby application to produce RIAs using only HTML and JavaScript with OS X-like interface features. It’s the basis for Apple’s MobileMe applications. And, for once, unlike everyone else trying SproutCore, I’m having absolutely no issues (compared to the people on the GoogleGroup for SC who couldn’t get it to work until this morning).
  • I’ve been playing with JSON out of Flickr with jQuery to build cute little slideshows using Flickr’s API.
  • I’ve also been playing with some Flickr/MooTools/SlimBox for nice gallery features. This particular feature was helped a lot by Ted Forbes’ Satellite code.
Technorati Tags: , , , , , , , , , , ,

Development
JavaScript

Comments (1)

Permalink

Using Sounds Embedded in the Library and Other Tricks

So, in ActionScript 2.0, there existed such a thing as attachSound which would allow you to call on sounds in your library and iterate them in code much like you would call on movieclips in the library.

With ActionScript 3.0, there is no attachSound, so you need to do a little workaround. It took me a while to find this, but here you go:

import flash.utils.getDefinitionByName;
import flash.media.Sound;


var mySound:Sound;

var librarySound:Class = getDefinitionByName ( "nameOfYourSoundasLinkedFromTheLibrary" ) as Class;

mySound = new librarySound();

Basically, anything that you’re referring to as an Object in ActionScript 3.0 seems to require having a class file. So when you go to your library and export your sound objects for ActionScript, a class file is published for each one, and you need to call on these as a class in your code in order to use them like you would an external .mp3 or other audio file.

Now, for the fun part — remember what a pain in the ass it was to trigger some kind of event when an audio file would stop playing in Flash circa ActionScript 2.0? Throw the following code in to the above:

import flash.media.SoundLoaderContext;
import flash.media.SoundChannel;

var myChannel:SoundChannel;

myChannel = mySound.play();
myChannel.addEventListener( Event.SOUND_COMPLETE, AudioDoneAction );

function AudioDoneAction( event:Event ):void
{
    // Do something when the audio is done
}

So basically, the Sound class in ActionScript 3.0 allows you to load sounds and play them, but if you want to manipulate them or use them to evaluate other stuff, you want to include the Sound object as a reference in a SoundChannel object.

This seems pretty overcomplicated for my simple example here, but think about it this way. What if you had five different external audio files you wanted to load as a playlist for just one slide in an E-Learning piece, and you wanted to trigger different images and text with each audio file. You can code yourself a playlist and trigger changes upon completion of an audio file — and even track where you are in the playlist so that you could have different actions upon completion of the first and/or the last (or really at any defined place in the order of) audio in the playlist.

I couldn’t figure out the embedded audio as class thing on my own. It took a while of experimenting and searching until I found the solution here and here.

ActionScript 2.0
Development
Flash

Comments Off

Permalink

Director and SCORM

I don’t know how I missed this, but back in May my ol’ pal and programming buddy back in PA — Kraig Mentor published this article on Director And SCORM.

If you’ve downloaded the Plug-in Technology Example, which demonstrates the code and the activity you can employ to create both Flash and Director-based content objects — that’s the handiwork that Kraig and I worked on in our first months of working together. Kraig, who worked on the Director team for Macromedia, is a pretty nifty dude and he took his experience working with SCORM to a whole other level by creating a full-fledged library for use with Lingo (or any other language) to easily access whatever he wanted through SCORM.

Then… Kraig got really crafty and started on a path of hardcore Sequencing and Navigation strategies back when it was even more obtuse than it is now (before 2nd Edition of SCORM 2004). He also built this content engine in Director that uses XML to populate it… much like a lot of Flash developers do to create E-Learning. Except Kraig’s doing with with Director.

So for those of you still down with Director (which Adobe is still developing), check this article out. It’s also a good read for those of you looking to construct your own template engine with Flash, at least from an architectural perspective.

Development
E-Learning

Comments (2)

Permalink

Podcasts on Flash

With my 3G iPod nano, I’ve run the course on getting my learn on as far as adjusting my fantasy football team or catching up on political satire. This weekend I was getting jiggy with ActionScript 3 and actively sought out what podcasts might be available, video or otherwise, on the subject.

I didn’t find much. However, I found at least one use of podcasting that are extending the official knowledge out there. I’ve been reading the ActionScript 3.0 Game Programming University by Gary Rosenzweig off my Safari account to get a little more hands-on with the code. Turns out, Gary also has a podcast that extends the lessons in the book, complete with screen grabs (done on the Mac, just to needle it in for some of you) on how to further modify or extend the code examples detailed in some of the lessons. That’s pretty nifty from both a marketing and an educational perspective.

I’d love to find out more about podcasts centered around Flash, Actionscript 3 or scripting in general (for all my experimentations and tutorials, Ruby on Rails still isn’t taking for me — and neither is Flex).

ActionScript 2.0
Development
Flash
Podcasts
Tools
Training

Comments Off

Permalink

OpenDocument Format + Flash = Open Content Templates?

A thought just occurred to me, and I hope it spurs some discussion from the Flash coders that are among us.

So OpenDocument Format is an approved ISO standard for Office-type documents, including spreadsheets. In fact, ISO is in the process of moving the standard forward to version 1.2, where it’s expected that tables will be supported in the presentations created in ODF.

Lots of us who build custom courses are using our own XML Schema to fill-in the content of Flash-based online courses. But… what if a bunch of us used the same format for our XML? A little over a year ago, some of us got together via the os-flash.org project for “Edumatic” and after a couple of very nice “how do you do?” emails, it plain died. I was reminded of its existence yesterday when I got my automated notice about my subscription to the newsgroup in my email.

But back then, we were talking about how do we even write the XML format so it’s the same. Well… we have an open standard that’s not only approved and maintained internationally… but it’s freaking FREE. So here’s my thinking:

There’s no shortage of tools that can create an ODF presentation (OpenOffice.org and NeoOffice on the Mac are but a few). But Google is supporting ODF, also with their online GoogleDocs application. So the authoring tools are there. We just need a common way to support them.

That’s where some Flash scripting and graphic/multimedia design moxy comes in. Imagine a workflow where anyone can author the learning content anywhere on free-to-use tools that are also easy to use (in other words, not much change management needed to do it). Then with a little scripting savvy, a developer simply takes the ODF export of the presentation, uses it to populate a course and makes the tweaks required (goal state: none) to put it into an LMS.

Now you have an incredibly fast way to take the abundance of content in your organization and put it into a digestible format for online learning in current systems.

So if you’ve read this far, the next question is… who’s interested? Because this is definitely not a one-man job.

Adoption
Development
Flash
Interoperability
Productivity
Standards

Comments (5)

Permalink

myLearning Mobile Accenture Education

“We’re still trying to figure out what the questions are.”

Accenture had an opportunity for Mobile Learning. The Business need they had was to increase the speed and ease of uptake of corporate required training by senior executives. They also needed to provide important information at the moment of need.

Fortunately, they have a receptive audience that would benefit from and use a mobile approach to training. Mobile devices for their senior executives are enabling technologies. Senior executives make up a large population of our mobile device users.

  • January 2007 = 6,000; October 2007 = 14,000

The Future Scenario:

  1. The SE receives email aobut required training on their mobile device just before heading to the airport.
  2. SE selects the “myLearning mobile solution” option for this training from her mobile device.
  3. myLearning automatically enrolls the SE in the course and the SE has access to the mobile training course
  4. SE takes a 15-20 minute segment of training and successfully completes an assessment en route to the airport.

Obstacles:

  • Flash not supported as it needs to on mobile
  • LMS Communication issues
  • Configuration issues with the broad span of devices that need to be supported (dozens with different OSs)

Accenture decided to pilot it with a 12-screen prototype, intentionally selecting 12 screens that would present a challenge porting from their E-Learning to mobile. The decision to do this rather than designing from the ground up was intentional, as SEs wanted an experience that was as close to traditional E-Learning as possible. Accenture started in-house with a live demo with a very small population, and then they went remote for a pilot. Both groups came back and said they’d use it (about 90% in each group) when asked — stating they had a “better than expected” experience with the prototype.

Phase 1: Prototype

  • Goals
    • Develop small prototype
    • Test with SE
    • Refine future scenario
  • Key Research
    • Audience reaction
    • Insight on mobile technology
    • User interaction design considerations and trade-offs
  • Content Interaction Definition
    • Ten minutes of content from existing ethics course
    • Simple text and graphics
    • Two types of interactions: multiple choice and fill-in-the-blank

Phase 2: Field Testing

  • Goals
    • Develop a full Ethics course on a mobile device (no LMS interaction)
    • Test with a broader audience
  • Key Research
    • Audience reaction and insight use of mobile devices
    • user interaction and design considerations
    • Preliminary infrastructure research

Phase 3: Infrastructure (including LMS integration for the first time)

  • Goals
    • Develop LMS integration for mobile training delivery
    • Create a seamless experience from notification and enrollment on through to completion
  • Key Research
    • Enrollment and completion communication to the LMS

Phase 4: Rollout

  • Goals
    • Expand Accenture’s mobile learning asset catalog
    • Increase the richness of the user experience
  • Key Research
    • Determine how to make the user experience better

Effective Design

Elements of effective designa nd usability of a mobile learning solution:

  • Refreshable content
  • Appropriate chunking of focused content
  • Concise writing
  • Effective and logical navigation
  • Simple graphics

Adoption
Conferences & Meetings
Development
E-Learning
Mobile
Performance Support
Productivity
Reporting
Strategy
Training

Comments Off

Permalink

LomPad = MetaData Generator

LomPad is a Metadata generator for Windows, Mac and Linux that will simply generate all the metadata you need, either to the IEEE standard LOM (Learning Object Model) profile or, specifically for many of us, the SCORM 2004 profile.

It’s pretty straight up and easy to use so far. I’m looking forward to putting it through its paces. It’s default language is French, but there is support for English that you can turn on pretty easily from its menu options.

Development
E-Learning
Metadata
SCORM
Tools

Comments Off

Permalink

SCORM 2004 Best Practices

I was doing some housecleaning on my computer this morning and ran across something I wrote up a long while back and never put out. I wonder what other gems I might have lying around.

Hope this helps.

Interactions

Interaction Identifiers
Organizations should define naming conventions for cmi.interactions.n.id so that each interaction has a unique identifier, at least within the scope of the Sharable Content Object (SCO).

Score

Development of Algorithms Instructional designers and developers should collaborate in the development of the algorithms used to calculate scaled scores. 

Methods for calculating score

  1. Keep a running tally after each questions is answered.
  2. Use the interactions data model element to record the learner’s score and loop through all questions tallying up how many results were correct and incorrect.
  3. Other – there are many individual methods for how and when to calculate the score.

Calculating Scaled Score
There are many ways to calculate scaled score, one of the more common ones is:
(Sum of each question's Value * Weight ) / Total weight possible.

Completion Status Setting Completion Status 
To make the course, or package, “completed,” use a combination of completion status on the SCO(s) and sequencing rules (as mentioned in the SCORM Content Aggregation Model (CAM) Version 1.3). This may involve a series of sequencing rules that appear as the following: This indicates that the item associated with this sequencing rule doesn’t count towards your course completion.

When this sequencing rule is on a parent in the manifest: 
An LMS will ignore any children of a parent in the manifest with regards to any requirements for course completion — whether you use “completion_status” on any of those SCOs or not. You can still designate these SCOs as completed. Assuming you’re developing with “completion status” to achieve some result, more work either with your code or with sequencing in the manifest will be required to take advantage of “completion status”

In any other instance, however, the LMS will pay attention, going all the way down into the children to look for what to ignore.

Launch Data

Availability of data

Launch Data is dependent on the existence of information provided by the manifest. For example, the next application scenario will use Launch Data to display text in Spanish, instead of English. The information in the manifest that pertains to Launch Data is detailed in the highlighted text below: 
� � � 
� � � � � � 
� � � � � � SPANISH
� � � The element provides initialization data expected by the resource (i.e., SCO) referred to by the after launch. To send data to the SCO for use after the SCO is launched, the combination of including and using Launch Data in the SCO is a good solution.

The availability of Launch Data, however, occurs after the SCO has initialized. Depending on your implementation, your content may load before the SCO initializes. If your content is dependent on information supplied by the manifest, and you can’t control the timing of the SCO initializing communication with the LMS, you may wish to use a Query Object and pass information to the SCO (or asset) using parameters.

Using the parameters attribute enables the developer and ID to specify the best graphic for each community without the development of multiple sets of content.

Such an in your manifest may look like the following:

This name/value pair is sent as a parameter to the SCO. It can be accessed the same way that any GET data would be accessed, appended to the URL. Continuing this example, it is possible to include JavaScript on the SCO to parse this name/value parameter, sent to the SCO from the manifest.

/********************** * Function: get_params() * Description: This function is used to get the parameters from the * query string ***********************/ function getparams() { var strSearch = window.location.search; var idx = strSearch.indexOf( '?' ); if ( idx != -1 ) { var pairs = strSearch.substring( idx + 1, strSearch.length ).split( '&' ); for ( var i=0; I < pairs.length; i++ ) { nameVal = pairs[i].split( '=' ); gparams[ nameVal[ 0 ] ] = nameVal[ 1 ]; } } } Once get_params() is called in the SCO, it is possible to make use of the data sent via the query object.

Please note: there exist limitations of the query object, such as string length, that should be considered before depending on the query object as a viable development solution.

Comments From Learner

All SCORM-conformant LMSs are required to support character maximums of 4000 characters per comment. Likewise, LMSs are required to support comment maximums of 250 comments.

Each LMS vendor is free to support more than the respective required maximums.

If no value is specified for the location of a comment, then the comment is assumed to be applicable to the entire SCO. It is up to the SCO to define the location of any given comment from the learner.

The timestamp for a comment from learner is in the format of (second, 10, 0). Per the RTE:

The time (second,10,0) data type represents a point in time. This data type shall have a required precision of 1 second and an optional precision of 0.01 seconds [1]. Implementations should be aware of this required precision versus the optional precision for it may impact implementation decisions. For example if an application is expecting the optional precision, it may not be supported. The SCORM dot-notation binding defines a particular format for a characterstring to represent a point in time. The format of the characterstring shall be as follows: YYYY[-MM[-DD[Thh[:mm[:ss[.s[TZD]]]]]]] where

  • YYYY: A four-digit year (1970 >= YYYY >=2038)
  • MM: A two-digit month (01 through 12 where 01=January)
  • DD: A two-digit day of month (01 through 31, depending on the value of month and year)
  • hh: Two-digits of hour (00 through 23)
  • mm: Two-digits of minute (00 through 59)
  • ss: Two-digits of second (00 through 59)
  • s: One or more digits representing a decimal fraction of a second). If fractions of a second are used, SCORM further restricts the string to a maximum of 2 digits (e.g., 34.45 – valid, 34.45454545 – not valid).
  • TZD: Time zone designator (“Z” for UTC or +hh:mm or –hh:mm). The hh and mm shall adhere to the requirements defined above for hh and mm. The time zone designator uses the extended format as defined by ISO 8601-2000. The extended format requires the use of the colon “:” as a separator between the hours and minutes. If the difference between local time and UTC is required then the time can be expressed in hours and minutes (i.e., 03:10) or if the time difference is exactly an integral number of hours, then hours only (03). The leading zero is required for hours less than 10. At least the four-digit year must be present. If additional parts of the time are included, the character literals “-“,”T”,”:” and “.” are part of the character lexical representation [1].

    Example:
  • “2003”
  • ”2003-07-25T03:00:00”

Credit

A SCO should not base reporting decisions based on whether it is being experienced for credit or not. Much of the implied meaning of this data model element is handled on back end systems (LMS).

If a course is being taken for no-credit and the SCO still sets status and scores, then let the LMS will determine what to do with these scores and status as SCORM does not state whether or not a Run-Time Environment (such as an LMS) must support a mechanism for initializing this value.

From a SCO’s standpoint, the cmi.credit element is read-only. Because of this, the value has to be initialized some where outside of the SCO (since the SCO cannot set the value). Many implementations demonstrate that there is a way to signal that a learner is taking a course for credit or no credit. If an LMS supports this mechanism then the cmi.credit is initialized to whatever value the learner (or an administrator/instructor requires) chooses.

If an LMS does not support a mechanism then the default value (“credit”) must be returned by the LMS when the SCO makes a get request.

However, this assumes that when content is experienced for “credit” that the SCO will report a score, success status etc. This is not necessarily true. What it means to give credit for performance is not defined.

This could have many meaning depending on many different implementations, organizations, communities of practice, etc. For example, in an organization taking a course for credit might signal the LMS (or some piece of the LMS) to record information into a Training Record, which is outside the scope of SCORM.

Objectives

Objectives, like Interactions, require a unique identifier. Organizations should define naming conventions for cmi.objectives.n.id so that each objective has a unique identifier.

The Objectives Data Model Element is considered a “Local Objective” in terms of Sequencing & Navigation. Objectives, in this sense, have their own set of progress information within the SCO they reference and are considered separate from other learner activities. This means that Objective information referenced in one SCO by the Objectives Data Model Element cannot be directly referenced by another SCO.

Multiple SCOs may, however, reference a shared “Global” Objective. Global objectives can be used to make sequencing decisions. More information on how global objectives may be implemented can be found in the SCORM 2004 Sequencing & Navigation Version 1.3.1 document. (Section 3.10.1).

Overall Development

Pop-Up Windows
 In order to track the learner’s activity, it is best to avoid using any additional pop-up windows, especially if you are unsure what LMS will be displaying your content. SCOs and Assets
 Do not arbitrarily decide what content will be a Sharable Content Object (SCO), collaborate with the project team and decide before you begin any development.

508 & Assessment Feedback
 A screen reader only sees content that is available on the initial page load. If any text is dynamically generated with JavaScript, or a dynamic text field in flash, the screen reader will not recognize it. In order to make feedback accessible, it is best to display it on a new page.

Meta-data
 Keep a running record of key information about text and file attributes. Update your meta-data on a regular basis. Bookmarking
 If you have a multipage SCO, it is best to set a bookmark when each page unloads. This will account for any unexpected exits, and upon returning, the learner will be brought to the last page they were at before leaving. We recommend creating a function that uses cmi.location and cmi.exit. This function should be called when the page unloads.

Manifest

Group all dependent resources together and then reference them with a common name.

Make sure all ids within the scope of the same manifest are unique. They may be developed to be globally unique.

Open the manifest in Internet Explorer since it is an xml file. This is one quick and easy way to test to see if the xml file is well formed. Once you have ensured that it is well formed, then test your manifest with an XML validating parser (this can be done by testing the manifest in the SCORM Conformance Test Suite).

Development
SCORM
Strategy

Comments (1)

Permalink