Annotation of doc/gutshtml/SessionTw1.html, revision 1.1
1.1 ! www 1: <html>
<head>
<meta name=Title content="Session Two: Spreadsheet and Messaging (Matthew)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<link rel=Edit-Time-Data href="Session%20Tw1_files/editdata.mso">
<title>Session Two: Spreadsheet and Messaging (Matthew)</title>
<style><!--
.MsoHeading7
{font-size:16.0pt;
font-family:"Times New Roman";
color:black;}
.MsoHeader
{tab-stops:center 3.0in right 6.0in;
font-size:10.0pt;
font-family:"Times New Roman";}
.MsoBodyText
{line-height:24.0pt;
font-size:12.0pt;
font-family:"Times New Roman";
layout-grid-mode:line;}
.MsoBodyText2
{font-size:10.0pt;
font-family:"Times New Roman";
color:black;}
.Section1
{page:Section1;}
.Section2
{page:Section2;}
-->
</style>
</head>
<body bgcolor=#FFFFFF link=blue vlink=purple class="Normal" lang=EN-US>
<div class=Section1>
<h2>Session Two: Spreadsheet and Messaging (Matthew)</h2>
<h3><a name="_Toc421867092">Spreadsheets</a></h3>
<p class=MsoBodyText2>The spreadsheet presents data on student performance on
homework problems. Spreadsheets are handled by loncom/interface/lonspreadsheet.pm
and are completely web based. A person who has selected a student role will
access the spreadsheets using the [GRDS] button. A course coordinator is given
access via the [SPRS] button. Students are not able to see data on anyone's
performance but their own. Students are also not allowed to save spreadsheets.
</p>
<h3><a name="_Toc421867093">Spreadsheet Structure and Hierarchy</a></h3>
<p><span style='color:black'>The spreadsheets are laid out in the typical fashion,
with some limitations. There can only be 52 columns, addressed [A-Za-z]. There
may be any number of rows, but currently there do not exist facilities to
add rows other than those automatically generated. </span></p>
<p><span style='color:black'>There are three levels of spreadsheets, as illustrated
in <b>Fig. 2.2.1</b></span><span style='color:
black'>.</span><span style='font-size:16.0pt;color:black'> <img width=432 height=278
src="Session%20Tw1_files/image003.png" v:shapes="_x0000_i1025"> </span></p>
<p class=MsoHeading7><b>Fig. 2.1.1</b><span style='font-weight:normal'> Ð Spreadsheet
Hierarchy </span></p>
<p><span style='color:black'>The rightmost spreadsheets are the assessment spreadsheets.
The middle spreadsheets are the student spreadsheets. The left spreadsheet
is the course spreadsheet. </span></p>
<h3><a name="_Toc421867094">Export Rows</a></h3>
<p><span style='color:black'>The hierarchy of spreadsheets described above allows
data from the lower level spreadsheets (assessment and student) to be exported
up to the higher level spreadsheets (student and course, respectively). Row
0 is the export row. Only the cells A0-Z0 are exported. Cells a0-z0 are not
exported and can be used as 'scratch' space for the results exported in A0-Z0.
</span></p>
<p><span style='color:black'>The export rows in the image are shown shaded in
figure 2.2.1. Where the exported rows appear in the student and course spreadsheets
is indicated by arrows. </span></p>
<h3><a name="_Toc421867095">Assessment Spreadsheet</a></h3>
<p><span style='color:black'>The assessment spreadsheet gives data on the students
performance on a specific resource in LON-CAPA (typically a *.problem resource).
Parameters such as the due date, the number of tries possible, the number
of attempts made, the correctness of the student solution, and any <parameter>
tags inserted in the resource will be shown. <b>Fig. 2.2.2</b></span><span style='color:black'>
shows an example of an assessment spreadsheet.</span></p>
<p> <img width=432 height=290
src="Session%20Tw1_files/image005.jpg" v:shapes="_x0000_i1026"> </p>
<p><span style='font-size:14.0pt'><b>Fig. 2.2.2</b></span><span
style='font-size:14.0pt'> Ð Example Spreadsheet on Assessment Level</span></p>
<h3><a name="_Toc421867096">Student Spreadsheet</a></h3>
<p class=MsoBodyText2>Each assessment spreadsheet exports a row into the student
spreadsheet. Fig 2.2.3 shows an example student spreadsheet. The student spreadsheet
exports a row to the course spreadsheet. </p>
<p class=MsoHeader><b>Fig. 2.2.3</b><span
style='font-weight:normal'> shows the next level up spreadsheet with the exported
data from this sheet.</span></p>
<p class=MsoHeader> <img width=431 height=240
src="Session%20Tw1_files/image007.jpg" v:shapes="_x0000_i1027"> </p>
<p class=MsoHeader><span style='font-size:14.0pt'><b>Fig. 2.2.3</b></span><span style='font-size:14.0pt'>
Ð Default Spreadsheet on Student Level</span></p>
<h3><a name="_Toc421867097">Course Spreadsheet</a></h3>
<p>The course spreadsheet gives a summary of each students performance in the
course as a whole. <b>Fig 2.2.4</b><span style='font-weight:
normal'> shows the default course spreadsheet. </span></p>
<p class=MsoHeader> <img width=432 height=143
src="Session%20Tw1_files/image009.jpg" v:shapes="_x0000_i1028"> </p>
<p class=MsoHeader><span style='font-size:14.0pt'><b>Fig. 2.2.4</b></span><span style='font-size:14.0pt'>
Ð Default Spreadsheet on Course Level</span></p>
<h3><a name="_Toc421867098">Spreadsheet definition</a></h3>
<p class=MsoBodyText2>The default spreadsheets are defined via xml. <b>Fig.
2.2.5</b><span style='font-weight:normal'> shows a sample definition of a
spreadsheet. However, it is possible to work with spreadsheets and never edit
the xml for the spreadsheet itself. By modifying the contents of cells via
the web interface and saving the results, instructors can create as complicated
a spreadsheet as they like. It is now possible for users to upload spreadsheets
to the library server, publish them, and set them as the default sheets for
their course. </span></p>
<div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'>[www@zaphod www]$ cat /home/httpd/html/res/adm/includes/default.assesscalc</span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=A row=0>[stores_0_solved]</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=B row=0>'Tries:'</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=C row=0>[stores_0_tries]</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=D row=0>'Timestamp:'</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=E row=0>[timestamp]</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=F row=0>'Duedate:'</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=G row=0>[parameter_0_duedate]</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=W row=0>'Available Points:'</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=X row=0>[parameter_0_weight]</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=Y row=0>'Awarded Points:'</field></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
8.0pt;font-family:"Courier New"'><field col=Z row=0>[parameter_0_weight]*[stores_0_awarded]</field></span></p>
</div>
<p class=MsoHeader><span style='font-size:14.0pt'><b>Fig. 2.2.5</b></span><span style='font-size:14.0pt'>
Ð Default Spreadsheet on Assessment Level</span></p>
<h3><a name="_Toc421867099">Template Row</a></h3>
<p class=MsoBodyText2>The template row of a spreadsheets will make the contents
of a given column identical for each row. The contents of the template row
are shown verbatim, and not evaluated. Fig 2.2.6 shows the template row in
use. </p>
<p class=MsoHeader> <img width=432 height=215
src="Session%20Tw1_files/image011.jpg" v:shapes="_x0000_i1029"> </p>
<p class=MsoHeader><span style='font-size:14.0pt'><b>Fig. 2.2.7</b></span><span style='font-size:14.0pt'>
Ð Customized Spreadsheet on Student Level</span><b> </b><span style='font-size:8.0pt;font-weight:normal'>Shows
a course-customized student-level spreadsheet with many of these functions,
templates and wildcards in action. In the dialog window, </span><span
style='font-size:8.0pt;font-family:"Courier New"'>&SUM(Òd*Ó)</span><span
style='font-size:8.0pt'> is entered as the expression for cell H0, which will
add up all cells in column d. The template row is used to define expressions
for columns a, b, c, and d, where for b and d both the Ô#Õ wildcard and access
to the EXT function is used in order to multiply the respective X and Z cells
in each row with 1 or 0 depending on whether the value in G (the duedate)
is smaller or larger than the system time (Ò?Ó is the standard Perl choice
operator).</span></p>
<h3><a name="_Toc421867100">What goes in a cell</a></h3>
<p class=MsoBodyText2>A cell contains either parameter data (which cannot be
changed) or perl code. Additionally, cells can contain references to other
cells and these references can be passed as parameters to perl functions.
Parameters can be accessed via the cell they are stored in or by the parameter
name. </p>
<h3><a name="_Toc421867101">Parameter Access</a></h3>
<p class=MsoBodyText2>Parameters can be accessed by enclosing the parameter
name in square brackets. A new feature allows the accessing of parameters
by enclosing only enough information to lead to a unique parameter. "[part_0_duedate]"
will give the same value as "[duedate]" if there are no other parameters
which contain the string "duedate". </p>
<h3><a name="_Toc421867102">Addressing other cells</a></h3>
<p><span style='color:black'>Cells are specified by the letter-number combination
of their position in the table, for example "A5". There are also
wildcards '*' and '#' which are used in ranges and templates, respectively,
and symbolic names. </span></p>
<p><span style='color:black'>Valid ranges are for example "A5..C7"
which is the square between cells A5 to C7, as in A5, A6, A7, B5, etc. Also,
wildcards can be used, as in "A*" for column A, or "*5"
for row 5. For example, &SUM("d*") will add up all cells in
column d. The table below gives a brief summary of the range options. </span></p>
<p><span style='color:black'>*
all rows, all columns</span></p>
<p><span style='color:black'>B* all rows
in column B</span></p>
<p><span style='color:black'>*5 all
columns in row 5</span></p>
<p><span style='color:black'>C5..F25
all cells in the rectangle between C5 and F25</span></p>
<p>The template row allows the use of "A#", which will result in "A5"
in row 5, "A6" in row 6, etc.<span
style='font-size:16.0pt'> </span></p>
<p><b>Spreadsheet Functions </b></p>
<p class=MsoHeader><span style='color:black'>Many perl functions are available
in the spreadsheet (see "The Safe Environment" below). Additionally,
some spreadsheet specific functions have been defined as well. A complete
list is available by executing 'perldoc loncapa/loncom/interface/lonspreadsheet.pm'
on the command line. An abbreviated table appears in Fig. 2.2.7.</span></p>
<div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&NUM(<i>range</i></span><span style='font-size:11.0pt'>) Ð number
of non-empty cells in <i>range</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&BIN(<i>low, high, range</i></span><span style='font-size:11.0pt'>)
Ð number of non-empty cells in <i>range</i></span><span style='font-size:11.0pt'>
with values between <i>low</i></span><span style='font-size:11.0pt'> and
<i>high</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&SUM(<i>range</i></span><span style='font-size:11.0pt'>) Ð sum of
the non-empty cells in <i>range</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&MEAN(<i>range</i></span><span style='font-size:11.0pt'>) Ð mean value
of non-empty cells in <i>range</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&STDDEV(<i>range</i></span><span style='font-size:11.0pt'>) Ð standard
deviation of non-empty cells in <i>range</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&PROD(<i>range</i></span><span style='font-size:11.0pt'>) Ð product
of non-empty cells in <i>range</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&MAX(<i>range</i></span><span style='font-size:11.0pt'>) Ð maximum
value of non-empty cell in <i>range</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&MIN(<i>range</i></span><span style='font-size:11.0pt'>) Ð minimum
value of non-empty cells in <i>range</i></span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&SUMMAX(<i>n ,range</i></span><span style='font-size:11.0pt'>) Ð sum
of the maximum <i>n</i></span><span style='font-size:11.0pt'> non-empty
cells in range</span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&SUMMIN(<i>n, range</i></span><span style='font-size:11.0pt'>) Ð sum
of the minimum <i>n</i></span><span style='font-size:11.0pt'> non-empty
cells in range</span></p>
<p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
11.0pt'>&EXT(<i>expression</i></span><span style='font-size:11.0pt'>) Ð access
to EXT function in </span><span style='font-size:11.0pt;font-family:
"Courier New"'>lonnet</span></p>
</div>
<p class=MsoHeader><span style='font-size:14.0pt'><b>Fig. 2.2.7</b></span><span style='font-size:14.0pt'>
Ð Available Functions in Spreadsheet</span></p>
<h3><a name="_Toc421867103">The Safe Environment</a></h3>
<p><span style='color:black'>The spreadsheet cells are evaluated in a "Safe"
environment. The module Safe.pm is included in the standard systemperl RPM
put out by the LON-CAPA developers, but is written by Tim Bunce and Malcolm
Beattie. If you execute 'perldoc Safe' you can read the documentation for
the module. </span></p>
<p><span style='color:black'>The Safe.pm module allows users to "compile
and execute code in restricted compartments". We use this to allow users
to implement in their spreadsheets a restricted set of perl functions, variables,
and operators. No one using the spreadsheet should ever need access to the
basic IO functions of Perl, for example, so these are not made available to
the users. </span></p>
<p><span style='color:black'>Each cell is evaluated within the same safe space,
so cells can actually contain function and declarations. </span></p>
<p><span style='color:black'>There is information the user may need which is
not contained in the cells of the spreadsheet. So we poke a hole in the safe
space using the Safe::Hole module. This lets us allow access to external information.
Obviously this needs to be done with some degree of caution. </span></p>
<p><span style='color:black'>At the beginning of lonspreadsheet.pm we have the
following code: </span></p>
<p><span style='font-family:"Courier New";color:black'>use Safe;</span></p>
<p><span style='font-family:"Courier New";color:black'>use Safe::Hole;</span></p>
<p><span style='color:black'>The function &initsheet, which is called when
a spreadsheet is created or modified, defines the safe space for the execution
of spreadsheet code: </span></p>
<p><span style='font-family:"Courier New";color:black'>sub initsheet {</span></p>
<p><span style='font-family:"Courier New";color:black'> my
$safeeval = new Safe(shift);</span></p>
<p><span style='font-family:"Courier New";color:black'> my
$safehole = new Safe::Hole;</span></p>
<p><span style='font-family:"Courier New";color:black'> $safeeval->permit("entereval");</span></p>
<p><span style='font-family:"Courier New";color:black'> $safeeval->permit(":base_math");</span></p>
<p><span style='font-family:"Courier New";color:black'> $safeeval->permit("sort");</span></p>
<p><span style='font-family:"Courier New";color:black'> $safeeval->deny(":base_io");</span></p>
<p><span style='font-family:"Courier New";color:black'> $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT');</span></p>
<p><span style='font-family:"Courier New";color:black'> my
$code=<<'ENDDEFS';</span></p>
<p><span style='font-family:"Courier New";color:black'>.</span></p>
<p><span style='font-family:"Courier New";color:black'><i>functions and variables
needed in the safe space are defined here</i></span></p>
<p><span style='font-family:"Courier New";color:black'>.</span></p>
<p><span style='font-family:"Courier New";color:black'>ENDDEFS</span></p>
<p><span style='font-family:"Courier New";color:black'> $safeeval->reval($code);</span></p>
<p><span style='font-family:"Courier New";color:black'> return
$safeeval;</span></p>
<p><span style='font-family:"Courier New";color:black'>}</span></p>
<h3><a name="_Toc421867104">Change is coming</a></h3>
<p><span style='color:black'>Currently the spreadsheet is scheduled to undergo
major revisions by the end of the summer. The goal of these revisions is to
increase the speed and add some requested functionality. We hope to add: </span></p>
<p><span style='color:black'>*
Improved exporting of the spreadsheet date to client side spreadsheets </span></p>
<p><span style='color:black'>*
Exporting of spreadsheet xml - allowing users to save spreadsheets from their
classes for reuse. </span></p>
<p><span style='color:black'>*
Additional spreadsheet functions.</span></p>
<h3> </h3>
<h3><a name="_Toc421867105">Discussion</a></h3>
<p><span style='color:black'>loncapa/loncom/interface/lonfeedback.pm handles
feedback on resources. Feedback can be for course discussion of a resource
or to communicate with the author of the resource. In the latter case, a screenshot
of the resource and (if applicable) the students previous attempts to solve
the problem. </span></p>
<p><span style='color:black'>Course discussion messages appear at the bottom
of the resource being discussed. There are two types of attribution in course
discussion messages. Users may choose to have their LON-CAPA id shown to everyone
or they may have it shown only to instructors. Complete anonymity is not an
option. If the users choose to hide their LON-CAPA id (an 'anonymous' message),
they can set the name given in the [PREF] page. </span></p>
<p><span style='color:black'><b>Figures 2.2.8</b></span><span
style='color:black'> through <b>2.2.10</b></span><span style='color:black'> show
a course discussion feedback cycle. </span></p>
<p><span style='color:black'> <img width=256 height=63
src="Session%20Tw1_files/image013.jpg" v:shapes="_x0000_i1030"> </span></p>
<p><span style='color:black'><b>Fig 2.2.8</b></span><span
style='color:black'> - A Simple Resource</span></p>
<p><span style='color:black'> <img width=301 height=240
src="Session%20Tw1_files/image015.jpg" v:shapes="_x0000_i1031"> </span></p>
<p><span style='color:black'><b>Fig. 2.2.9</b></span><span
style='color:black'> Composing Discussion Feedback </span></p>
<p><span style='color:black'> <img width=292 height=170
src="Session%20Tw1_files/image017.jpg" v:shapes="_x0000_i1032"> </span></p>
<p><span style='color:black'><b>Fig 2.2.10</b></span><span
style='color:black'> The Resource with Anonymous and Non-anonymous Discussion</span></p>
<h3><a name="_Toc421867106">Messaging</a></h3>
</div>
<h1><span style='font-size:10.0pt;font-family:"Courier New";font-weight:normal'> </span></h1>
<p><span style='color:black'>loncapa/loncom/interface/lonmsg.pm provides functions
for sending users messages. All messaging is currently done via lonmsg.pm. The
following subroutines handle the sending of various types of messages: </span></p>
<p><span style='font-family:"Courier New";color:black'>author_res_msg </span></p>
<p><span style='color:black'>Send a message to the author of a resource. </span></p>
<p><span style='font-family:"Courier New";color:black'>user_crit_msg </span></p>
<p><span style='color:black'>Send a critical message to a user. Critical messages
require the user to acknowledge receipt before any other action in LON-CAPA
can be taken. </span></p>
<p><span style='font-family:"Courier New";color:black'>user_crit_received </span></p>
<p><span style='color:black'>Notify the sender of a critical message that the
message has been received. </span></p>
<p><span style='font-family:"Courier New";color:black'>user_normal_msg </span></p>
<p><span style='color:black'>Send a non-critical message to a user. </span></p>
<p><span style='font-family:"Courier New";color:black'>statuschange </span></p>
<p><span style='color:black'>Change the status of a message (read, replied, forwarded,
etc) </span></p>
<p><span style='color:black'>The lonmsg::handler takes care of the display and
sending of messages. If you have the time, communicate with yourself! Note:
Critical messages are displayed on login to LON-CAPA. Some message types are
only available for course coordinators. </span></p>
<h3><span style='color:black'> </span></h3>
<h3><a name="_Toc421867107">Resource Feedback</a></h3>
<p><img border=0 width=432 height=304 id="_x0000_i1028"
src="handout_files/image004.jpg"></p>
<p class=MsoHeader><span style='font-size:14.0pt'><b>Fig. 2.2.11</b></span><span style='font-size:14.0pt'>
Ð Example of a Feedback</span></p>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>