Forum .LRN Q&A: LAMS2 and .LRN integration (beta) released!

G'day dotLRN fellows,

For those of you who might be interested, LAMS2 and .LRN 2.3 are now integrated.

The integration allows .LRN teachers to seamlessly add LAMS lessons to their .LRN courses. These lessons are sequences of Learning Activities that teachers design using the LAMS drag-and-drop authoring environment.

LAMS2 is quite different from its version 1 release, which it was also integrated with .LRN. For more info, hit the LAMS wiki docs.

I have set up a LAMS2 - .LRN 2.3.1 demo server for those of you who might want to give it a spin.

Also, here is a two minute animation on how it all works.

More info, source and tech docs, available in the LAMS2 .LRN wiki page.

Any comments, very much welcome.

Thank you,

Ernie

PD: the Zen theme is very very nice!

Collapse
Posted by Abelardo Pardo on
Ernie. I just saw the LAMS2 integration with .LRN, very nice work. From both the demo site and the animation, it seems a tight integration.

One side question. Does LAMS allow for LD export yet? I seem to recall that you mentioned that back in June in Barcelona.

Great work!

Regards.

Collapse
Posted by Ernie Ghiglione on
Hola Abelardo,

Thanks for your comments.

Does LAMS allow for LD export yet?

Yeah, you can export IMS LD Level A. But as we discussed in Barcelona, we might not be able to apply it to other IMS LD player... as the service layer of IMS LD ain't quite there yet.

Thanks again,

Ernie

Ernie, great work!

What would be interesting is to see the edition capabilities of LAMS integrated to the LMS (for instance .LRN), instead of replicating some LMS capabilities inside LAMS. Any plans on this?
At this points seems that LAMS is quite strong as course builder but is not fully integrated with the LMS.

Collapse
Posted by Ernie Ghiglione on
Hi Roc,

What would be interesting is to see the edition capabilities of LAMS integrated to the LMS (for instance
.LRN), instead of replicating some LMS capabilities inside LAMS. Any plans on this?

Yes and no.

On the yes part, we have the concept of Tool Adapters that would allow LMS tools to be added to LAMS as if they would be native LAMS tools/activities. So you would be able to drag-and-drop them and create sequences just like you do normally in the LAMS Authoring environment.

These Tool Adapters work as a, well, an adapter 😉 between the external tool and LAMS Core following the LAMS Tool's Contract*, which is basically the protocol (in a way) that LAMS tools 'talk' to the core.

Now the no bit, it's because we haven't been able to work on these adapters. At all yet.

The adapters would require work in both ends... a tool wrapper in .LRN side and a bunch of REST like interfaces on the LAMS end.

I'll keep you updated with these in the next few months.

Also, if you need this today, there's an easy hack where you can use the LAMS' Shared Resources tool and add the URL for your .LRN activity to it. So when the students hit the LAMS Shared Resources tool, the .LRN URL gets displayed directly. But again, this is not quite the drag-and-drop experience.

Hope that helps

Thanks,

Ernie

* Here's a presentation on how the LAMS Tool Contract works.

Thanks for the answer Ernie. Looking forward to see this working, do you have a timeframe to have at least the LAMS side working?
Collapse
Posted by Ernie Ghiglione on
do you have a timeframe to have at least the LAMS side
working?

I'm hoping will see some of this in the next four months. If things go according to plan.

It will happen, we just need to fit lots of other priorities as well 😊

