Forum .LRN Q&A: ANN New version of IMS-LD 1.1.0 tagged and released

Hello all,

As part of the E-LANE project, the uc3m is glad to announce the second release of the IMS-LD package. We are also glad to announce that we were invited to give a demo of the package in the IMS Global Consortium Quarterly Meetings and Learning Design Summit, which will be held in the Open University of the Netherlands in November.

Among other things, the package includes:

  • Full Level A support (parser and player)
    • Simple sequencing of activities
    • Simple integration with LORS and Assessment
    • Services support: E-mail and Forums
    • Roles support for the Unit of Learning (UoL)
  • Full Level B support (parser and player)
    • Properties support
    • Conditional sequencing
    • Evaluation of conditions/expressions
    • Support of imsldcontent resources (where the users can manipulate properties)
    • Services support: Monitor

The package is being developed in the HEAD branch of CVS. If you want to try it you have two options:

  1. Use our test server: http://strauss.gast.it.uc3m.es/ (There you will find info about the a ccounts)
  2. Install .LRN from the CVS or the latest tarball, then get the package from CVS and install it. (IMS-LD install guide)

We will now focus on:

  • Support for Level C
  • Monitoring tools for the course administrators
  • Fixing bugs and improving the package (both user interface and code)

You are welcome to try the package, and any suggestions, comments or bug reports will be greatly appreciated.

Collapse
Posted by Caroline Meeks on
Congratulations! Will your slides or a podcast of the presentation be available?

Do you have a screencast of an activity we could view?

Thanks
Caroline

Caroline,

I'm very sorry but I missed your post! Anyway, in case you haven't fond what you asked for, here there are some links to some presentations we have done (with screenshots), and some other relevant information:

  1. IMS Learning Design Specification
  2. IMS LD .LRN package documentation
  3. IMS LD .LRN user's and install guide
  4. Some IMS LD .LRN package given presentations
  5. Test server

Thanks for the interest.

Jose Pablo Escobedo

Hello all,

We are glad to announce the third official release of the IMS-LD package for .LRN.

Among other things, this release includes:

  • Improvements
    • Bug fixes
    • UI improvements
    • Support for different roles in the conference services
    • Sql scripts for upgrade and delete the package
  • Full Level C support (parser and player, previously commited)
    • Notifications support
    • Runtime assigned activities (assigned by the notifications)
  • Monitoring Tools for the Course Administrator
    • List of activities in the run
    • Activity reports: Users that have visited the activity
    • User reports: Activities that a given user has visited

As usual, please feel free to try our test server (http://strauss.gast.it.uc3m.es), or install the package from CVS (IMS-LD install guide)

We will now focus on code and functionalities improvements, bug fixes, UI and performance improvements; but regarding to the IMS LD spec, there is nothing else to do =)

Regards and happy holidays!

Jose Pablo Escobedo

Hi Jose Pablo,

Thanks for that new release of imsld package. I've installed it on a fresh install and now will "play" with it.

However I've noticed a couple of things:

- The packages are tagged as 1-2-0-final but the info files say it is version 1.0d (imsld) and 0.1d (imsld-portlet and dotlrn-imsld).

- The pg upgrade script is "upgrade-0.01d-1.0d.sql" but previous version of imsld was "0.1d" (not 0.01d) so it won't be run at upgrade time.

Thank for the info Emmanuelle. These glitches will be quickly fixed. As usual, we are eager to get your feedback once you "played" with the tool.
Thanks very much Emma!

The name of the script has been fixed, even though when I tried it before committing everything went OK. I think that it was because the APM looks for every upgrade script with a version number lower than the current one and runs it, no mater what.

Regarding the tag name, I had understood (somebody correct me if I'm wrong) that the package version in the info file and the CVS tag name do not necessarily have to be the same.

Thanks again for your feedback.

Regards

Hi José Pablo,

I've tried to upgrade imsld from version 0.1d to version 1.0d and got the following error (I'm using dotLRN 2.2.1-final on pg 8.1):

CONTEXT:  sentencia SQL: create rule imsld_send_mail_data_r as on insert to imsld_send_mail_datai do instead (
                update cr_dummy set val = (
                select content_revision__new(
                                     new.title,
                                     new.description,
                                     now(),
                                     new.mime_type,
                                     new.nls_language,
                                     case when new.text is null 
                                              then new.data 
                                              else new.text
                                           end,
                                     content_symlink__resolve(new.item_id),
                                     new.revision_id,
                                     now(),
                                     new.creation_user, 
                                     new.creation_ip,
                                     new.object_package_id
                ));
                 insert into imsld_send_mail_data ( data_id, role_id, mail_data ) values (cr_dummy.val, new.role_id, new.mail_data); );
