Diff for /doc/gutshtml/SessionTw1.html between versions 1.1 and 1.2

version 1.1, 2002/06/28 20:30:29 version 1.2, 2003/07/22 14:47:00
Line 1 Line 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 &lt;parameter&gt;    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"'>&lt;field col=A row=0&gt;[stores_0_solved]&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=B row=0&gt;'Tries:'&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=C row=0&gt;[stores_0_tries]&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=D row=0&gt;'Timestamp:'&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=E row=0&gt;[timestamp]&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=F row=0&gt;'Duedate:'&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=G row=0&gt;[parameter_0_duedate]&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=W row=0&gt;'Available Points:'&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=X row=0&gt;[parameter_0_weight]&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=Y row=0&gt;'Awarded Points:'&lt;/field&gt;</span></p>    <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size: 8.0pt;font-family:"Courier New"'>&lt;field col=Z row=0&gt;[parameter_0_weight]*[stores_0_awarded]&lt;/field&gt;</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"'>&amp;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. &quot;[part_0_duedate]&quot;    will give the same value as &quot;[duedate]&quot; if there are no other parameters    which contain the string &quot;duedate&quot;. </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 &quot;A5&quot;. 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 &quot;A5..C7&quot;    which is the square between cells A5 to C7, as in A5, A6, A7, B5, etc. Also,    wildcards can be used, as in &quot;A*&quot; for column A, or &quot;*5&quot;    for row 5. For example, &amp;SUM(&quot;d*&quot;) 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'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    all rows, all columns</span></p>  <p><span style='color:black'>B*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all rows    in column B</span></p>  <p><span style='color:black'>*5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all    columns in row 5</span></p>  <p><span style='color:black'>C5..F25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    all cells in the rectangle between C5 and F25</span></p>  <p>The template row allows the use of &quot;A#&quot;, which will result in &quot;A5&quot;    in row 5, &quot;A6&quot; 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 &quot;The Safe Environment&quot; 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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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 &quot;Safe&quot;    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 &quot;compile    and execute code in restricted compartments&quot;. 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 &amp;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'>&nbsp;&nbsp;&nbsp; my    $safeeval = new Safe(shift);</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; my    $safehole = new Safe::Hole;</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;permit(&quot;entereval&quot;);</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;permit(&quot;:base_math&quot;);</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;permit(&quot;sort&quot;);</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;deny(&quot;:base_io&quot;);</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safehole-&gt;wrap(\&amp;Apache::lonnet::EXT,$safeeval,'&amp;EXT');</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; my    $code=&lt;&lt;'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'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;reval($code);</span></p>  <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; 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'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Improved exporting of the spreadsheet date to client side spreadsheets </span></p>  <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Exporting of spreadsheet xml - allowing users to save spreadsheets from their    classes for reuse. </span></p>  <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Additional spreadsheet functions.</span></p>  <h3>&nbsp; </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&nbsp; </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'>&nbsp;</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'>&nbsp;</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>  
   
   <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 &lt;parameter&gt; 
       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"'>&lt;field col=A row=0&gt;[stores_0_solved]&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=B row=0&gt;'Tries:'&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=C row=0&gt;[stores_0_tries]&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=D row=0&gt;'Timestamp:'&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=E row=0&gt;[timestamp]&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=F row=0&gt;'Duedate:'&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=G row=0&gt;[parameter_0_duedate]&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=W row=0&gt;'Available Points:'&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=X row=0&gt;[parameter_0_weight]&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=Y row=0&gt;'Awarded Points:'&lt;/field&gt;</span></p>
       <p class=MsoHeader style='border:none;padding:0in;'><span style='font-size:
   8.0pt;font-family:"Courier New"'>&lt;field col=Z row=0&gt;[parameter_0_weight]*[stores_0_awarded]&lt;/field&gt;</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"'>&amp;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. &quot;[part_0_duedate]&quot; 
       will give the same value as &quot;[duedate]&quot; if there are no other parameters 
       which contain the string &quot;duedate&quot;. </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 &quot;A5&quot;. 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 &quot;A5..C7&quot; 
       which is the square between cells A5 to C7, as in A5, A6, A7, B5, etc. Also, 
       wildcards can be used, as in &quot;A*&quot; for column A, or &quot;*5&quot; 
       for row 5. For example, &amp;SUM(&quot;d*&quot;) 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'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
       all rows, all columns</span></p>
     <p><span style='color:black'>B*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all rows 
       in column B</span></p>
     <p><span style='color:black'>*5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all 
       columns in row 5</span></p>
     <p><span style='color:black'>C5..F25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
       all cells in the rectangle between C5 and F25</span></p>
     <p>The template row allows the use of &quot;A#&quot;, which will result in &quot;A5&quot; 
       in row 5, &quot;A6&quot; 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 &quot;The Safe Environment&quot; 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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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'>&amp;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 &quot;Safe&quot; 
       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 &quot;compile 
       and execute code in restricted compartments&quot;. 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 &amp;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'>&nbsp;&nbsp;&nbsp; my 
       $safeeval = new Safe(shift);</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; my 
       $safehole = new Safe::Hole;</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;permit(&quot;entereval&quot;);</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;permit(&quot;:base_math&quot;);</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;permit(&quot;sort&quot;);</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;deny(&quot;:base_io&quot;);</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; $safehole-&gt;wrap(\&amp;Apache::lonnet::EXT,$safeeval,'&amp;EXT');</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; my 
       $code=&lt;&lt;'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'>&nbsp;&nbsp;&nbsp; $safeeval-&gt;reval($code);</span></p>
     <p><span style='font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp; 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'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
       Improved exporting of the spreadsheet date to client side spreadsheets </span></p>
     <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
       Exporting of spreadsheet xml - allowing users to save spreadsheets from their 
       classes for reuse. </span></p>
     <p><span style='color:black'>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
       Additional spreadsheet functions.</span></p>
     <h3>&nbsp; </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&nbsp; </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'>&nbsp;</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'>&nbsp;</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>

Removed from v.1.1  
changed lines
  Added in v.1.2


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