[LON-CAPA-admin] Perl Script Function "ln" supported?

Stuart Raeburn raeburn at msu.edu
Wed Nov 21 22:11:41 EST 2012


Hi,

>>>>> The perl script function "ln" (not "log" or "log10") seems to be
>>>>> supported by LON-CAPA, but not officially.

The ability to enter an expression such as:

$a = &ln(N);

in a perl script block in LON-CAPA to set the scalar $a to the natural  
log of a number N became available starting in LON-CAPA 2.1 (December  
2005), as a side effect of the introduction of Math::Complex  
availability in safe space (where perl code within a script block in a  
LON-CAPA problem is evaluated).

However, given that the advertised function for natural log both in  
CAPA, and LON-CAPA has always been log(), e.g., see:

https://s10.lite.msu.edu/adm/help/Problem_LON-CAPA_Functions.hlp

it seems that support for ln() was likely an unintended side effect.

>>>>> So, why does it work on some servers?

The perl module Math::Complex which provides access to the ln()  
function in safe space is one of the set of core packages which are  
installed whenever perl is installed on a Linux system.

As it turns out a change made to Math::Complex between versions 1.49  
and 1.51 introduced the use of a separate perl module Config.pm, which  
includes functionality that means it can not be used in safe space.   
Accordingly, Math::Complex can only be used in LON-CAPA's safe space  
where the perl version is 5.10.0 or older.
[perl 5.10.0 uses Math::Complex 1.37; perl 5.10.1 uses Math::Complex 1.56]

For Linux distros on which LON-CAPA is supported this means ln() is  
available for any LON-CAPA release from 2.1.0 to 2.10.1 for:

RHEL 4,5; CentOS 5; Scientific Linux 5; Ubuntu 8.04 LTS; SLES 9,10,11;  
Debian 5;  SuSE 11.1, 11.2; Fedora 9, 10, 11, 12.

but is unavailable for:

RHEL 6, CentOS 6; Scientific Linux 6; Ubuntu 10.04 LTS; Debian 6; SuSE  
11.3, 11.4, 12.1; Fedora 13, 14, 15, 16

For servers in this second group (if running LON-CAPA 2.10.1), a  
system administrator can replace rev. 1.152.2.2 of  
default_homework.lcpm with rev. 1.152.2.3 as follows:

wget -O /home/httpd/html/res/adm/includes/default_homework.lcpm  
'http://source.loncapa.org/cgi-bin/cvsweb.cgi/~checkout~/loncom/homework/default_homework.lcpm?rev=1.152.2.3;content-type=text%2Fplain'

/etc/init.d/httpd reload

After that patch has been applied, CentOS 6, Ubuntu 10.04 LTS etc.  
running 2.10.1 will no longer see the error message about a missing  
subroutine: main::ln, when viewing a resources in which &ln() is used  
in a perl script block.

An alternative to patching default_homework.lcpm is to replace use of  
&ln() with &log() in the perl script block in any resources where this  
issue occurs, and republish each resource. How desirable that is, of  
course, depends on how widespread the use of &ln() has been.

The error seen on the CentOS 5 development server has a different  
origin, which is not seen in production. cvs update of lonxml.pm will  
eliminate that issue.
(see bug 6629 -- http://bugs.loncapa.org/show_bug.cgi?id=6629#c4 for details).


Stuart Raeburn
LON-CAPA Academic Consortium


Quoting Stefan Bisitz <st.bisitz at ostfalia.de>:

> Ok, this needs to work again. I've filed a bug report:
> http://bugs.loncapa.org/show_bug.cgi?id=6629
>
> Stefan Bisitz
>
>
> Am 20.11.2012 15:31 schrieb Lucas, Mark:
>> The particular problem on which this issue occurred is
>>
>> http://capa2.phy.ohiou.edu/res/ohiou/OUp250lib/SHM/dampedspring.problem
>>
>> It has been used in the past without these error messages.
>>
>> On capa2 and capa4 (our two library servers), I don't see any error  
>>  in construction
>> space or in student space.
>>
>> I upgraded most of my access servers to Centos 6 in the summer, but did not
>> mess with my library servers because of time issues. It may be that there is
>> a new perl library with newer releases.
>>
>> Mark
>>
>> On Nov 20, 2012, at 8:51 AM, Stefan Bisitz wrote:
>>
>>> Hi Mark,
>>>
>>> Thanks for your information.
>>>
>>> I just talked to the LON-CAPA administrator of the domain where the
>>> issue occurred "here" for the first time. He confirmed the issue, as CC
>>> and AU. It's an Ubuntu Server with 64 Bit.
>>>
>>> Sorry to ask again: Are you sure you don't get an error message in
>>> Construction Space? We get the error message on the other server and on
>>> our (development) server where the function doesn't work.
>>> ----------------
>>> <problem>
>>> <script type="loncapa/perl">
>>> $a = ln(0.05);
>>> </script>
>>> <startouttext />
>>> a: $a
>>> <endouttext />
>>> </problem>
>>> ----------------
>>>
>>> I need to ask more:
>>> Do you have evidence that these problems using ln() have ever worked on
>>> the machines where the error occurs now?
>>>
>>> From what we found in our debugging session yesterday (nothing...), we
>>> still wonder where and how this function is offered by LON-CAPA anyway.
>>>
>>> I plan to file a bug report - especially if it can be confirmed that the
>>> function should work, used to work and doesn't work anymore.
>>>
>>> Stefan Bisitz
>>>
>>>
>>> Am 19.11.2012 20:51 schrieb Lucas, Mark:
>>>> Stefan,
>>>>
>>>> I was just getting ready to ask about this. We had this pop up   
>>>> just last night.
>>>>
>>>> We had an instructor start getting 'bombs' on a problem that uses ln().
>>>>
>>>> It did not get caught in construction space.
>>>>
>>>> I just checked out a problem and I get the error messages on all   
>>>> our access
>>>> servers when I log in as a student and check out problem, but I   
>>>> don't get the
>>>> message on our library servers when I do the same thing. I also, as stated
>>>> above, do not get the error message in construction space (necessarily in
>>>> construction space).
>>>>
>>>> What is different about perl on the library servers? One of my   
>>>> library servers
>>>> is 64-bit (Centos5.3) and the other is 32-bit (Centos 5.3).
>>>>
>>>> Mark
>>>>
>>>> On Nov 19, 2012, at 12:59 PM, Stefan Bisitz wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> The perl script function "ln" (not "log" or "log10") seems to be
>>>>> supported by LON-CAPA, but not officially. The Script Functions help
>>>>> doesn't list it and it's not a perl function.
>>>>>
>>>>> The issue:
>>>>> Some LON-CAPA servers do not support "ln" and complain "Undefined
>>>>> subroutine &main::ln ..." while others calculate the correct value.
>>>>>
>>>>> So, why does it work on some servers? Should it work on all? If so, why
>>>>> isn't it currently?
>>>>>
>>>>> Any hints?
>>>>>
>>>>> Thanks,
>>>>> Stefan Bisitz
>>>>> _______________________________________________





More information about the LON-CAPA-admin mailing list