PL/pgSQL function "content_type__refresh_trigger" line 73 at execute statement
sentencia SQL: SELECT  content_type__refresh_trigger( $1 )
PL/pgSQL function "content_type__refresh_view" line 105 at perform
sentencia SQL: SELECT  content_type__refresh_view( $1 )
PL/pgSQL function "content_type__drop_attribute" line 42 at perform
CONTEXT:  sentencia SQL: create rule imsld_send_mail_services_r as on insert to imsld_send_mail_servicesi do instead (
                update cr_dummy set val = (
                select content_revision__new(
                                     new.title,
                                     new.description,
                                     now(),
                                     new.mime_type,
                                     new.nls_language,
                                     case when new.text is null 
                                              then new.data 
                                              else new.text
                                           end,
                                     content_symlink__resolve(new.item_id),
                                     new.revision_id,
                                     now(),
                                     new.creation_user, 
                                     new.creation_ip,
                                     new.object_package_id
                ));
                 insert into imsld_send_mail_services ( mail_id, service_id, recipients, is_visible_p, parameters, username_property_id ) values (cr_dummy.val, new.service_id, new.recipients, new.is_visible_p, new.parameters, new.username_property_id); );
PL/pgSQL function "content_type__refresh_trigger" line 73 at execute statement
sentencia SQL: SELECT  content_type__refresh_trigger( $1 )
PL/pgSQL function "content_type__refresh_view" line 105 at perform
sentencia SQL: SELECT  content_type__refresh_view( $1 )
PL/pgSQL function "content_type__drop_attribute" line 42 at perform
CONTEXT:  sentencia SQL: create rule imsld_send_mail_services_r as on insert to imsld_send_mail_servicesi do instead (
                update cr_dummy set val = (
                select content_revision__new(
                                     new.title,
                                     new.description,
                                     now(),
                                     new.mime_type,
                                     new.nls_language,
                                     case when new.text is null 
                                              then new.data 
                                              else new.text
                                           end,
                                     content_symlink__resolve(new.item_id),
                                     new.revision_id,
                                     now(),
                                     new.creation_user, 
                                     new.creation_ip,
                                     new.object_package_id
                ));
                 insert into imsld_send_mail_services ( mail_id, service_id, recipients, is_visible_p, parameters ) values (cr_dummy.val, new.service_id, new.recipients, new.is_visible_p, new.parameters); );
PL/pgSQL function "content_type__refresh_trigger" line 73 at execute statement
sentencia SQL: SELECT  content_type__refresh_trigger( $1 )
PL/pgSQL function "content_type__refresh_view" line 105 at perform
sentencia SQL: SELECT  content_type__refresh_view( $1 )
PL/pgSQL function "content_type__drop_attribute" line 42 at perform
psql:../imsld-level-c-create.sql:47: ERROR:  la relacin t_imsld_rar_seq ya existe
psql:../imsld-level-c-create.sql:49: ERROR:  la relacin imsld_rar_seq ya existe
psql:../imsld-level-c-create.sql:64: ERROR:  la relacin imsld_runtime_activities_rels ya existe

Thanks for reporting the bug Emma.

I don't know yet what's causing it, but apparently the sql upgrade script is executed more than once and that's why the upgrade fails. I'll work on it and I hope to fix it soon.

Regards

Hi again Emma,

I think this bug was related to the previous one you reported about the sql upgrade file name. The code was "duplicated" in the sql upgrade script and in the tcl upgrade script. It is fixed now. Please re-check out the code of the latest release (imsld-1-2-0-final) and it should work ok.

Thanks again,

Jose Pablo

Thanks Jose Pablo, upgrade works fine now :)
Hi,

I've installed imsld on a fresh install and got some problems when uploading a level B LD after creating runs, groups etc:

1) a typo in the context_info query (proc imsld::runtime::activity_structure::show_hide). I fixed it locally:

original query:

db_1row context_info {
select isa.structure_id,
isa.item as structure_item_id
from imsld_runs ir, imsld_componentsi comp, imsld_activity_structuresi isa, imsld_imsldsi ii
where ir.run_id = :run_id
and ir.imsld_id = ii.imsld_id
and ii.item_id = comp.imsld_id
and isa.identifier = :identifier
and isa.component_id = comp.item_id
}

fixed query:

db_1row context_info {
select isa.structure_id,
isa.item_id as structure_item_id
from imsld_runs ir, imsld_componentsi comp, imsld_activity_structuresi isa, imsld_imsldsi ii
where ir.run_id = :run_id
and ir.imsld_id = ii.imsld_id
and ii.item_id = comp.imsld_id
and isa.identifier = :identifier
and isa.component_id = comp.item_id
}

2) a typo in the learning_activity db_foreach (same proc):

Original:

# 2. show the learning activities
db_foreach learning_activity {
select la.item_id as activity_item_id,
la.identifier as la_identifier
from imsld_learning_activitiesi, acs_rels ar
where ar.object_id_one = :structure_item_id
and ar.object_id_two = la.item_id
} {
imsld::runtime::isvisible::show -run_id $run_id -identifier $la_identifier -action $action -user_id $user_id
}

