Convert C# to Java Source Code
8.17.2007 - Mike Rustici
The users of our SCORM Engine predominantly run their LMS's on the Windows platform. To best serve their needs we coded the SCORM Engine using C# on the ASP.NET platform. We've long known that we were ignoring the significant population of customers who prefer to develop using Java and deploy to Linux (or any other non-Microsoft platform). We investigated several solutions for supporting these customers and came up with some okay alternatives that allowed us to fulfill the customer need, but they all had one shortcoming or another. Back in November we embarked on an ambitious project to convert the SCORM Engine from C# to Java....automatically. We tapped the expertise of Kevin Glynn to develop a tool which automatically converts C# source code to Java source code and I'm proud to announce that it is complete. We now have a tool capable of translating C# to Java at the source code level. This tool will allow us to support both major platforms concurrently while only maintaining a single code base and still providing full source code to our clients. Initial tests show that the Java version of the SCORM Engine performs comperably to the .Net version and in some cases is even faster. The technology is amazing and we may offer it to others in the future. For now it is just an internal tool, but if you have an interest in it, please let us know as we are batting around the idea of commercializing it or releasing it as an open source product. More info available here.
3:22 PM
2 comments
Growing Up
Just like your kids, it can be amazing how fast your business grows up. It happens in bits and pieces and it's not until you take a moment to look back a couple years that you realize just how far you've come. For the second year in a row, the Nashville Chamber of Commerce has named Rustici Software one of its "Music City Future 50 Winners". The Music City Future 50 is an annual recognition to celebrate the 50 fastest-growing, privately owned companies in the area. A few years ago we were just a few guys working out of a spare bedroom. Today we're the global leader in our niche. This year we signed up our 100th customer and just this week the SCORM Test Track signed up its 2500th user! We're currently hiring a few more people and soon will be announcing a new e-learning offering that we hope will have a very positive impact on the entire online training industry. Thanks to everybody who helped us along our way!
12:25 PM
0 comments
SCORM 2004 Completion
We spend a fair amount of time at Rustici Software looking at problems people encounter in our SCORM Test Track and our other LMS implementations. We want every piece of content to work the first time, and so we dig around for the real source of problems. In an effort to improve interoperability in general, we're going to start posting some of these conversations on the blog so that others can link to them and avoid similar issues.
---------- Forwarded message ---------- From: Mike Rustici Date: Aug 13, 2007 5:15 PM Subject: Re: TestTrack User Feedback To: xxxx@xxxx.com
Hi xxxx,
We took a closer look at this course to figure out what is going on. What Trivantis says
Lectora 2007 is SCORM 2004 3rd Edition conformant. I have ran across this issue with the Rustici software before. Basically, is the LMS that is setting that status as soon as the course is launched for the first time. I have spoken with them about this and there may be a gray area in SCORM 2004 regarding this. Basically, the following is taken from the ADL SCORM 2004 3rd Edition documentation:
"Since the determination of cmi.completion_status is initially controlled and managed by the SCO, the LMS cannot imply any value for the cmi.completion_status in any way. There is no requirement in SCORM that mandates a SCO to set cmi.completion_status. If the SCO does not set the cmi.completion_status, then the LMS shall use the default value of "unknown" as the value for cmi.completion_status. However, if a cmi.completion_threshold is defined and a cmi.progress_measure is reported by the SCO, then the LMS must override the cmi.completion_status by adhering to the requirements defined in section 4.2.4.1."
The part about the cmi.completion_status element is true, the LMS basically shouldn't mess with it....and we don't. If you take a close look at the debug logs when you launch the course for a second time, you'll see that the cmi.completion_status value is still unknown. You can also see this by drilling down into the detailed report at the top of the SCORM Test Track screen.
The cmi.completion_status for the SCO however is not what provides the overall determination of a course's completion status. This might be a bit confusing, but in SCORM 2004, there are two data models. The first is the simple CMI runtime data model that SCO's read from and write to via the SCORM API. Every SCO has a set of CMI runtime data associated with it. The second data model is the sequencing data model. The sequencing data model is closely related to, but separate from the runtime data model. Every item in a SCORM 2004 course has a set of sequencing data associated with it (in other words, SCOs and aggregations both have sequencing data in contrast to CMI data which is only available on SCOs). It is the sequencing data of the root aggregation of the course that determines the course's overall status. In this case, there is a single SCO wrapped in a single aggregation (every SCORM course always has an aggregation at the top level). The status you see in Test Track is the completion status of the root aggregation's sequencing data....which is closely related to, but not exactly the same as the single SCO's runtime data.
Now, why does the course show completion? For a detailed explanation, see section 3.13.2 of the SCORM 2004 3rd Edition Sequencing and Navigation spec. Basically, there is a sequencing rule that indicates whether or not the content is going to communicate any completion information via the SCORM API ("completion set by content"). If this setting is false (the default), then if the LMS doesn't receive any completion status information from the content, it is supposed to automatically mark the content as completed. Since this course isn't reporting any completion status information when it exits early on, the LMS is behaving correctly by automatically setting the sequencing completion status to completed.
There are two best practices that content vendors implement to avoid this behavior. The first is to override the default value in the manifest and set "completion set by content" to true. The second is to immediately set cmi.completion_status to incomplete upon launch of the content. This call tells the LMS that it should expect completion information to be explicitly recorded and should not auto-complete. This best practice dates back to SCORM 1.2.