Interesting to see your priorities. I see that you are doing progress, and advancing through the time. Also the website is quite well organized and easy to find answers to the visitors needs (http://www.lamsinternational.com/). Very market / customer oriented.
Collapse
Posted by Rob Mayhue on
Hi Ernie,

I have installed LAMS on a separate server and installed the dotlrn LAMS packages in a new dotlrn 2.3.1 install and configured the parmaters. After adding the LAMS Integration into a class the folder list shows up fine and I can create a lesson using the author and save it but when I try to add a saved LAMS lesson from the folder list I get the following error from dotlrn:

error "no element found" at line 1 character 0
while executing
"dom parse $xml"
invoked from within
"set doc [dom parse $xml]"
("uplevel" body line 46)
invoked from within
"uplevel {
# packages/lams2int/www/admin/add-2.tcl

ad_page_contract {

Creates a new instance of LAMS sequence and adds a new lesson to a cour..."
(procedure "code::tcl::/var/lib/aolserver/service0a/packages/lams2int/ww..." 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"
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..."

I added 'ns_log notice $xml' to add-2.tcl and it seems that the $xml variable is an empty string.

Any ideas?

Thank you.

Collapse
Posted by Ernie Ghiglione on
Hi Rob,

I have added this to our bug tracker. Currently I'm on the road, but we'll be back in the office next week. I'll post more here as I get to this.

Thanks,

Ernie

Collapse
Posted by Ernie Ghiglione on
Hi Rob,

I've been trying to reproduce this error, but haven't been able to do so.

Is this error showing consistently? Does it occur with only one sequence or with any that you choose?

Thanks,

Ernie

Collapse
Posted by Rob Mayhue on
Hi Ernie,

Sorry it took so long to get back to you. Thanks for looking into this.

I installed the dotlrn LAMS packages into a new dotLRN 2.3.0 install and got the same error that I got in the dotLRN 2.3.1 install. The $xml variable is an empty string.

I added some ns_log statements to add.tcl & add-2.tcl to help debug things. The call to [ad_httpget -url $lesson_url -timeout 30] in add-2.tcl is returning "page {} status 505 modified {}". Any idea way this might be happening?

Here is the slightly modified $lesson_url being passed into ad_httpget "http://xxx.xxx.xxx.xxx:8080/lams/services/xml/LessonManager?method=start↦serverId=dotlrn&ldId=26↦datetime=October+02%2c2007+01%3a32+PM↦hashValue=9b0713f421a8c5f691349eb5f46c6f4ec809ce11↦username=567↦courseId=2346↦title=SHFR-DEVEL TEST↦desc=Test LAMS course.↦country=AU↦lang=en"

The LAMS2 server was installed into a CentOS 4.5 server using the instructions on the LAMS site. The LAMS2 server seems to work fine on its own so I think its running properly.

Thanks,

Rob

Collapse
Posted by Ernie Ghiglione on
Hi Rob,

I've never seen a 505 error before. What version of LAMS are you running?

Would you be able to check the LAMS logs for errors as well?

See in the jboss-4.0.2/server/default/log folder the following files:

access_log
server.log

Thanks,

ernie

Collapse
Posted by Rob Mayhue on
Hi Ernie,

I'm running LAMS 2.0.4 and I couldn't find any 505 errors in any of the jboss or LAMS logs.

I did manage to solve the issue though.

I started looking at the $lession_url in add-2.tcl and noticed that '&title=$name' and '&desc=$introduction' were not being URL encoded so in the 'set lession_url "$lams_server_url/...' statment I added a 'ad_urlencode' to URL encode the vars '...&title=[ad_urlencode $name]&desc=[ad_urlencode $introduction]...' then everything worked as expected. I guess the spaces in the text of the URL was causing the 505 error.

Thanks,
Rob

Collapse
Posted by Ernie Ghiglione on
Hi Rob,

Thanks for your help on this. I'm glad that is solved.

I have made the changes to the code as you suggested and ´resolved the issue.

The latest code can be downloaded from the LAMS repository.

Thanks again Rob.

Any other comments, bugs or suggestions always welcome.

Ernie

Collapse
Posted by Chris Venghaus on
Hi there, Ernie,

I'm having a major issue with the LAMS2 .LRN integration. All the problems /seem/ to be correlated to a strange glitch we noticed while adding classes.

Here are our observations:

1. When in the Class admin, after clicking "Add a new LAMS lesson", no matter which class you are editing, it will always go to the administration for the very first class that the LAMS integration was added to.

2. Once a LAMS class is added, that class can be seen on every .LRN class with the LAMS integration enabled, and they all read the same class subject (From the first integration).

3. Some users (We're not sure of the correlation yet) are unable to access any of the LAMS courses, and get an error reading "You don't have permission to read .LRN LAMS2.x Integration"

4. Some other users will also make it all the way into LAMS, but the LAMS window will eventually timeout and display an error message saying "HTTP Status 502 - Login Failed - failed to fetch user info from the third party server"

For the record, I'm using the LAMS 2.0.4 on .LRN 2.3.0.

If you could offer any advice on what might be causing this, any help would be appreciated.
Collapse
Posted by Ernie Ghiglione on
Hi Chris,

Yes, this is definitely an ugly bug. I had a look at this today and it looks very puzzling.

It seems to be that whenever I try to get a package_id for the lams2int-admin-portlet, I'm always getting the same package_id (not the correspondent package_id for the .LRN LAMS2 Integration instance installed under the class/community).

So whenever you add a new lesson, it _always_ shows as being part of the same instance.

Similar thing happens with the lams2int-portlet.. it always picks up the same package_id.

Quite confusing, really.

I'll investigate a bit this further and get back to you.

Ernie

Collapse
Posted by Dave Bauer on
lams2int pacakge is defined as a singleton.

This is causing it to re-mount an existing instance under each community instead of creating a new package instance for each community.

Collapse
Posted by Dave Bauer on
I confirmed changing the info file and then this query

update apm_package_types set singleton_p='f' where package_key='lams2int';

will fix the singleton_p setting.

I then restarted AOLserver then added the lams2int applet to a new community. It was added with a unique package_id.

Collapse
Posted by Ernie Ghiglione on
Hi Dave,

Thanks very much for that. Indeed that solves the problem for me here!

Chris, can you confirm this is working for you now?

Changes have been committed to CVS and the new packages are available from the Australian and UK mirrors.

Once again, all kudos to Dave for the fix.

Ernie

Collapse
Posted by Chris Venghaus on
Ernie,

Dave worked on the fix for us, so I can certainly say that everything seems to be working on this end.

Once again, thank you, Dave, for the excellent work!
Collapse
Posted by Jose Vega on
Hello,
I'm having this error trying to add a lams lesson:
error "mismatched tag" at line 1 character 1054
" Web/2.1.3.GA</h3><--Error-- ></html>"
    while executing
"dom parse $xml"
    ("uplevel" body line 57)
    invoked from within
"uplevel {
# packages/lams2int/www/admin/add.tcl

ad_page_contract { Adds a LAMS lesson @author Ernie Ghiglione (mailto:ErnieG@melcoe.mq.edu..."; (procedure "code::tcl::/usr/share/dotlrn/packages/lams2int/www/admin/add" line 2) invoked from within "code::tcl::$__adp_stub" ("uplevel" body line 12) 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" invoked from within "template::adp_parse [file root [ad_conn file]] {}" (procedure "adp_parse_ad_conn_file" line 6) 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/[ad_conn extra_url]"" ("uplevel" body line 2) invoked from within "uplevel $code" invoked from within "ad_try { rp_serve_abstract_file "$root/[ad_conn extra_url]" set tcl_url2file([ad_conn url]) [ad_conn file] set tcl..."

The XML response page is "HTTP Status 400 - can not retrieve user information"

You have any idea on what's happening?
Thanks.

Collapse
Posted by Gustaf Neumann on
Dear Jose, we do not use the lams package, but it might be the case, that the interfaces in lams2 have changed since the original integration. I would recommend to contact Ernie directly.
Collapse
Posted by Jose Vega on
Thank you.