Fixed one:

# 2. show the learning activities
db_foreach learning_activity {
select la.item_id as activity_item_id,
la.identifier as la_identifier
from imsld_learning_activitiesi la, acs_rels ar
where ar.object_id_one = :structure_item_id
and ar.object_id_two = la.item_id
} {
imsld::runtime::isvisible::show -run_id $run_id -identifier $la_identifier -action $action -user_id $user_id
}

But after fixing those 2, hoping my fix is correct, I still got an error:

invalid command name "imsld::runtime::isvisible::show"
while executing
"imsld::runtime::isvisible::show -run_id $run_id -identifier $la_identifier -action $action -user_id $user_id"
("uplevel" body line 2)
invoked from within
"uplevel 1 $code_block "
("1" arm line 1)
invoked from within
"switch $errno {
0 {
# TCL_OK
}
1 {
# TCL_ERROR
..."
("while" body line 20)
invoked from within
"while { [db_getrow $db $selection] } {
incr counter
if { [info exists array_val] } {
unset array_val
..."
("uplevel" body line 5)
invoked from within
"uplevel 1 $code_block "
invoked from within
"db_with_handle -dbn $dbn db {
set selection [db_exec select $db $full_statement_name $sql]

set counter 0
while { [db_getrow $..."
(procedure "db_foreach" line 36)
invoked from within
"db_foreach learning_activity {
select la.item_id as activity_item_id,
la.identifier as la_identifier
from imsld_learning_activ..."
(procedure "imsld::runtime::activity_structure::show_hide" line 32)
invoked from within
"imsld::runtime::activity_structure::show_hide -run_id $run_id -identifier [$refNodes getAttribute "ref"] -action "show""
("activity-structure-ref" arm line 2)
invoked from within
"switch -- [$refNodes localName] {
{class} {
set class [$refNodes getAttribute class ""]
..."
("foreach" body line 2)
invoked from within
"foreach refNodes [$executeNode childNodes] {
switch -- [$refNodes localName] {
{class} {
..."
("show" arm line 2)
invoked from within
"switch -- [$executeNode localName] {
{show} {
foreach refNodes [$executeNode childNodes] {
switch -- [..."
(procedure "imsld::statement::execute" line 8)
invoked from within
"imsld::statement::execute -run_id $run_id -statement [$thenNode childNodes] -user_id $user_id"
(procedure "imsld::condition::execute" line 14)
invoked from within
"imsld::condition::execute -run_id $run_id -condition $condition -user_id $user_id"
(procedure "imsld::condition::execute_all" line 17)
invoked from within
"imsld::condition::execute_all -run_id $run_id -user_id $user_id"
("foreach" body line 2)
invoked from within
"foreach user_id $users_list {
imsld::condition::execute_all -run_id $run_id -user_id $user_id
}"
("uplevel" body line 33)
invoked from within
"uplevel {
ad_page_contract {
Confirm changes and set a run as activeAsign users assigned to an specified group

@author mailto:lfuente@it....";
(procedure "code::tcl::/web/cursos/packages/imsld/www/admin/imsld-confir..." line 2)
invoked from within
"code::tcl::$__adp_stub"
invoked from within
"if { [file exists $__adp_stub.tcl] } {

# ensure that data source preparation procedure exists and is up-to-date
adp_init tcl $__adp_stub
..."
("uplevel" body line 3)
invoked from within
"uplevel {

if { [file exists $__adp_stub.tcl] } {

# ensure that data source preparation procedure exists and is up-to-date
adp_init t..."
(procedure "adp_prepare" line 2)
invoked from within
"adp_prepare "
(procedure "template::adp_parse" line 30)
invoked from within
"template::adp_parse [file root [ad_conn file]] {}"
(procedure "adp_parse_ad_conn_file" line 5)
invoked from within
"$handler"
("uplevel" body line 2)
invoked from within
"uplevel $code"
invoked from within
"ad_try {
$handler
} ad_script_abort val {
# do nothing
}"
invoked from within
"rp_serve_concrete_file [ad_conn file]"
(procedure "rp_serve_abstract_file" line 60)
invoked from within
"rp_serve_abstract_file "$root/$path""
("uplevel" body line 2)
invoked from within
"uplevel $code"
invoked from within
"ad_try {
rp_serve_abstract_file "$root/$path"
set tcl_url2file([ad_conn url]) [ad_conn file]
set tcl_url2path_info..."

Hi Emma,

I really want to thank you for all of your help!

The bug is fixed and commited in head. It was a proc which was not tested by our UoLs, it had some typos and had wrong proc calls. It should work fine now.

I encourage you to keep reporting any bug that you might find (not too many, I hope! ;o)

Regards,

Jose Pablo

Thank you Jose Pablo for fixing this so quickly. I can upload a level-b LD with no error now :).