June 2007

What I’ve learned from two episodes of my first true podcast…

So I’ve dabbled with the podcasting thing before, both here and on my family blog. Last week, since some friends of mine are heading into Chicago to attend a music festival with me, I began a podcast where I put on an hour-long radio show featuring music. The subject matter is pretty contained: I don’t talk tech, I don’t wax politic (at least not overtly) — I only talk about the music being played and any anecdotes related to the song, both historical and personal, since I’m kind of a music buff. If you’re curious, you can check it out. I can share how I put it together in comments or offline.

I emailed all of my friends and acquaintences. Maybe 200+ people (I have a lot of actual friends). And of that number, only six people seem to have signed up. Instead of handling the feed myself as I would have using podPress for WordPress, I signed up for FeedBurner, which provides stats on my podcast — who’s signing up via email vs. iTunes vs. Other, how many clicks back to the site have there been, how many downloads of the .mp3 files, etc. But 6 out of 200 is only 3%. I would have thought I’d get better results.

Then a friend of mine called me up yesterday, about a week after I first launched the podcast. She didn’t know what the whole podcasting thing was about, and was confused. So I made my friends a video on how to add my podcast to iTunes, now perhaps better understanding that while most of my oldest friends own iPods… they may never have downloaded a podcast. It might sound weird to this audience, but just think of it as an adoption challenge I didn’t see coming.

I sent the video to my friends, and the numbers the next day? They went DOWN.

Maybe it’s just a bad podcast. Don’t know. But as long as I have my six regular listeners, I’ll keep doing it.

Adoption
Podcasts
Training

Comments (4)

Permalink

The Passing of a Good Friend

Folks, I generally try to keep this blog free of my more personal opinions, but a friend to the E-Learning community has passed, and it’s truly important that we take a pause to remember him.

Claude Ostyn was a pioneer with Phillip Dodds and a few others on developing the original specification for SCORM. His involvement as a consultant on SCORM since its inception was (and frankly, is) important and influential. For many years, Claude has been the strongest voice of implementors — sometimes his was the sole voice speaking out on behalf of developers and programmers of both content and learning systems on making SCORM easier and more accessible.

I have my own memories of Claude, having gotten to know him personally over the last four years. We first met pouring over the JavaScript and ActionScript of a Norweigan’s content at the tail-end of the first International Plugfest in Zurich. We spent hours and hours going line by line over the logic of the standard SCORM 1.2 code that published out of Flash MX 2004. It was only then that I realized that it was Claude who actually helped write that code with Tom King and Andrew Chemney. I was in awe, helping debug such widely distributed code with its author. Claude had a singular wit and a drive to be correct in all things. When we in fact discovered the flaw in the code logic (it kept recording interactions to an ID of “0″ if memory serves), it was after three hours of testing every imaginable assertion. Claude was relentless in helping this total stranger with his code, while almost everyone else was packing up and heading out of town, and that developer certainly got his money’s worth. Claude created a workaround, sharing it only after he tested it enough himself that he was convinced it really addressed the issue.

I was blown away from his dedication.

There are some people who only saw Claude in conferences, and without context they saw him as stubborn, maybe confrontational. Claude always made sense to me.

I admired his dedication to the many of us who have to just make things work and implement, as well as his tenacity in making sure his message was received — not just getting his voice heard. Claude often articulated concerns that I had but could not find the words to express clearly. I was often corrected by Claude, publicly, but I appreciated the wall of absolute candor that I could steady myself against.

Claude was the real deal. He’s written more articles and tutorials, patrolled the message boards and worked with so many communities in this trade than I could ever read up on, and he was doing it from the get-go.

His passing is our collective loss, and if there is any good to come from it, it will be that all of us involved in making E-Learning accessible for others to develop to step up, take the lead and share what we learn in his stead.

I was reminded once by a luminary in this field that we’re all new at this. We have a lot less to learn because of Claude, and I will miss that uniquely Belgian wit.

E-Learning
SCORM
Standards

Comments (1)

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

“Flex”ing Development Muscles…

So, I bet you thought I was going dark again since it’s been almost a month without a post.

Actually, there’s been some moderate activity on the Flash For Learning grouplist. Not a ton of activity, but while there are many Flash developers and designers doing E-Learning, there’s probably not too many who are vocal. In the first month since the list was launched, we’ve got about 25 subscribers and maybe six people who post so far. Everyone’s in the same boat, realizing that there isn’t much out in the wild web on gearing Flash and related products for E-Learning. One of the members of the group is working on a full-on ActionScript class to handle the API communicaiton with SCORM. I’ve been hard at work doing something pressing that I’ll open up when I have it working.

Remember a few months back when I wrote about QA? I got a QA entry linking to a database working right out of Articulate Presenter as a tool in the upper right-hand corner. Honestly, it’s just a link to a URL, so it could be linked to anything, but the point is I have it working out of Articulate, using the LMS to provide your name when you enter a bug and Articulate to auto-fill the slide number you’re on, so all you have to do is tag what the problem is with keywords and then write a detailed description of the problem, and submit. The last week or two, I’ve been working on the management system to handle all that QA data, and I’m using it as an excuse to learn Flex 2 and AMFPHP 2.0 (currently in 1.9 beta 2). It’s fast, it’s effective, it’s efficient, it’s clean and neat — I’m surprised at how easy the combination of Flex 2 and AMFPHP 2 are to develop with. If I had tools like these when I was knocking out my first e-learning apps in 2001… well probably nothing would be different, but it sure would’ve been easier.

I’m currently gathering requirements to produce a learning game for my company. I won’t be developing it myself as the scope is just way too large for one guy to tackle. Right now we’re buying some serious games and we’re going to play and evaluate them at the same time we build the momentum from the businesses that will be served by this learning game for championing the project and get stakeholders identified and on-board. If anyone has experiences they’d like to share on the learning gaming front, I’d love to talk to you, as it’s completely foreign to me which makes it interesting to sell the idea of it to more conservative corporate types.

So this post isn’t really saying much except I’m alive, I’m active and communicating and there’s some pretty cool stuff going on that I’ll post here and on the Flash for Learning group.

Articulate
Bugtracking
Development
Flex
Productivity
QA

Comments Off

Permalink