File:  [LON-CAPA] / loncom / homework / mathresponse.idea
Revision 1.2: download - view: text, annotated - select for diffs
Tue Dec 5 15:20:22 2006 UTC (17 years, 3 months ago) by www
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_99_1, version_2_2_99_0, version_2_12_X, version_2_11_X, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, bz6209-base, bz6209, bz5969, bz2851, PRINT_INCOMPLETE_base, PRINT_INCOMPLETE, HEAD, GCI_3, GCI_2, GCI_1, BZ5971-printing-apage, BZ5434-fox, BZ4492-merge, BZ4492-feature_horizontal_radioresponse, BZ4492-feature_Support_horizontal_radioresponse, BZ4492-Support_horizontal_radioresponse
Gesundheit ... might as well add this.

<problem>

<script type="loncapa/perl">
$a1 = random(-5,5,2);
$a2 = random(-5,5,2);
$n1 = random(1,10,1);
$n2 = random(1,10,1);
$function = "$a1*cos($n1*x)+$a2*sin($n2*x)";
@cas_list = ($function);
</script>

<startouttext />
Give an example of a function which is
(1) orthogonal to <algebra>$function</algebra> with respect to the
scalar product
<m>$$\langle g \mid h \rangle =
\frac{1}{\pi} \int_{-\pi}^{\pi} g(x) \cdot h(x)$$</m>
and
(2) whose norm is 1.
<endouttext />

<mathresponse cas="maxima" args="@cas_list">
   <answer>
     f(x):= LONCAPALIST[1];
     overlap: integrate(f(x)*RESPONSE[1],x,-%pi,%pi)/%pi;
     norm: integrate(RESPONSE[1]*RESPONSE[1],x,-%pi,%pi)/%pi;
     grade: is(overlap=0 and norm=1);
     [grade];
   </answer>

   <textline />

   <hintgroup showoncorrect="no">
     <mathhint cas="maxima" args="@cas_list" name="ortho">
       <answer>
         f(x):= LONCAPALIST[1];
         overlap: integrate(f(x)*RESPONSE[1],x,-%pi,%pi)/%pi;
	 [is(overlap != 0)];
       </answer>
     </mathhint>
     <mathhint cas="maxima" args="@cas_list" name="norm">
       <answer>
         f(x):= LONCAPALIST[1];
         norm: integrate(RESPONSE[1]*RESPONSE[1],x,-%pi,%pi)/%pi;
         [is(norm != 1)];
       </answer>
     </mathhint>


     <hintpart on="norm">
       <script type="loncapa/perl">
         $response = &EXT('user.resource.resource.0.submissiom');
	 $norm = &cas('maxima',...); # get the norm
	 $norm_display = &cas_tex_display($norm);
       </script>
       <startouttext />
         The function you have provided is not normal to
         <algebra>$function</algebra> its norm is
          <m eval="on">$norm_display</m>
       <endouttext />
     </hintpart>
     <hintpart on="ortho">
       <startouttext />
         The function you have provided is not orthognal.
       <endouttext />
     </hintpart>

   </hintgroup>
</mathresponse>

</problem>


* Maxima hat keinen echten Servermode.

Das Programm

/loncapa/loncom/lonmaxima

erzeugt fuenf Serverprozesse, die jeweils einen Maxima-Prozess am Laufen halten:

www       8506  0.0  0.5  8880 5324 ?        S    Dec04   0:00 lonmaxima: Parent process, sleeping Mon Dec  4 09:53:10 2006
www       8507  0.0  0.5  9012 5380 ?        S    Dec04   0:00 lonmaxima: Accepting connections Mon Dec  4 10:23:24 2006
www       8508  0.0  2.3 885900 24276 pts/2  S    Dec04   0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www       8510  0.0  0.5  9012 5380 ?        S    Dec04   0:00 lonmaxima: Accepting connections Mon Dec  4 10:23:24 2006
www       8512  0.0  0.5  9012 5380 ?        S    Dec04   0:00 lonmaxima: Accepting connections Mon Dec  4 10:23:30 2006
www       8513  0.0  2.3 885900 24308 pts/4  S    Dec04   0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www       8515  0.0  2.3 885900 24040 pts/5  S    Dec04   0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www       8621  0.0  0.5  9012 5380 ?        S    Dec04   0:00 lonmaxima: Accepting connections Mon Dec  4 10:23:30 2006
www       8622  0.0  2.3 885900 24312 pts/3  S    Dec04   0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www       8648  0.0  0.5  9012 5380 ?        S    Dec04   0:00 lonmaxima: Accepting connections Mon Dec  4 10:23:19 2006
www       8649  0.0  2.2 885900 22952 pts/6  S    Dec04   0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options

Dieser Daemon muss laufen, damit LON-CAPA mit Maxima reden kann.

Die Routinen, die dazu benutzt werden sollen, sind in

/loncapa/loncom/homework/lonmaxima.pm

* XML-Umgebung: wir haben zwei Perl-Umgebungen, wenn wir XML-Dateien abarbeiten, naemlich
  - die Apache-Module-Umgebung: volle Privilegien
  - die "Safeeval"-Umgebung: die interne Umgebung des Dokuments, in der zum Beispiel die <script>-Bloecke laufen. In dieser Umgebung existieren die Variablen des Problems.
    Eingeschraenkte Opcodes (no I/O), kein direkter Zugriff auf die Apache-Umgebungen ausser mit "Safe Holes", z.B.,
    $safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check');

caparesponse.pm, response.pm, lonmaxima.pm, etc, laufen in der Apache-Umgebung
default_homework.lcpm laueft in der Safeeval-Umgebung

* formularesponse: Erweiterung der "einfachen" Responsetypes: numerical, string, etc. Das haben wir vom alten CAPA-System geerbt und ist deshalb in

/loncapa/loncom/homework/caparesponse/caparesponse.pm

Alle einfachen Responses gehen in &check_submission(), wo dann sortiert wird, wer es bearbeitet. <formularesponse> ohne Samples soll von Maxima bearbeitet werden (auskommentiert in Production-Version). Ausgefuehrt wird das dann in

/loncapa/loncom/xml/run.pm

das den Uebergang in die Safeeval-Umgebung macht. In der Safeeval-Umgebung kuemmert sich

/loncapa/loncom/homework/default_homework.lcpm

in der Routine &caparesponse_check()

    if ($type eq '9') {
      $result = &maxima_check(&maxima_cas_formula_fix($response),&maxima_cas_formula_fix($answer),\$reterror);
    } else {
        if ($type eq '8') { # fml type
    ...

* <mathresponse>: neuer Antwork-Typ, aehnlich wie <customresponse>. Das Design ist beschrieben in

/loncapa/loncom/homework/mathresponse.idea

Das Tag ist definiert in

/loncapa/loncom/homework/response.pm

Die Routine

&start_mathresponse()

wird aufgerufen, wenn der Parser auf <mathresponse> trifft. Die Routine

&end_mathresponse()

wird aufgerufen, wenn der Parser auf </mathresponse> trifft. Beide Routinen muessen die verschiedenen Rendering-Targets bedienen:
* web: Darstellung auf dem Web
* tex: Darstellung im Druck
* edit: Darstellung im bunten Editor
* modified: Zurueckschreiben von Aenderungen im Editor (muss normalerweise nicht geaendert werden)
* meta: Katalogdaten  (muss normalerweise nicht geaendert werden)
* answer: Darstellung der richtigen Antwort
* grade: Benotung der Studierendenantwort

Die Routinen &start_answer and &end_answer (<answer> und </answer>) sammeln nur die Scripts ein und werden von <mathresponse> und <customresponse> genutzt.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>