[LON-CAPA-cvs] cvs: doc /gutshtml Configuration DifferentTypesofLON.html FastInstallation.html Glossary HardwarespecificationforLON.html LON SessionFiv1.html SessionFiv2.html SessionFive.html SessionFou1.html SessionFou2.html SessionFour.html SessionOn1.html SessionOn2.html SessionOne.html SessionThre1.html SessionThre2.html SessionThree.html SessionTw1.html SessionTw2.html SessionTwo.html handout.htm /gutshtml/SessionFou1_files filelist.xml image001.png image002.jpg image003.gif image004.pct image005.png /gutshtml/SessionOn2_files filelist.xml image001.gif image002.pct image003.png /gutshtml/SessionOne_files filelist.xml image001.jpg image002.jpg image003.jpg image004.jpg image005.jpg image006.jpg image007.jpg image008.jpg image009.jpg image010.jpg image011.jpg image012.png image013.jpg /gutshtml/SessionTw1_files filelist.xml image001.gif image002.pct image003.png image004.jpg image005.jpg image006.jpg image007.jpg image008.jpg image009.jpg image010.jpg image011.jpg image012.png image013.jpg image014.png image015.jpg image016.png image017.jpg /gutshtml/SessionTw2_files filelist.xml image001.gif image002.wmf image003.png image004.gif image005.wmf image006.png image007.gif image008.wmf image009.png image010.gif image011.wmf image012.png image013.gif image014.wmf image015.png image016.gif image017.wmf image018.png image019.gif image020.wmf image021.png image022.gif image023.wmf image024.png image025.gif image026.wmf image027.png image028.gif image029.wmf image030.png image031.gif image032.wmf image033.png image034.gif image035.wmf image036.png image037.gif image038.wmf image039.png image040.gif image041.wmf image042.png image043.gif image044.wmf image045.png image046.gif image047.wmf image048.png image049.gif image050.wmf image051.png image052.gif image053.wmf image054.png image055.gif image056.wmf image057.png image058.gif image059.wmf image060.png image061.gif image062.wmf image063.png image064.gif image065.wmf image066.png image067.gif image068.wmf image069.png image070.gif image071.wmf image072.png image073.gif
www
lon-capa-cvs@mail.lon-capa.org
Fri, 28 Jun 2002 20:30:30 -0000
This is a MIME encoded message
--www1025296230
Content-Type: text/plain
www Fri Jun 28 16:30:30 2002 EDT
Added files:
/doc/gutshtml Configuration DifferentTypesofLON.html
FastInstallation.html Glossary
HardwarespecificationforLON.html LON SessionFiv1.html
SessionFiv2.html SessionFive.html SessionFou1.html
SessionFou2.html SessionFour.html SessionOn1.html
SessionOn2.html SessionOne.html SessionThre1.html
SessionThre2.html SessionThree.html SessionTw1.html
SessionTw2.html SessionTwo.html handout.htm
/doc/gutshtml/SessionFou1_files filelist.xml image001.png
image002.jpg image003.gif
image004.pct image005.png
/doc/gutshtml/SessionOn2_files filelist.xml image001.gif
image002.pct image003.png
/doc/gutshtml/SessionOne_files filelist.xml image001.jpg
image002.jpg image003.jpg
image004.jpg image005.jpg
image006.jpg image007.jpg
image008.jpg image009.jpg
image010.jpg image011.jpg
image012.png image013.jpg
/doc/gutshtml/SessionTw1_files filelist.xml image001.gif
image002.pct image003.png
image004.jpg image005.jpg
image006.jpg image007.jpg
image008.jpg image009.jpg
image010.jpg image011.jpg
image012.png image013.jpg
image014.png image015.jpg
image016.png image017.jpg
/doc/gutshtml/SessionTw2_files filelist.xml image001.gif
image002.wmf image003.png
image004.gif image005.wmf
image006.png image007.gif
image008.wmf image009.png
image010.gif image011.wmf
image012.png image013.gif
image014.wmf image015.png
image016.gif image017.wmf
image018.png image019.gif
image020.wmf image021.png
image022.gif image023.wmf
image024.png image025.gif
image026.wmf image027.png
image028.gif image029.wmf
image030.png image031.gif
image032.wmf image033.png
image034.gif image035.wmf
image036.png image037.gif
image038.wmf image039.png
image040.gif image041.wmf
image042.png image043.gif
image044.wmf image045.png
image046.gif image047.wmf
image048.png image049.gif
image050.wmf image051.png
image052.gif image053.wmf
image054.png image055.gif
image056.wmf image057.png
image058.gif image059.wmf
image060.png image061.gif
image062.wmf image063.png
image064.gif image065.wmf
image066.png image067.gif
image068.wmf image069.png
image070.gif image071.wmf
image072.png image073.gif
image074.wmf image075.png
image076.gif image077.wmf
image078.png image079.gif
image080.wmf image081.png
image082.gif image083.wmf
image084.png image085.png
image086.jpg image087.png
image088.jpg image089.gif
image090.wmf image091.png
image092.gif image093.wmf
image094.png image095.gif
image096.wmf image097.png
image098.gif image099.wmf
image100.png image101.gif
image102.wmf image103.png
image104.gif image105.wmf
image106.png image107.gif
image108.wmf image109.png
image110.gif image111.wmf
image112.png image113.gif
image114.wmf image115.png
image116.gif image117.wmf
image118.png image119.gif
image120.wmf image121.png
image122.gif image123.wmf
image124.png image125.gif
image126.wmf image127.png
image128.gif image129.wmf
image130.png image131.png
image132.jpg image133.gif
image134.wmf image135.png
image136.png image137.png
image138.png image139.png
image140.png image141.png
image142.png image143.png
image144.png image145.png
image146.png image147.png
image148.png image149.gif
image150.wmf image151.png
image152.gif image153.wmf
image154.png image155.gif
image156.wmf image157.png
image158.gif image159.wmf
image160.png image161.gif
image162.wmf image163.png
oledata.mso
/doc/gutshtml/handout_files filelist.xml image001.jpg image002.jpg
image003.jpg image004.jpg image005.png
image006.jpg image007.jpg image008.jpg
image009.jpg image010.jpg image011.jpg
Log:
HTML version of GUTS manual. Individual files will still need cleanup.
--www1025296230
Content-Type: text/plain
Content-Disposition: attachment; filename="www-20020628163030.txt"
Index: doc/gutshtml/DifferentTypesofLON.html
+++ doc/gutshtml/DifferentTypesofLON.html
<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:w="urn:schemas-microsoft-com:office:word"xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=Title content=" Different Types of LON-CAPA Servers"><meta name=Keywords content=""><meta http-equiv=Content-Type content="text/html; charset=macintosh"><meta name=ProgId content=Word.Document><meta name=Generator content="Microsoft Word 10"><meta name=Originator content="Microsoft Word 10"><link rel=File-List href="Different%20Types%20of%20LON_files/filelist.xml"><title> Different Types of LON-CAPA Servers</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>Gerd Kortemeyer</o:Author> <o:Template>Normal</o:Template> <o:Revision>1</o:Revision> <o:TotalTime>0</o:TotalTime> <o:Created>2002-06-27T21:54:00Z</o:Created> <o:Pages>1</o:Pages> <o:Words>215</o:Words> <o:Characters>1226</o:Characters> <o:Company>Michigan State University</o:Company> <o:Lines>10</o:Lines> <o:Paragraphs>2</o:Paragraphs> <o:CharactersWithSpaces>1505</o:CharactersWithSpaces> <o:Version>10.1412</o:Version> </o:DocumentProperties> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:DownloadComponents>120</o:DownloadComponents> <o:PixelsPerInch>1600x1200</o:PixelsPerInch> </o:OfficeDocumentSettings></xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>0</w:Zoom> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery> <w:UseMarginsForDrawingGridOrigin/> </w:WordDocument></xml><![endif]--><style><!-- /* Font Definitions */@font-face {font-family:"Times New Roman"; panose-1:0 2 2 6 3 5 4 5 2 3; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:Arial; panose-1:0 2 11 6 4 2 2 2 2 2; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:"Courier New"; panose-1:0 2 7 3 9 2 2 5 2 4; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:Wingdings; panose-1:0 5 2 1 2 1 8 4 8 7; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 16 0 0 -2147483648 0;} /* Style Definitions */p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:Times;}h1 {mso-style-next:Normal; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:1; font-size:14.0pt; font-family:"Times New Roman"; mso-font-kerning:0pt; font-weight:bold;}h2 {mso-style-next:Normal; margin-top:12.0pt; margin-right:0in; margin-bottom:3.0pt; margin-left:0in; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:2; font-size:12.0pt; font-family:Arial; font-weight:bold; font-style:italic;}p {margin-right:0in; mso-margin-top-alt:auto; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman";}tt {}@page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}div.Section1 {page:Section1;}@page Section2 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}div.Section2 {page:Section2;} /* List Definitions */@list l0 {mso-list-id:915936857; mso-list-type:hybrid; mso-list-template-ids:327573464 1753628356 1403960406 -1635377814 -316785360 -1237056688 2126661908 -658203928 577807390 -1131145538;}@list l0:level1 {mso-level-number-format:bullet; mso-level-text:\F0B7; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-size:10.0pt; font-family:Symbol;}ol {margin-bottom:0in;}ul {margin-bottom:0in;}--></style></head><body bgcolor=white lang=EN-US style='tab-interval:.5in'><div class=Section1><span style='font-size:14.0pt;font-family:"Times New Roman";mso-ansi-language:EN-US'><b><br clear=ALL style='page-break-before:always'></b></span><h1><a name="_Toc421867148">Different Types of LON-CAPA Servers</a></h1><p><i>Scott Harrison, freeware volunteer, sharrison@sourceforge.net</i><spanstyle='font-style:normal'> </span></p><h2><a name="_Toc421867149">Introduction</a></h2><p>There are two different kinds of LON-CAPA servers, Library Servers andAccess Servers. On any LON-CAPA machine, you can look at the server type byviewing the file <tt><span style='font-family:"Courier New"'>/etc/httpd/conf/loncapa.conf</span></tt>and looking at the variable <strong>lonRole</strong>. </p><h2><a name="_Toc421867150">Library Servers</a></h2><p>Library Servers are repositories of authoritative educational resources.These servers also provide the construction space by which instructors assembletheir classroom online material. First-time installations of LON-CAPA at aninstitution should be for Library Servers (and not Access Servers). </p><p>Only Library Servers make use of a MySQL database. </p><p>On the filesystem, the following directories are used primarily by LibraryServers (and not Access Servers): </p><ul type=disc> <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; mso-list:l0 level1 lfo1;tab-stops:list .5in'><tt><span style='font-family: "Courier New"'>/home/USERNAME/</span></tt> - authors are standard Linux users that exist on Library Servers </li> <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; mso-list:l0 level1 lfo1;tab-stops:list .5in'><tt><span style='font-family: "Courier New"'>/home/httpd/lonUsers/</span></tt> - user profile information is stored inside Library Servers </li> <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; mso-list:l0 level1 lfo1;tab-stops:list .5in'><tt><span style='font-family: "Courier New"'>/home/httpd/html/res/</span></tt></li></ul><p class=MsoNormal style='margin-left:.5in'>- Library Servers use this space tohold authoritative or cached versions of educational resources; Access Serversonly use this space to hold cached versions of educational resources </p><h2><a name="_Toc421867151">Access Servers</a></h2><p>Access Servers load-balance high-traffic delivery of educational resourcesover the world-wide web. Access Servers do not require a MySQL database and donot contain Linux user accounts. Several of the active directories on LibraryServers are not needed on an Access Servers. </p></div><span style='font-size:12.0pt;font-family:Times;mso-ansi-language:EN-US'><brclear=ALL style='page-break-before:always;mso-break-type:section-break'></span><div class=Section2><p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p></div></body></html>
Index: doc/gutshtml/FastInstallation.html
+++ doc/gutshtml/FastInstallation.html
<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:w="urn:schemas-microsoft-com:office:word"xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=Title content="Fast Installation: Setting up a Red Hat 7"><meta name=Keywords content=""><meta http-equiv=Content-Type content="text/html; charset=macintosh"><meta name=ProgId content=Word.Document><meta name=Generator content="Microsoft Word 10"><meta name=Originator content="Microsoft Word 10"><link rel=File-List href="Fast%20Installation_files/filelist.xml"><title>Fast Installation: Setting up a Red Hat 7</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>Gerd Kortemeyer</o:Author> <o:Template>Normal</o:Template> <o:Revision>1</o:Revision> <o:TotalTime>0</o:TotalTime> <o:Created>2002-06-27T21:54:00Z</o:Created> <o:Pages>1</o:Pages> <o:Words>1010</o:Words> <o:Characters>5762</o:Characters> <o:Company>Michigan State University</o:Company> <o:Lines>48</o:Lines> <o:Paragraphs>11</o:Paragraphs> <o:CharactersWithSpaces>7076</o:CharactersWithSpaces> <o:Version>10.1412</o:Version> </o:DocumentProperties> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:DownloadComponents>120</o:DownloadComponents> <o:PixelsPerInch>1600x1200</o:PixelsPerInch> </o:OfficeDocumentSettings></xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>0</w:Zoom> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery> <w:UseMarginsForDrawingGridOrigin/> </w:WordDocument></xml><![endif]--><style><!-- /* Font Definitions */@font-face {font-family:"Times New Roman"; panose-1:0 2 2 6 3 5 4 5 2 3; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:Arial; panose-1:0 2 11 6 4 2 2 2 2 2; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:"Courier New"; panose-1:0 2 7 3 9 2 2 5 2 4; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:Wingdings; panose-1:0 5 2 1 2 1 8 4 8 7; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 16 0 0 -2147483648 0;} /* Style Definitions */p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:Times;}h1 {mso-style-next:Normal; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:1; font-size:14.0pt; font-family:"Times New Roman"; mso-font-kerning:0pt; font-weight:bold;}h2 {mso-style-next:Normal; margin-top:12.0pt; margin-right:0in; margin-bottom:3.0pt; margin-left:0in; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:2; font-size:12.0pt; font-family:Arial; font-weight:bold; font-style:italic;}p {margin-right:0in; mso-margin-top-alt:auto; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman";}pre {margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; font-size:10.0pt; font-family:"Courier New";}tt {}@page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}div.Section1 {page:Section1;}@page Section2 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}div.Section2 {page:Section2;} /* List Definitions */@list l0 {mso-list-id:526917976; mso-list-type:hybrid; mso-list-template-ids:-1331112906 -1406905024 -344398962 1467254890 -638782688 -1081826792 -637395960 -765828298 -2120437558 -454631360;}@list l0:level1 {mso-level-number-format:bullet; mso-level-text:\F0B7; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-size:10.0pt; font-family:Symbol;}@list l1 {mso-list-id:716245914; mso-list-type:hybrid; mso-list-template-ids:-1772223172 1239213712 -1405203140 -1939727986 -1001496134 -1507811686 436794448 1330569048 -202857512 871669244;}@list l1:level1 {mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;}@list l2 {mso-list-id:1211651025; mso-list-type:hybrid; mso-list-template-ids:1720480662 -1156523330 764584900 693815576 577507578 -1668380266 -358728502 1637385602 869286030 86140684;}@list l2:level1 {mso-level-number-format:bullet; mso-level-text:\F0B7; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-size:10.0pt; font-family:Symbol;}@list l3 {mso-list-id:1738747246; mso-list-type:hybrid; mso-list-template-ids:589056050 295589242 -1260124096 -821652718 -1874822846 1139856888 962002586 434413380 -1859721930 -926639952;}@list l3:level1 {mso-level-number-format:bullet; mso-level-text:\F0B7; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-size:10.0pt; font-family:Symbol;}ol {margin-bottom:0in;}ul {margin-bottom:0in;}--></style></head><body bgcolor=white lang=EN-US style='tab-interval:.5in'><div class=Section1><h1>Fast Installation: Setting up a Red Hat 7.3 LON-CAPA Server</h1><h2><a name="_Toc421867176">Before you begin</a></h2><p>Installing Linux is getting easier and easier. However, it is still anon-trivial undertaking and experience with Red Hat Linux will make thisprocess easier. You will be required to log in to the machine and execute someroutine Unix commands. Some familiarity with Linux is assumed. </p><h2><a name="_Toc421867177">Installation Overview</a></h2><p>The installation process takes the following steps: </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>1.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Obtain Red Hat 7.3 </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>2.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Gather information for installing Red Hat </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>3.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Install Red Hat 7.3 </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>4.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Determine your LON-CAPA Settings </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>5.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Install LON-CAPA </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>6.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Configure LON-CAPA </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>7.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Pick a hosts.tab file </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>8.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Create a Domain Coordinator </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>9.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Start/Restart services </p><p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1;tab-stops:list .5in'><![if !supportLists]>10.<span style='font:7.0pt "Times New Roman"'> </span><![endif]>Log in to LON-CAPA </p><h2><a name="_Toc421867178">Obtain the Red Hat 7.3 installation CDs</a></h2><p>If you like, you may contact the LON-CAPA development staff and we can mailthe CDs to you. Another option is to download the cd images and burn themyourself, or install from a mirror site using ftp or http. </p><h2><a name="_Toc421867179">Determine Network settings for your site</a></h2><p>You will need to have the following information for your site. You must havea static IP address (do not use DHCP). </p><ul style='margin-top:0in' type=disc> <li class=MsoNormal style='mso-list:l0 level1 lfo2;tab-stops:list .5in'>ip address </li> <li class=MsoNormal style='mso-list:l0 level1 lfo2;tab-stops:list .5in'>netmask </li> <li class=MsoNormal style='mso-list:l0 level1 lfo2;tab-stops:list .5in'>network </li> <li class=MsoNormal style='mso-list:l0 level1 lfo2;tab-stops:list .5in'>broadcast </li> <li class=MsoNormal style='mso-list:l0 level1 lfo2;tab-stops:list .5in'>hostname </li> <li class=MsoNormal style='mso-list:l0 level1 lfo2;tab-stops:list .5in'>gateway </li> <li class=MsoNormal style='mso-list:l0 level1 lfo2;tab-stops:list .5in'>domain name server(s) </li></ul><h2><a name="_Toc421867180">Install Red Hat 7.3</a></h2><p>When you install RedHat you will need to ensure the following (the listbelow is in the order the issues appear in the installation of Red Hat 7.3): </p><p class=MsoNormal>Installation Type </p><p class=MsoNormal style='margin-left:.5in'>You should definitely do a"Server" install. We do not recommend Trying to install LON-CAPA witha different installation type. </p><p class=MsoNormal>Partitioning your Drive </p><p class=MsoNormal style='margin-left:.5in'>You may want to use the automaticpartitioning feature of Red Hat, however you should review the results and beprepared to modify them. LON-CAPA resource files are stored in the /homedirectory, so the lion's share of the drive should be allocated here. If youhave 8 GB of space for Red Hat, /home should receive 4 to 6 gigs. Be sure toinclude adequate swap space. A minimum is 512 Megs, but you should typicallyhave 1 or 2x as much swap space as you do physical RAM. </p><p class=MsoNormal>Network Configuration </p><p class=MsoNormal style='margin-left:.5in'>LON-CAPA will <b>not</b><spanstyle='font-weight:normal'> work with a machine set up to use a dynamic IPaddress. When configuring your network card, be sure to unselect the DHCPoption and enter in your network information. </span></p><p class=MsoNormal>Firewall Configuration </p><p class=MsoNormal style='margin-left:.5in'>The installation script will removeand disable your firewall. </p><p class=MsoNormal>Package Group Selection </p><p class=MsoNormal style='margin-left:.5in'>At a minimum, install the followingpackages: </p><ul style='margin-top:0in' type=disc> <li class=MsoNormal style='mso-list:l2 level1 lfo3;tab-stops:list .5in'>NFS File Server </li> <li class=MsoNormal style='mso-list:l2 level1 lfo3;tab-stops:list .5in'>Windows File Server </li> <li class=MsoNormal style='mso-list:l2 level1 lfo3;tab-stops:list .5in'>Web Server </li></ul><p class=MsoNormal style='margin-left:.5in'>Other packages can be installed asyou like. </p><p class=MsoNormal>X Windows Configuration </p><p class=MsoNormal style='margin-left:.5in'>If you chose to install theX-windows packages you will need to configure them. If you are unsure of thesupport for your video card you may wish to skip the configuration. </p><p class=MsoNormal>Other notes: </p><ul style='margin-top:0in' type=disc> <li class=MsoNormal style='mso-list:l3 level1 lfo4;tab-stops:list .5in'>Use md5 and shadow passwords if you are given the choice (this is the default). </li></ul><h2><a name="_Toc421867181">Determine LON-CAPA settings</a></h2><p>LON-CAPA requires a number of identifying parameters be set in order for itto function at all. Below is a list with descriptions. </p><p class=MsoNormal>Host Type (library or access) </p><p class=MsoNormal style='margin-left:.5in'>The server must be designated a'library' or an 'access' server. In general you should have a library serverfor your instructors to create their course content on and run their courses.Students should connect to access servers. If you are doing the first installof LON-CAPA at your site, or if you are playing with it for your ownedification, you should make your machine a 'library' server. </p><p class=MsoNormal>LON-CAPA domain </p><p class=MsoNormal style='margin-left:.5in'>Each site or school which installsLON-CAPA needs its own domain. Here at MSU we use 'msu'. You should choosesomething short but meaningful. <i>Restriction: One word, no hyphens,underscores, or special characters!</i><span style='font-style:normal'> </span></p><p class=MsoNormal>LON-CAPA host id </p><p class=MsoNormal style='margin-left:.5in'>Each LON-CAPA server requires aunique internal name. We use names such as "msul1" for the firstlibrary server. <i>Restriction: One word, no hyphens, underscores, or specialcharacters!</i><span style='font-style:normal'> </span></p><p class=MsoNormal>Host administrator email </p><p class=MsoNormal style='margin-left:.5in'>The amount of email sent to thisaddress is relatively minimal. Messages are sent every time the system startsup, or if the system is in serious trouble. On a laptop, make this <tt><spanstyle='font-family:"Courier New"'>root@localhost</span></tt>. </p><p class=MsoNormal>Root password for SQL database </p><p class=MsoNormal style='margin-left:.5in'>In order to keep people fromcorrupting the MYSQL database, a root password is needed. You'll need toremember this. </p><h2><a name="_Toc421867182">Install LON-CAPA</a></h2><p>Log in as root with the password you provided during the Red Hatinstallation process. </p><pre><span style="mso-spacerun: yes"> </span>wget http://install.loncapa.org/versions/rh73install/loncapa-rh73install.tar tar xf loncapa-rh73install.tar cd install ./install.pl </pre><h2><a name="_Toc421867183">Configure LON-CAPA</a></h2><p>Execute the following commands </p><pre><span style="mso-spacerun: yes"> </span>cd /root/loncapa/ ./UPDATE </pre><p class=MsoNormal>You will need to enter the LON-CAPA configurationinformation you requested above. Additionally, you will need to enter thefollowing information (options 5 and 6 in the menu, recommended settings): </p><p class=MsoNormal>Cache Expiration Time </p><p class=MsoNormal style='margin-left:.5in'>86400 </p><p class=MsoNormal>Server Load </p><p class=MsoNormal style='margin-left:.5in'>2.0 </p><p class=MsoNormal>You can deviate from the above settings if you know what youare doing. </p><h2><a name="_Toc421867184">Picking a hosts.tab file</a></h2><p class=MsoNormal>The "hosts.tab" file controls which LON-CAPA serversyour server attempts to access and which servers it will respond to. If this isyour first install of LON-CAPA on your network, we suggest choosing a'standalone' "hosts.tab". On a laptop, you must choose 'standalone'.Please contact the support staff at www.loncapa.org for information aboutadding more hosts to your "hosts.tab" file. </p><p><b>Note:</b><span style='font-weight:normal'> for </span><b>non</b><spanstyle='font-weight:normal'>-standalone configurations, you do need to addyourself to the </span><tt><span style='font-family:"Courier New"'>/home/httpd/lonTabs/hosts.tab</span></tt>to initially test your configuration. Eventually, you will be added to thegeneral cluster tables by LON-CAPA staff, so this is temporary. A <tt><spanstyle='font-family:"Courier New"'>hosts.tab</span></tt> entry has the format </p><pre><span style="mso-spacerun: yes"> </span>lonHostID:domain:hosttype:dns-name:ipaddress </pre><p class=MsoNormal>for example </p><pre><span style="mso-spacerun: yes"> </span>103l5:library:s17.lite.msu.edu:35.8.63.27 </pre><p class=MsoNormal>Please edit this file with a UNIX editor, not a PC or Macone, so that the linebreaks are correct. </p><h2><a name="_Toc421867185">Creating a Domain Coordinator</a></h2><p>You will need at least one user at your site who has the role of 'domaincoordinator'. This user creates accounts for other users and grants themadditional privileges. The make_domain_coordinator.pl script invoked belowrequires that you enter the users password. The password will show in plaintextas you type it. Feel free to use the "passwd username" command tochange it later. Replace USERNAME and DOMAIN with an appropriate user name andyour domain. </p><pre><span style="mso-spacerun: yes"> </span>cd /root/loncapa/loncom/build perl make_domain_coordinator.pl USERNAME DOMAIN (WILL PROMPT FOR PASSWORD HERE) mkdir ~USERNAME/public_html chown USERNAME:www ~USERNAME/public_html chmod 0775 ~USERNAME/public_html </pre><h2><a name="_Toc421867186">Start/Restart Services</a></h2><p>The services take about 10 minutes to start. </p><pre><span style="mso-spacerun: yes"> </span>/etc/init.d/loncontrol start /etc/init.d/httpd restart </pre><h2><a name="_Toc421867187">Make Sure that Services Autostart on Boot</a></h2><p>On Redhat 7.3 it is not guaranteed that Apache and MySQL automaticallyrestart on boot, even when installing with "server" configuration.After logging in as root, check under "Programs" - "System"- "Service Configuration" that "Start on Boot" is checkedfor httpd and mysqld, save and restart.. </p><h2><a name="_Toc421867188">Log in to your LON-CAPA Machine</a></h2><p>Point a web browser at your new machine and log in as the domaincoordinator. Congratulations! </p></div><span style='font-size:12.0pt;font-family:Times;mso-ansi-language:EN-US'><brclear=ALL style='page-break-before:always;mso-break-type:section-break'></span><div class=Section2><p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p></div></body></html>
Index: doc/gutshtml/HardwarespecificationforLON.html
+++ doc/gutshtml/HardwarespecificationforLON.html
<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:w="urn:schemas-microsoft-com:office:word"xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=Title content="Hardware specification for LON-CAPA servers"><meta name=Keywords content=""><meta http-equiv=Content-Type content="text/html; charset=macintosh"><meta name=ProgId content=Word.Document><meta name=Generator content="Microsoft Word 10"><meta name=Originator content="Microsoft Word 10"><link rel=File-List href="Hardware%20specification%20fo_files/filelist.xml"><title>Hardware specification for LON-CAPA servers</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>Gerd Kortemeyer</o:Author> <o:Template>Normal</o:Template> <o:Revision>1</o:Revision> <o:TotalTime>0</o:TotalTime> <o:Created>2002-06-27T21:54:00Z</o:Created> <o:Pages>1</o:Pages> <o:Words>274</o:Words> <o:Characters>1566</o:Characters> <o:Company>Michigan State University</o:Company> <o:Lines>13</o:Lines> <o:Paragraphs>3</o:Paragraphs> <o:CharactersWithSpaces>1923</o:CharactersWithSpaces> <o:Version>10.1412</o:Version> </o:DocumentProperties> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:DownloadComponents>120</o:DownloadComponents> <o:PixelsPerInch>1600x1200</o:PixelsPerInch> </o:OfficeDocumentSettings></xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:Zoom>0</w:Zoom> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery> <w:UseMarginsForDrawingGridOrigin/> </w:WordDocument></xml><![endif]--><style><!-- /* Font Definitions */@font-face {font-family:"Times New Roman"; panose-1:0 2 2 6 3 5 4 5 2 3; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:Arial; panose-1:0 2 11 6 4 2 2 2 2 2; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:"Courier New"; panose-1:0 2 7 3 9 2 2 5 2 4; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:50331648 0 0 0 1 0;}@font-face {font-family:Wingdings; panose-1:0 5 2 1 2 1 8 4 8 7; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 16 0 0 -2147483648 0;} /* Style Definitions */p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:Times;}h1 {mso-style-next:Normal; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:1; font-size:14.0pt; font-family:"Times New Roman"; mso-font-kerning:0pt; font-weight:bold;}h2 {mso-style-next:Normal; margin-top:12.0pt; margin-right:0in; margin-bottom:3.0pt; margin-left:0in; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:2; font-size:12.0pt; font-family:Arial; font-weight:bold; font-style:italic;}p {margin-right:0in; mso-margin-top-alt:auto; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman";}@page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}div.Section1 {page:Section1;}@page Section2 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}div.Section2 {page:Section2;} /* List Definitions */@list l0 {mso-list-id:801534295; mso-list-type:hybrid; mso-list-template-ids:-1039494676 1841749556 -101014218 -1296512168 1967937480 46431572 -1478200866 -1398355040 780157168 -1123748844;}@list l0:level1 {mso-level-number-format:bullet; mso-level-text:\F0B7; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-size:10.0pt; font-family:Symbol;}ol {margin-bottom:0in;}ul {margin-bottom:0in;}--></style></head><body bgcolor=white lang=EN-US style='tab-interval:.5in'><div class=Section1><h1>Hardware specification for LON-CAPA servers</h1><p><i>Scott Harrison, freeware volunteer, sharrison@sourceforge.net</i><spanstyle='font-style:normal'> </span></p><h2><a name="_Toc421867153">General information on LON-CAPA Server HardwareRequirements</a></h2><p>For full-time, classroom usage, an adequate LON-CAPA server should be/have: </p><ul type=disc> <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; mso-list:l0 level1 lfo1;tab-stops:list .5in'>a multiprocessor machine,</li> <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; mso-list:l0 level1 lfo1;tab-stops:list .5in'>a CPU speed of 1 gigahertz,</li> <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; mso-list:l0 level1 lfo1;tab-stops:list .5in'>a gigabyte of memory,</li> <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; mso-list:l0 level1 lfo1;tab-stops:list .5in'>and at least 40 to 80 gigabytes of hard disk space.</li></ul><p>A lesser machine can be used for toying around with LON-CAPA (LON-CAPA willrun for a single user on most any machine). </p><p>LON-CAPA servers experience significant peaks of activity before a homeworksubmission deadline. To support these critical peaks of activity, it isstrongly advised that LON-CAPA machines fit the above recommendation. </p><p>If thousands of students start accessing the box as a web server... well youmay want to consider more options. The design of the LON-CAPA system is tonaturally and transparently load-balance on multiple computer clusters. So, asimple solution for running an entire college campus is to just have an adequateplurality of LON-CAPA servers rather than a single, particularly monstrousserver. </p><p>We like to think of high web server usage as "a good problem"though.... </p><h2><a name="_Toc421867154">Additional Information on LON-CAPA Server HardwareRequirements</a></h2><p>LON-CAPA works nicely (for development purposes) on a Pentium II, 20gigabytes of hard-disk space, 256M RAM, and 400MHz. The consensus is though,that this may only be adequate for a class of a dozen students. </p><p>If you are making a serious investment, you should join the LON-CAPA mailinglist by visiting http://mail.lon-capa.org/mailman/listinfo/lon-capa-users. Byposting to this mailing list, you can learn about the solutions have worked forothers. </p><p>LON-CAPA works on any Intel-based RedHat-compatible hardware. Unlike othere-learning software systems, it works comparatively well on dusty old crippledmachines without much RAM or processing. </p><p><![if !supportEmptyParas]> <![endif]><o:p></o:p></p></div><span style='font-size:12.0pt;font-family:Times;mso-ansi-language:EN-US'><brclear=ALL style='page-break-before:always;mso-break-type:section-break'></span><div class=Section2><p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p></div></body></html>
Index: doc/gutshtml/SessionFiv1.html
+++ doc/gutshtml/SessionFiv1.html
<html>
<head>
<meta name=Title content="Session Five: Worktime (Guy)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<title>Session Five: Worktime (Guy)</title>
<style><!--
.Section1
{page:Section1;}
.Section2
{page:Section2;}
-->
</style>
</head>
<body bgcolor=#FFFFFF class="Normal" lang=EN-US>
<div class=Section1>
<h2>Session Five: Worktime (Guy)</h2>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionFiv2.html
+++ doc/gutshtml/SessionFiv2.html
<html>
<head>
<meta name=Title content="Session Five: Open Worktime">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<title>Session Five: Open Worktime</title>
<style><!--
.Section1
{page:Section1;}
.Section2
{page:Section2;}
-->
</style>
</head>
<body bgcolor=#FFFFFF class="Normal" lang=EN-US>
<div class=Section1>
<h2>Session Five: Open Worktime</h2>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionFive.html
+++ doc/gutshtml/SessionFive.html
<html>
<head>
<meta name=Title
content="Session Five: Worktime (make new handler, debugging/testing) (Guy)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<title>Session Five: Worktime (make new handler, debugging/testing) (Guy)</title>
<style><!--
.Section1
{page:Section1;}
.Section2
{page:Section2;}
-->
</style>
</head>
<body bgcolor=#FFFFFF class="Normal" lang=EN-US>
<div class=Section1>
<h2>Session Five: Worktime (make new handler, debugging/testing) (Guy)</h2>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionFou1.html
+++ doc/gutshtml/SessionFou1.html
<html>
<head>
<meta name=Title
content="Session Four: XML Handler (Simple tags, Globals, Multiple Targets, Style Files) (Guy)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<link rel=Edit-Time-Data href="Session%20Fou1_files/editdata.mso">
<title>Session Four: XML Handler (Simple tags, Globals, Multiple Targets, Style
Files) (Guy)</title>
<style><!--
.MsoHeader
{tab-stops:center 3.0in right 6.0in;
font-size:10.0pt;
font-family:"Times New Roman";}
.MsoPlainText
{font-size:10.0pt;
font-family:"Courier New";}
.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 Four: XML Handler (Simple tags, Globals, Multiple Targets, Style
Files) (Guy)</h2>
<h3><a name="_Toc421867121">XML Files</a></h3>
<p><span style='color:black'>All HTML / XML files are run through the lonxml
handler before being served to a user. This allows us to rewrite many portion
of a document and to support serverside tags. There are 2 ways to add new
tags to the xml parsing engine, either through LON-CAPA style files or by
writing Perl tag handlers for the desired tags. </span></p>
<p><span style='color:black'><b>Global Variables</b></span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::debug</i></span><span
style='color:black'> - debugging control </span></p>
<p><span style='color:black'>*
<i>@Apache::lonxml::pwd</i></span><span
style='color:black'> - path to the directory containing the file currently being
processed </span></p>
<p><span style='color:black'>*
<i>@Apache::lonxml::outputstack</i></span><span
style='color:black'> </span></p>
<p><span style='color:black'><i>$Apache::lonxml::redirection</i></span><span
style='color:black'> - these two are used for capturing a subset of the output
for later processing, don't touch them directly use &startredirection
and &endredirection </span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::import</i></span><span
style='color:black'> - controls whether the <import> tag actually does anything
</span></p>
<p><span style='color:black'>*
<i>@Apache::lonxml::extlinks</i></span><span
style='color:black'> - a list of URLs that the user is allowed to look at because
of the current resource (images, and links) </span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::metamode</i></span><span
style='color:black'> - some output is turned off, the meta target wants a specific
subset, use <output> to guarentee that the catianed data will be in
the parsing output </span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::evaluate</i></span><span
style='color:black'> - controls whether run::evaluate actually derefences variable
references </span></p>
<p><span style='color:black'>*
<i>%Apache::lonxml::insertlist</i></span><span
style='color:black'> - data structure for edit mode, determines what tags can
go into what other tags </span></p>
<p><span style='color:black'>*
<i>@Apache::lonxml::namespace</i></span><span
style='color:black'> - stores the list of tag namespaces used in the insertlist.tab
file that are currently active, used only in edit mode. </span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::registered</i></span><span
style='color:black'> - set to 1 once the remote has been updated to know what
resource we are looking at. </span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::request</i></span><span
style='color:black'> - current Apache request object, or undef </span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::curdepth</i></span><span
style='color:black'> - current depth of the overall parse depth. Will be a string
like: 2_3_1 (first tag in the third second level tag in the second toplevel
tag). It gets set by callsub, and can be used in Perl tag implementations.
It relies upon the internal globals: <i>@Apache::lonxml::depthcounter</i></span><span
style='color:black'>, <i>$Apache::lonxml::depth</i></span><span
style='color:black'>, <i>$Apache::lonxml::olddepth</i></span><span
style='color:black'> </span></p>
<p><span style='color:black'>*
<i>$Apache::lonxml::prevent_entity_encode</i></span><span
style='color:black'> - By default the xmlparser will try to rencode any 8-bit
characters into HTMLEntity Codes, If this is set to a true value it will be
prevented. </span></p>
<p><span style='color:black'>In common usage, <i>$Apache::lonxml::prevent_entity_encode</i></span><span
style='color:black'>, <i>$Apache::lonxml::evaluate</i></span><span
style='color:black'>, <i>$Apache::lonxml::metamode</i></span><span
style='color:black'>, <i>$Apache::lonxml::import</i></span><span
style='color:black'>, should never be set to a value directly, but rather incremented
when you want the effect on, and decremented when you want the effect off.
</span></p>
<p><span style='color:black'><b>Notable Perl subroutines</b></span></p>
<p><span style='color:black'>If not specified these functions are in Apache::lonxml
</span></p>
<p><span style='color:black'>*
<i>xmlparse</i></span><span
style='color:black'> - see the XMLPARSE figure - also not callable from inside
a tag, if one needs to restart parsing, either create add a new LCParser to
the parser stack parser using the newparser function, or call inner_xmlparser,
see the xmlparse function in scripttag.pm </span></p>
<p><span style='color:black'>*
<i>recurse</i></span><span
style='color:black'> - acts just like <i>xmlparse</i></span><span
style='color:black'>, except it doesn't do the style definition check it always
calls <i>callsub</i></span><span style='color:black'> </span></p>
<p><span style='color:black'>*
<i>callsub</i></span><span
style='color:black'> - callsub looks if a perl subroutine is defined for the current
tag and calls. Otherwise it just returns the tag as it was read in. It also
will throw on a default editing interface unless the tag has a defined subroutine
that either returns something or requests that call sub not add the editing
interface. </span></p>
<p><span style='color:black'>*
<i>afterburn</i></span><span
style='color:black'> - called on the output of xmlparse, it can add highlights,
anchors, and links to regular expersion matches to the output. </span></p>
<p><span style='color:black'>*
<i>register_insert</i></span><span
style='color:black'> - builds the %Apache::lonxml::insertlist structure of what
tags can have what other tags inside. </span></p>
<p><span style='color:black'>*
<i>whichuser</i></span><span
style='color:black'> - returns a list of $symb, $courseid, $domain, $name that
is correct for calls to lonnet functions for this setup. Uses form.grade_
parameters, if the user is allowed to mgr in the course </span></p>
<p><span style='color:black'>*
<i>setup_globals</i></span><span
style='color:black'> - initializes all lonxml globals when xmlparse is called.
If you intend to create a new target you will likely need to tweak how the
globals are setup upon start up. </span></p>
<p><span style='color:black'>*
<i>init_safespace</i></span><span
style='color:black'> - creates Holes to external functions, creates some global
variables, and set the permitted operators of the global Safespace intepreter.
</span></p>
<p><span style='color:black'><b>Functions Tag Handlers can use</b></span></p>
<p><span style='color:black'>If not specified these functions are in Apache::lonxml
</span></p>
<p><span style='color:black'>*
<i>debug</i></span><span
style='color:black'> - a function to call to printout debugging messages. Will
only print when Apache::lonxml::debug is set to 1 </span></p>
<p><span style='color:black'>*
<i>warning</i></span><span
style='color:black'> - a function to use for warning messages. The message will
appear at the top of a resource when it is viewed in construction space only.
</span></p>
<p><span style='color:black'>*
<i>error</i></span><span
style='color:black'> - a function to use for error messages. The message will
appear at the top of a resource when it is viewed in construction space, and
will message the resource author and course instructor, while informing the
student that an error has occured otherwise. </span></p>
<p><span style='color:black'>*
<i>get_all_text</i></span><span
style='color:black'> - 2 args, tag to look for (need to use /tag to look for an
end tag) and a HTML::TokeParser reference, it will repedelyt get text from
the TokeParser until the requested tag is found. It will return all of the
document it pulled form the TokeParser. (See Apache::scripttag::start_script
for an example of usage.) </span></p>
<p><span style='color:black'>*
<i>get_param</i></span><span
style='color:black'> - 4 arguments, first is a scaler sting of the argument needed,
second is a reference to the parser arguments stack, third is a reference
to the Safe space, and fourth is an optional "context" value. This
subroutine allows a tag to get a tag argument, after being interpolated inside
the Safe space. This should be used if the tag might use a safe space variable
reference for the tag argument. (See Apache::scripttag::start_script for an
example.) This version only handles scalar variables. </span></p>
<p><span style='color:black'>*
<i>get_param_var</i></span><span
style='color:black'> - 4 arguments, first is a scaler sting of the argument needed,
second is a reference to the parser arguments stack, third is a reference
to the Safe space, and fourth is an optional "context" value. This
subroutine allows a tag to get a tag argument, after being interpolated inside
the Safe space. This should be used if the tag might use a safe space variable
reference for the tag argument. (See Apache::scripttag::start_script for an
example.) This version can handle list or hash variables properly. </span></p>
<p><span style='color:black'>*
<i>description</i></span><span
style='color:black'> - 1 argument, the token object. This will return the textual
decription of the current tag from the insertlist.tab file. </span></p>
<p><span style='color:black'>*
<i>whichuser</i></span><span
style='color:black'> - 0 arguments. This will take a look at the current environment
setting and return the current $symb, $courseid, $udom, $uname. You should
always use this function if you want to determine who the current user is.
(Since a instructor might be trying to view a students version of a resource.)
</span></p>
<p><span style='color:black'>*
<i>inner_xmlparse</i></span><span
style='color:black'> - 6 arguments, the target, an array pointer to the current
stack of tags, and array pointer to the current stack of tag arguments, an
array pointer to the current stack of LCParser's, a pointer to the current
Safe space, a pointer to the hash of current style definitions </span></p>
<p><span style='color:black'>*
<i>newparser</i></span><span
style='color:black'> - 3 args, first is a reference to the parser stack, second
should be a reference to a string scaler containg the text the newparser should
run over, third should be a scaler of the directory path the file the parser
is parsing was in. (See Apache::scripttag::start_import for an example.) </span></p>
<p><span style='color:black'>*
<i>register</i></span><span
style='color:black'> - should be called in a file's BEGIN block. 2 arguments,
a scaler string, and a list of strings. This allows a file to register what
tags it handles, and what the namespace of those tags are. Example: </span></p>
<p><span style='font-family:"Courier New";color:black'>sub BEGIN {</span></p>
<p><span style='font-family:"Courier New";color:black'> &Apache::lonxml::register('Apache::scripttag',('script','display'));</span></p>
<p><span style='font-family:"Courier New";color:black'>}</span></p>
<p><span style='color:black'>Would tell xmlparse that in Apache::scripttag it
can find handlers for <script> and <display>, if one regsiters
a tag that was already registered the previous one is remembered and will
be restored on a deregister. </span></p>
<p><span style='color:black'>*
<i>deregister</i></span><span
style='color:black'> - used to remove a previously registered tag implementation.
It will restore the previous registration if there was one. </span></p>
<p><span style='color:black'>*
<i>startredirection</i></span><span
style='color:black'> - used when a tag wants to save a portion of the document
for its end tag to use, but wants the intervening document to be normally
processed. (See Apache::scripttag::start_window for an example.) </span></p>
<p><span style='color:black'>*
<i>endredirection</i></span><span
style='color:black'> - used to stop preventing xmlparse from hiding output. The
return value is everthing that xmlparse has processed since the corresponding
startredirection. (See Apache::scripttag::end_window for an example.) </span></p>
<p><span style='color:black'>*
<i>Apache::run::evaluate</i></span><span
style='color:black'> - 3 args, first a string, second a reference to the Safe
space, 3 a string to be evaluated before the first arg. This subroutine will
do variable interpolation and simple function interpolations on the first
argument. (See Apache::lonxml::inner_xmlparse for an example.) </span></p>
<p><span style='color:black'>*
<i>Apache::run::run</i></span><span
style='color:black'> - 2 args, first a string, second a reference to the Safe
space. This handles passing the passed string into the Safe space for evaluation
and then returns the result. (See Apache::scripttag::start_script for an example.)</span></p>
<h3><a name="_Toc421867122">Style Files</a></h3>
<p><span style='color:black'> <img width=432 height=255
src="Session%20Fou1_files/image002.jpg" v:shapes="_x0000_i1025"> </span></p>
<p><span style='font-size:14.0pt;color:black'><b>Fig. 2.4.1</b></span><span
style='font-size:14.0pt;color:black'> Using a style file</span></p>
<p><span style='color:black'><b>Style File specific tags</b></span></p>
<p><span style='color:black'><b><definetag></b></span><span
style='color:black'> - 2 arguments, <i>name</i></span><span style='color:black'>
name of new tag being defined, if proceeded with a / defining an end tag,
required; <i>parms</i></span><span style='color:black'> parameters of the
new tag, the value of these parameters can be accesed by $parametername. </span></p>
<p><span style='color:black'>*
<b><render></b></span><span
style='color:black'> - define what the new tag does for a non meta target </span></p>
<p><span style='color:black'>*
<b><meta></b></span><span
style='color:black'> - define what the new tag does for a meta target </span></p>
<p><span style='color:black'>*
<b><tex> / <web> / <latexsource></b></span><span style='color:black'>
- define what a new tag does for a specific no meta target, all data inside
a <render> is render to all targets except when surrounded by a specific
target tags.</span><span style='font-size:16.0pt;color:black'> </span></p>
<p class=MsoHeader> <img width=432 height=243
src="Session%20Fou1_files/image005.png" v:shapes="_x0000_i1026"> </p>
<p><span style='font-size:14.0pt'><b>Fig. 2.4.2</b></span><span
style='font-size:14.0pt'> The parser</span></p>
<h3><a name="_Toc421867123">HTML::LCParser - Alternative HTML::Parser interface</a></h3>
<p class=MsoPlainText>SYNOPSIS</p>
<p class=MsoPlainText> require HTML::LCParser;</p>
<p class=MsoPlainText> $p = HTML::LCParser->new("index.html")
|| die "Can't open: $!";</p>
<p class=MsoPlainText> while (my $token = $p->get_token) {</p>
<p class=MsoPlainText> #...</p>
<p class=MsoPlainText> }</p>
<p class=MsoPlainText>DESCRIPTION</p>
<p class=MsoPlainText>The C<HTML::LCParser> is an alternative interface
to the</p>
<p class=MsoPlainText>C<HTML::Parser> class. It is an C<HTML::PullParser>
subclass.</p>
<p class=MsoPlainText>The following methods are available:</p>
<p class=MsoPlainText>* $p = HTML::LCParser->new( $file_or_doc );</p>
<p class=MsoPlainText>The object constructor argument is either a file name,
a file handle</p>
<p class=MsoPlainText>object, or the complete document to be parsed.</p>
<p class=MsoPlainText>If the argument is a plain scalar, then it is taken as
the name of a</p>
<p class=MsoPlainText>file to be opened and parsed. If the file can't
be opened for</p>
<p class=MsoPlainText>reading, then the constructor will return an undefined
value and $!</p>
<p class=MsoPlainText>will tell you why it failed.</p>
<p class=MsoPlainText>If the argument is a reference to a plain scalar, then
this scalar is</p>
<p class=MsoPlainText>taken to be the literal document to parse. The value
of this</p>
<p class=MsoPlainText>scalar should not be changed before all tokens have been
extracted.</p>
<p class=MsoPlainText>Otherwise the argument is taken to be some object that
the</p>
<p class=MsoPlainText>C<HTML::LCParser> can read() from when it needs
more data. Typically</p>
<p class=MsoPlainText>it will be a filehandle of some kind. The stream
will be read() until</p>
<p class=MsoPlainText>EOF, but not closed.</p>
<p class=MsoPlainText>It also will turn attr_encoded on by default.</p>
<p class=MsoPlainText>* $p->get_token</p>
<p class=MsoPlainText>This method will return the next I<token> found
in the HTML document,</p>
<p class=MsoPlainText>or C<undef> at the end of the document. The
token is returned as an</p>
<p class=MsoPlainText>array reference. The first element of the array
will be a (mostly)</p>
<p class=MsoPlainText>single character string denoting the type of this token:
"S" for start</p>
<p class=MsoPlainText>tag, "E" for end tag, "T" for text,
"C" for comment, "D" for</p>
<p class=MsoPlainText>declaration, and "PI" for process instructions.
The rest of the array</p>
<p class=MsoPlainText>is the same as the arguments passed to the corresponding
HTML::Parser</p>
<p class=MsoPlainText>v2 compatible callbacks (see L<HTML::Parser>).
In summary, returned</p>
<p class=MsoPlainText>tokens look like this:</p>
<p class=MsoPlainText> ["S", $tag, $attr, $attrseq, $text,
$line]</p>
<p class=MsoPlainText> ["E", $tag, $text, $line]</p>
<p class=MsoPlainText> ["T", $text, $is_data, $line]</p>
<p class=MsoPlainText> ["C", $text, $line]</p>
<p class=MsoPlainText> ["D", $text, $line]</p>
<p class=MsoPlainText> ["PI", $token0, $text, $line]</p>
<p class=MsoPlainText>where $attr is a hash reference, $attrseq is an array
reference and</p>
<p class=MsoPlainText>the rest are plain scalars.</p>
<p class=MsoPlainText>* $p->unget_token($token,...)</p>
<p class=MsoPlainText>If you find out you have read too many tokens you can
push them back,</p>
<p class=MsoPlainText>so that they are returned the next time $p->get_token
is called.</p>
<p class=MsoPlainText>* $p->get_tag( [$tag, ...] )</p>
<p class=MsoPlainText>This method returns the next start or end tag (skipping
any other</p>
<p class=MsoPlainText>tokens), or C<undef> if there are no more tags in
the document. If</p>
<p class=MsoPlainText>one or more arguments are given, then we skip tokens until
one of the</p>
<p class=MsoPlainText>specified tag types is found. For example:</p>
<p class=MsoPlainText> $p->get_tag("font", "/font");</p>
<p class=MsoPlainText>will find the next start or end tag for a font-element.</p>
<p class=MsoPlainText>The tag information is returned as an array reference
in the same form</p>
<p class=MsoPlainText>as for $p->get_token above, but the type code (first
element) is</p>
<p class=MsoPlainText>missing. A start tag will be returned like this:</p>
<p class=MsoPlainText> [$tag, $attr, $attrseq, $text]</p>
<p class=MsoPlainText>The tagname of end tags are prefixed with "/",
i.e. end tag is</p>
<p class=MsoPlainText>returned like this:</p>
<p class=MsoPlainText> ["/$tag", $text]</p>
<p class=MsoPlainText>* $p->get_text( [$endtag] )</p>
<p class=MsoPlainText>This method returns all text found at the current position.
It will</p>
<p class=MsoPlainText>return a zero length string if the next token is not text.
The</p>
<p class=MsoPlainText>optional $endtag argument specifies that any text occurring
before the</p>
<p class=MsoPlainText>given tag is to be returned. All entities are unmodified.</p>
<p class=MsoPlainText>The $p->{textify} attribute is a hash that defines
how certain tags can</p>
<p class=MsoPlainText>be treated as text. If the name of a start tag matches
a key in this</p>
<p class=MsoPlainText>hash then this tag is converted to text. The hash
value is used to</p>
<p class=MsoPlainText>specify which tag attribute to obtain the text from.
If this tag</p>
<p class=MsoPlainText>attribute is missing, then the upper case name of the
tag enclosed in</p>
<p class=MsoPlainText>brackets is returned, e.g. "[IMG]". The
hash value can also be a</p>
<p class=MsoPlainText>subroutine reference. In this case the routine is
called with the</p>
<p class=MsoPlainText>start tag token content as its argument and the return
value is treated</p>
<p class=MsoPlainText>as the text.</p>
<p class=MsoPlainText>The default $p->{textify} value is:</p>
<p class=MsoPlainText> {img => "alt", applet => "alt"}</p>
<p class=MsoPlainText>This means that <IMG> and <APPLET> tags are
treated as text, and that</p>
<p class=MsoPlainText>the text to substitute can be found in the ALT attribute.</p>
<p class=MsoPlainText>* $p->get_trimmed_text( [$endtag] )</p>
<p class=MsoPlainText>Same as $p->get_text above, but will collapse any sequences
of white</p>
<p class=MsoPlainText>space to a single space character. Leading and trailing
white space is</p>
<p class=MsoPlainText>removed.</p>
<p class=MsoPlainText>EXAMPLES</p>
<p class=MsoPlainText>This example extracts all links from a document.
It will print one</p>
<p class=MsoPlainText>line for each link, containing the URL and the textual
description</p>
<p class=MsoPlainText>between the <A>...</A> tags:</p>
<p class=MsoPlainText> use HTML::LCParser;</p>
<p class=MsoPlainText> $p = HTML::LCParser->new(shift||"index.html");</p>
<p class=MsoPlainText> while (my $token = $p->get_tag("a"))
{</p>
<p class=MsoPlainText> my $url = $token->[1]{href}
|| "-";</p>
<p class=MsoPlainText> my $text = $p->get_trimmed_text("/a");</p>
<p class=MsoPlainText> print "$url\t$text\n";</p>
<p class=MsoPlainText> }</p>
<p class=MsoPlainText>This example extract the <TITLE> from the document:</p>
<p class=MsoPlainText> use HTML::LCParser;</p>
<p class=MsoPlainText> $p = HTML::LCParser->new(shift||"index.html");</p>
<p class=MsoPlainText> if ($p->get_tag("title")) {</p>
<p class=MsoPlainText> my $title = $p->get_trimmed_text;</p>
<p class=MsoPlainText> print "Title: $title\n";</p>
<p class=MsoPlainText> }</p>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionFou2.html
+++ doc/gutshtml/SessionFou2.html
<html>
<head>
<meta name=Title content="Session Four: CVS/Bugzilla Intro (Guy)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<title>Session Four: CVS/Bugzilla Intro (Guy)</title>
<style><!--
.Section1
{page:Section1;}
.Section2
{page:Section2;}
-->
</style>
</head>
<body bgcolor=#FFFFFF class="Normal" lang=EN-US>
<div class=Section1>
<h2>Session Four: CVS/Bugzilla Intro (Guy)</h2>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionFour.html
+++ doc/gutshtml/SessionFour.html
<html>
<head>
<meta name=Title
content="Session Four: How to install, Proper Debug Cycle for Handlers, Coding/Documentation Guidelines (Guy)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<title>Session Four: How to install, Proper Debug Cycle for Handlers, Coding/Documentation
Guidelines (Guy)</title>
<style><!--
.MsoPlainText
{font-size:10.0pt;
font-family:"Courier New";}
.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 Four: How to install, Proper Debug Cycle for Handlers, Coding/Documentation
Guidelines (Guy)</h2>
<h3><a name="_Toc421867078">lpml.dtd</a></h3>
<p class=MsoPlainText><span style='font-size:8.0pt'><!--</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Linux Packaging Markup Language version 1.0.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Date: May 3, 2001</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Author: Scott Harrison</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Linux Packaging Markup Language aims to capture</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
a source code development tree and effectively map</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
that to a compilation and installation process for</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
generating software packages and updating a run-time</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
system. This language helps handle dependency information,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
file globbing, file permissions, file ownerships,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
different targets for different linux distributions,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
preservation of configuration information, directory</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
permissions, directory ownerships, compilation commands,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> and,
ultimately, system software status reports.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!--</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>Copyright Michigan State
University Board of Trustees</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>This file is part of the
LearningOnline Network with CAPA (LON-CAPA).</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>LON-CAPA is free software;
you can redistribute it and/or modify</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>it under the terms of the
GNU General Public License as published by</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>the Free Software Foundation;
either version 2 of the License, or</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>(at your option) any later
version.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>LON-CAPA is distributed
in the hope that it will be useful,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>but WITHOUT ANY WARRANTY;
without even the implied warranty of</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>GNU General Public License
for more details.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>You should have received
a copy of the GNU General Public License</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>along with LON-CAPA; if
not, write to the Free Software</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>/home/httpd/html/adm/gpl.txt</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>http://www.lon-capa.org/</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ENTITY % lpml.Version</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
"-//TUX//DTD lpml 1.0 Final//EN"</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- Typical usage: --></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- <!DOCTYPE lpml
PUBLIC "-//TUX/DTD LPML 1.0 Final//EN"</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
"http://lpml.sourceforge.net/DTD/lpml.dtd"> --></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- <lpml> --></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- ... --></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- </lpml> --></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT categoryname
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT targetroot
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT sourceroot
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT target (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST target</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT source (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT targetdir (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST targetdir</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT sourcedir (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT glob (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT build (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT buildlink (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- </span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>The trigger attribute of
the build element is meant</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>to only have one of two
possible values:</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> "always run",
or</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> "run if dependencies
change"</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>Note that you must type
this text exactly in for the</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>attribute value to be understood
and processed correctly</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>by the lpml "make build"
parser.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT lpml</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> (targetroot|sourceroot|specialnotices|files|categories|directories|rpm)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST build</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> trigger CDATA
#REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT specialnotices
(specialnotice)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT categories
(category)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT directories
(directory)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT files (file|fileglob|link)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT dependencies
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT note (#PCDATA|table|b|br)*></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT b (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT specialnotice
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST specialnotice</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT category (chmod,chown,abbreviation)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST category</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> type
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> name
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT chown (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST chown</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT chmod (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST chmod</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT abbreviation
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT br EMPTY></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT nobr EMPTY></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT table (#PCDATA|tr)*></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST table</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> cellpadding
CDATA #IMPLIED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> cellspacing
CDATA #IMPLIED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> border
CDATA #IMPLIED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT tr (#PCDATA|td)*></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT td (#PCDATA|br|ul|tt|nobr)*></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT description
(#PCDATA|br|tt|u)*></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT ul (#PCDATA|li)*></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT li (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT tt (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT u (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT status (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT linkto (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT directory (targetdir+,categoryname,description?)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST directory</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT file (source,target+,categoryname,description?,buildlink?,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
note?,build?,status?,dependencies?)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT link (linkto,target,categoryname,description?,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
note?,build?,status?,dependencies?)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT fileglob (glob,sourcedir,targetdir,categoryname,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
description?,note?,build?,buildlink?,status?,dependencies?,filenames?)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT filenames (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpm (rpmSummary,rpmName,rpmVersion,rpmRelease,rpmVendor,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
rpmBuildRoot,rpmCopyright,rpmGroup,rpmSource,rpmAutoReqProv,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
rpmdescription,rpmpre,rpmRequires)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmSummary
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmName (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmVersion
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmRelease
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmVendor (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmBuildRoot
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmCopyright
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmGroup (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmSource (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmAutoReqProv
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmdescription
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmpre (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT rpmRequires
(item)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT item (#PCDATA)></span></p>
<h3><a name="_Toc421867079">piml.dtd</a></h3>
<p class=MsoPlainText><span style='font-size:8.0pt'><!--</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Post Installation Markup Language version 1.0.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Date: January 24, 2002</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Author: Scott Harrison</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Post Installation Markup Language works to perform</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
'intelligent' modifications of existing files on</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
a software system. This allows for the reconfiguring</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
of existing configuration files without having the</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
overlap of files between software packages. PIML</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
also allows you to have file permission/ownership</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
specifications different than that specified by the</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
original software package.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
For instance, Apache web server configuration files</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
are a popular target for many different software applications.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
A preferred approach is to simply append an 'Include ...'</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
line to the Apache web server configuration files.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Post Installation Markup Language is meant to be</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
a natural wrapper to target installations generated</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
by LPML (Linux Packaging Markup Language).</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Usages of Post Installation Markup Language are:</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
* immediately after installation with LPML</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
* generating '%post' syntax for RPMs</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
* generating post-installation syntax for Debian packages.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Dependency checking is supported as a poor man's probing....</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
There is no point in reconfiguring a file that isn't installed,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
or is missing a system component for successful operation.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Another neat use of PIML is to allow for invocation of various</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
processes after installation.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!--</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>Copyright Michigan State
University Board of Trustees</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>This file is part of the
LearningOnline Network with CAPA (LON-CAPA).</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>LON-CAPA is free software;
you can redistribute it and/or modify</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>it under the terms of the
GNU General Public License as published by</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>the Free Software Foundation;
either version 2 of the License, or</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>(at your option) any later
version.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>LON-CAPA is distributed
in the hope that it will be useful,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>but WITHOUT ANY WARRANTY;
without even the implied warranty of</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>GNU General Public License
for more details.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>You should have received
a copy of the GNU General Public License</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>along with LON-CAPA; if
not, write to the Free Software</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>/home/httpd/html/adm/gpl.txt</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>http://www.lon-capa.org/</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ENTITY % piml.Version</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
"-//TUX//DTD piml 1.0 Final//EN"></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- Typical usage:</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
<!DOCTYPE piml PUBLIC "-//TUX//DTD PIML 1.0 Final//EN"</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
"http://lpml.sourceforge.net/DTD/piml.dtd"></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
<piml></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
</piml></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> --></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT categoryname
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT targetroot
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT target (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST target</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT piml (targetroot|specialnotices|files|categories)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT specialnotices
(specialnotice)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT categories
(category)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT files (file)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT dependencies
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST dependencies</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT note (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT specialnotice
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT category (chmod,chown,abbreviation)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST category</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> type
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> name
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT chown (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST chown</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT chmod (#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST chmod</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> dist
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT abbreviation
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT file (target,categoryname?,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
note?,status?,dependencies?,perlscript)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT TARGET EMPTY></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT perlscript
(#PCDATA|TARGET)*></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST perlscript</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> mode
CDATA #REQUIRED</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> ></span></p>
<h3><a name="_Toc421867080">xfml.dtd</a></h3>
<p class=MsoPlainText><span style='font-size:8.0pt'><!--</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
XML Filter Markup Language version 1.0.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> Date:
January 27, 2002</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
Author: Scott Harrison</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
XML Filter Markup Language works to extract those sections</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
of an XML document matching certain conditions. This, in some</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
respects, relies on functionality similar to that expected</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
with XSL-type files. (I do not use standard XSL syntax because</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
I am not convinced that it would be simple and elegant for</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
this particular task).</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
This is anticipated to be a very important feature associated</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
with a larger Makefile-ish type approach involving the XML dtds:</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
LPML and PIML.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
LPML (Linux Packaging Markup Language) can work to install files</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
on a single computer or a distributed network of computers with</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
pre-configured ssh accessibility (.ssh/authorized_keys, etc).</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
PIML (Post Installation Markup Language) works to coordinate the</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
last little scripts that need to be run after an installation.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
With all this make-"power", wouldn't it be nice to only pass through</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> portions
of an LPML specification?</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!--</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>Copyright Michigan State
University Board of Trustees</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>This file is part of the
LearningOnline Network with CAPA (LON-CAPA).</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>LON-CAPA is free software;
you can redistribute it and/or modify</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>it under the terms of the
GNU General Public License as published by</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>the Free Software Foundation;
either version 2 of the License, or</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>(at your option) any later
version.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>LON-CAPA is distributed
in the hope that it will be useful,</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>but WITHOUT ANY WARRANTY;
without even the implied warranty of</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>GNU General Public License
for more details.</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>You should have received
a copy of the GNU General Public License</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>along with LON-CAPA; if
not, write to the Free Software</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>/home/httpd/html/adm/gpl.txt</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>http://www.lon-capa.org/</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- Note: current status
is that choice:include is currently unsupported and</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
all matching statements REQUIRE two levels of 'when' statements;</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
not one or more than two... okay.. this will be fixed soon --></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ENTITY % xfml.Version</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
"-//TUX//DTD piml 1.0 Final//EN"></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!-- Typical usage:</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
<!DOCTYPE xfml PUBLIC "-//TUX//DTD PIML 1.0 Final//EN"></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> <xfml></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>
</xfml></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'>--></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT choice:include
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT choice:exclude
(#PCDATA)></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT xfml (clause)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT clause (when:cdata|when:name|when:attribute|choice:exclude)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT when:name</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> (when:cdata|when:name|when:attribute|choice:include|choice:exclude)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT when:attribute
</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> (when:cdata|when:name|when:attribute|choice:include|</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> choice:exclude)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ELEMENT when:cdata
</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> (when:cdata|when:name|when:attribute|choice:include|</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> choice:exclude)+></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST when:name</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> match
CDATA #REQUIRED></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST when:attribute</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> match
CDATA #REQUIRED></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST when:cdata</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> match
CDATA #REQUIRED></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST choice:include</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> nodename
CDATA #REQUIRED></span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'><!ATTLIST choice:exclude</span></p>
<p class=MsoPlainText><span style='font-size:8.0pt'> nodename
CDATA #REQUIRED></span></p>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionOn1.html
+++ doc/gutshtml/SessionOn1.html
<html><head><meta name=Title content="Session One: Roles, Data Storage, Parameters (Gerd)"><meta http-equiv=Content-Type content="text/html; charset=macintosh"><title>Session One: Roles, Data Storage, Parameters (Gerd)</title><style><!--.MsoHeader {tab-stops:center 3.0in right 6.0in; font-size:10.0pt; font-family:"Times New Roman";}.Preformatted {tab-stops:0in 47.95pt 95.9pt 143.85pt 191.8pt 239.75pt 287.7pt 335.65pt 383.6pt 431.55pt 479.5pt; font-size:10.0pt; font-family:"Courier New"; layout-grid-mode:line;}.Section1 {page:Section1;}.Section2 {page:Section2;}--></style></head><body bgcolor=#FFFFFF class="Normal" lang=EN-US><div class=Section1> <h2>Session One: Roles, Data Storage, Parameters (Gerd)</h2> <h3><a name="_Toc421867084">Domains</a></h3> <p><span style='font-size:10.0pt'>Every user in LON-CAPA is member of one domain. A domain can be institutional and "open", for example "msu" or "wscc" - open means that in it there can be students, authors and other users. A domain can also be functional, for example "timss_tests" or "smith_publishers. Physically, every domain needs at least one dedicated library server.</span></p> <h3><a name="_Toc421867085">Userdata</a></h3> <p>Every user in the system has one library server, which is their home server. It stores the authoritative copy of all of their records. Internally, this data is stored in a directory </p> <p><span style='font-family:"Courier New"'> /home/httpd/lonUsers/<i>domain</i></span><spanstyle='font-family:"Courier New"'>/<i>1.char</i></span><span style='font-family:"Courier New"'>/<i>2.char</i></span><span style='font-family:"Courier New"'>/<i>3.char</i></span><spanstyle='font-family:"Courier New"'>/<i>username</i></span><spanstyle='font-family:"Courier New"'>/</span></p> <p class=MsoHeader>for example</p> <p><span style='font-family:"Courier New"'> /home/httpd/lonUsers/msu/s/m/i/smith/</span></p> <div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>ls -alF /home/httpd/lonUsers/msu/k/o/r/kortemey</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 13006 May 15 12:21 activity.log</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 12413 Oct 26 2000 coursedescriptions.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 11361 Oct 26 2000 coursedescriptions.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 13576 Apr 19 17:45 critical.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 1302 Apr 19 17:45 critical.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 13512 Apr 19 17:45 email_status.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 1496 Apr 19 17:45 email_status.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 12373 Apr 19 17:45 environment.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 169 Apr 19 17:45 environment.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 12315 Oct 25 2000 junk.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 1590 Nov 4 1999 junk.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 23626 Apr 19 17:45 msu_12679c3ed543a25msul1.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 3363 Apr 19 17:45 msu_12679c3ed543a25msul1.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 17242 Nov 13 2000 msu_1827338c7d339a3msul1.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 1986 Nov 13 2000 msu_1827338c7d339a3msul1.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 18497 Dec 21 11:25 msu_1827338c7d339b4msul1.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 3801 Dec 21 11:25 msu_1827338c7d339b4msul1.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 12470 Apr 19 17:45 nohist_annotations.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 13395 Nov 15 2000 nohist_bookmarks.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 104264 Apr 19 17:45 </span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'> nohist_calculatedsheets_msu_12679c3ed543a25msul1.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 13248 Apr 5 17:18 </span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'> nohist_calculatedsheets_msu_1827338c7d339b4msul1.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 12568 Oct 28 2000 nohist_coursedescriptions.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 765954 Apr 19 17:45 nohist_email.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 710631 Apr 19 17:45 nohist_email.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 13 Apr 19 17:45 passwd</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 12802 May 3 13:08 roles.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 1316 Apr 12 16:05 roles.hist</span></p> </div> <p><span style='font-size:14.0pt'><b>Fig.2.1.1</b></span><spanstyle='font-size:14.0pt'> Directory listing of users home directory</span></p> <p>Files ending on <span style='font-family:"Courier New"'>.db</span> are GDBM files, files ending on <span style='font-family:"Courier New"'>.hist</span> are logs of entries to these files. Filenames starting with nohist do not keep history files. <span style='font-family:"Courier New"'>passwd</span> stores the login mechanism and password (if applicable). </p> <p><span style='font-family:"Courier New"'>environment</span> stores name-value pairs that are automatically added to the session environment at login time, for example the full name, etc. </p> <p><span style='font-family:"Courier New"'>roles</span> stores the userroles.</p> <p><span style='font-family:"Courier New"'>critical</span>, <spanstyle='font-family:"Courier New"'>nohist_email</span>, and <spanstyle='font-family:"Courier New"'>email_status</span> are used by the messaging mechanisms</p> <p>Files with a course-ID as name, for example <spanstyle='font-size:9.0pt;font-family:"Courier New"'>msu_12679c3ed543a25msul1.db</span>, store performance data for that student in the course, as stored by <spanstyle='font-family:"Courier New"'>store</span> and <span style='font-family:"Courier New"'>restore</span> in lonnet.</p> <p>Other files are caches, for example for previously calculated spreadsheets, etc.</p> <h3><a name="_Toc421867086">Courses</a></h3> <p><span style='font-size:10.0pt'>Courses are assigned to users, not vice versa. Internally, courses are handled like users without login privileges. The username is a unique ID, for example </span><span style='font-size:9.0pt;font-family:"Courier New"'>msu_12679c3ed543a25msul1</span><spanstyle='font-size:10.0pt;font-family:"Courier New"'> </span><spanstyle='font-size:10.0pt'> every course in every semester has a unique ID, there is no semester transition. The userdata of the course includes the full name of the course, a pointer to its top-level resource map (course map), and any associated deadlines, spreadsheets, etc., as well as a course enrollment list. The latter is somewhat redundant, since in principle, this list could be produced by going through the roles of all users, and looking for the valid role of being student in that course.</span></p> <div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>ls -alF /home/httpd/lonUsers/msu/1/2/6/12679c3ed543a25msul1/</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 17155 Apr 25 16:20 classlist.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 60912 Apr 25 16:20 classlist.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 12354 Jan 4 16:40 environment.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 82 Jan 4 16:40 environment.hist</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 103030 May 15 14:47 nohist_calculatedsheets.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 13050 May 9 21:04 nohist_expirationdates.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 6 Jan 4 16:40 passwd</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r----- 1 www users 17457 May 9 21:04 resourcedata.db</span></p> <p class=Preformatted style='border:none;padding:0in;'><span style='font-size:8.0pt'>-rw-r--r-- 1 www users 8888 May 9 21:04 resourcedata.hist</span></p> </div> <p><span style='font-size:14.0pt'><b>Fig.2.1.2</b></span><spanstyle='font-size:14.0pt'> Directory listing of courses home directory</span></p> <p><span style='font-size:9.0pt;font-family:"Courier New"'>classlist</span> is this list of students in the course, <span style='font-size:9.0pt;font-family:"Courier New"'>environment</span> includes the courses full name, etc, and <span style='font-size:9.0pt;font-family:"Courier New"'>resourcedata</span> are deadlines, etc (parameters for homework).</p> <h3><a name="_Toc421867087">Roles</a></h3> <p><span style='font-size:10.0pt'>Users keep their login, data, preferences, etc, over their complete tenure. Every user can have several roles, and the roles can change over the lifetime of a username. For example, over the course of studies, a student username assumes the role of "student" in different courses. Roles can have start and expiration dates.</span></p> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=429 colspan=3 class="Normal"> <p align=center style='text-align:center'><span style='font-size:9.0pt'>Example: User smith at msu</span></p></td> </tr> <tr> <td width=85 class="Normal"> <p><span style='font-size:9.0pt'>Instructor</span></p></td> <td width=171 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>msu_12679c3ed543a25msul1</span></p></td> <td width=170 class="Normal"> </td> </tr> <tr> <td width=85 class="Normal"> <p><span style='font-size:9.0pt'>Course Coordinator</span></p></td> <td width=171 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>msu_12679c3ed543a25msul1</span></p></td> <td width=170 class="Normal"> <p><span style='font-size:9.0pt'>From July 1st, 2001 to December 30th, 2001</span></p></td> </tr> <tr> <td width=85 class="Normal"> <p><span style='font-size:9.0pt'>Instructor</span></p></td> <td width=171 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>msu_18879c3ed543a25msul2</span></p></td> <td width=170 class="Normal"> <p><span style='font-size:9.0pt'>From Jan 1st, 2001 to June 30th, 2001</span></p></td> </tr> <tr> <td width=85 class="Normal"> <p><span style='font-size:9.0pt'>Resource Author</span></p></td> <td width=171 class="Normal"> <p><tt><span style='font-size:9.0pt;font-family:"Courier New"'>msu</span></tt></p></td> <td width=170 class="Normal"> <p><span style='font-size:9.0pt'>From Aug 15th, 2000</span></p></td> </tr> <tr> <td width=85 class="Normal"> <p><span style='font-size:9.0pt'>Student</span></p></td> <td width=171 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>msu_82679c3gd543a35msul1</span></p></td> <td width=170 class="Normal"> <p><span style='font-size:9.0pt'>From July 1st, 2001 to December 30th, 2001 </span></p></td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig.2.1.3</b></span><spanstyle='font-size:14.0pt'> Sample Instructor Roles</span></p> <brclear=ALL style='page-break-before:always'> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=433 colspan=3 class="Normal"> <p align=center style='text-align:center'><span style='font-size:9.0pt'>Example: User jones at msu</span></p></td> </tr> <tr> <td width=117 class="Normal"> <p><span style='font-size:9.0pt'>Custom Role "Helproom TA (smith at msu)"</span></p></td> <td width=194 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>msu_82679c3gd543a35msul1</span></p></td> <td width=119 class="Normal"> <p><span style='font-size:9.0pt'>From July 1st, 2001 to December 30th, 2001</span></p></td> </tr> <tr> <td width=117 class="Normal"> <p><span style='font-size:9.0pt'>Student</span></p></td> <td width=194 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>msu_02679c3gq543a35msul1</span></p></td> <td width=119 class="Normal"> <p><span style='font-size:9.0pt'>From Jan 1st, 2001 to June 30th, 2001</span></p></td> </tr> <tr> <td width=117 class="Normal"> <p><span style='font-size:9.0pt'>Student</span></p></td> <td width=194 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>umn_82679c3gd543a35umnl2</span></p></td> <td width=119 class="Normal"> <p><span style='font-size:9.0pt'>From July 1st, 2001 to December 30th, 2001</span></p></td> </tr> <tr> <td width=117 class="Normal"> <p><span style='font-size:9.0pt'>Exam Proctor</span></p></td> <td width=194 class="Normal"> <p><span style='font-size:9.0pt;font-family:"Courier New"'>msu_82679c3gd543a35msul1</span></p></td> <td width=119 class="Normal"> <p><span style='font-size:9.0pt'>Feb 21st, 2001, 1pm to 3pm</span></p></td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig.2.1.4</b></span><spanstyle='font-size:14.0pt'> Sample Student Roles</span></p> <h3><a name="_Toc421867088">Custom Roles</a></h3> <p>Course Coordinators are able to define named "Custom Roles" for their courses within a pre-defined set of capabilities. In addition to these custom roles, there are three standard course faculty/staff roles defined, Instructor, Exam Proctor and TA. The instructor of record in a small class is likely to be "Course Coordinator" and "Instructor" during the term when the course is running, and might remain course coordinator afterwards. Course coordinator can assign themselves new roles for their course anytime.</p></div><div class=Section7> <h1><a name="_Toc514840853"> </a></h1> <p>Custom role definitions are stored in the <spanstyle='font-size:9.0pt;font-family:"Courier New"'>roles.db</span> file of the role author.</p> <h3><a name="_Toc421867089">Choose a Role, Role Privileges</a></h3> <p><span style='font-family:"Courier New"'>lonroles </span>is a handler that allows a user to switch roles in mid-session.<spanstyle='font-family:"Courier New"'> </span>LON-CAPA attempts to work with No Role Specified as widely as possible, but certain handlers for example need specification which course they should act on, etc. Both in this scenario, and when the handler determines via <span style='font-family:"Courier New"'>lonnet</span>s <span style='font-family:"Courier New"'>&allowed</span> function that a certain action is not allowed, <span style='font-family:"Courier New"'>lonroles</span> is used as errorhandler. <span style='font-family:"Courier New"'>lonroles</span> can also be accessed via the CRS button in the Remote Control. <b>Fig. 2.1.5</b><spanstyle='font-weight:normal'> shows a sample output of </span><spanstyle='font-family:"Courier New"'>lonroles</span>.</p> <p><img border=0 width=434 height=198 id="_x0000_i1026"src="handout_files/image002.jpg"></p> <p><b>Fig. 2.1.5</b><span style='font-weight:normal'> Sample Roles Choice in </span><span style='font-size:12.0pt;font-family:"Courier New"'>lonroles.pm</span></p> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='border:none;padding:0in'><span style='font-size:8.0pt'>System: /</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><spanstyle='font:7.0pt "Times New Roman"'> </span></span><spanstyle='font-size:8.0pt'>Browse resources</span></p> <p style='border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><spanstyle='font:7.0pt "Times New Roman"'> </span></span><spanstyle='font-size:8.0pt'>Generate anonymous statistics</span></p> <p style='border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><spanstyle='font:7.0pt "Times New Roman"'> </span></span><spanstyle='font-size:8.0pt'>Create a Course Custom Role</span></p> <ul type=disc> <li style='border:none;padding:0in'><span style='font-size:8.0pt'>Send internal email</span></li> </ul> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='border:none;padding:0in'><span style='font-size:8.0pt'>Domain: msu</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Assemble resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Browse resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Administrator (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Author (UNIX authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Co-Author (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Course Coordinator (UNIX authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke Course Custom Role (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Domain Guest (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Exam Proctor (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Instructor (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Librarian (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Copy resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Student (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Teaching Assistant (UNIX authenticated, Internally authenticated, Kerberos authenticated)</span></p> <ul type=disc> <li style='line-height:90%;border:none; padding:0in'><span style='font-size:8.0pt'>Create, edit, modify and publish resources</span></li> <li style='line-height:90%;border:none; padding:0in'><span style='font-size:8.0pt'>Modify authentication mechanism and data for a user</span></li> </ul> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='border:none;padding:0in'><span style='font-size:8.0pt'>Course: lbs267L Lab SS01</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Assemble resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke Course Custom Role (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Exam Proctor (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Instructor (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Copy resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Student (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Teaching Assistant (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Create, edit, modify and publish resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Generate anonymous statistics</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Set assessment parameters</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Send broadcast and receipt-required email</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>View grades</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='border:none;padding:0in'><span style='font-size:8.0pt'>Course: lbs267 Lecture SS01</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Assemble resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke Course Custom Role (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Exam Proctor (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Instructor (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Copy resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Student (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Teaching Assistant (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Create, edit, modify and publish resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Generate anonymous statistics</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Set assessment parameters</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Send broadcast and receipt-required email</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>View grades</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='border:none;padding:0in'><span style='font-size:8.0pt'>Course: Demo Course</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Assemble resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke Course Custom Role (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Exam Proctor (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Instructor (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Copy resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Student (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Grant/revoke role of Teaching Assistant (Internally authenticated, Kerberos authenticated)</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Create, edit, modify and publish resources</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Generate anonymous statistics</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Set assessment parameters</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>Send broadcast and receipt-required email</span></p> <p style='line-height:90%;border:none;padding:0in'><span style='font-size:8.0pt;font-family:Symbol'><span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:8.0pt'>View grades</span></p> </div> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='border:none;padding:0in'><span style='font-size:8.0pt'>Construction Space: User: korte, Domain: msu</span></p> </div> <p><span style='font-size:14.0pt'><b>Fig. 2.1.6</b></span><spanstyle='font-size:14.0pt'> Sample Set of Privileges</span></p> <p><b>Fig. 2.1.6</b><span style='font-weight:normal'> shows a common set of privileges for the user roles in </span><b>Fig. 2.1.5</b><spanstyle='font-weight:normal'>. The plain text explanations of the various roles and the extent of them is drawn from </span><span style='font-family:"Courier New"'>/home/httpd/rolesplain.tab</span>, see <b>Fig. 2.1.7</b><span style='font-weight:normal'>.</span></p> <div style='border:solid windowtext .5pt;padding:1.0pt 1.0pt 1.0pt 1.0pt'> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>[www@zaphod www]$ more /home/httpd/lonTabs/rolesplain.tab</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>s:system wide</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>d:domain wide</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>c:course wide</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>U:UNIX authenticated</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>I:Internally authenticated</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>K:Kerberos authenticated</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>C:according to course preferences</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>S:according to custom role settings</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>R:according to resource settings</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>L:unless locked</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>X:according to user session state</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>F:no restrictions</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cm:No Role, Cumulative Privileges</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>su:Superuser</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>dc:Domain Coordinator</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cc:Course Coordinator</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>in:Instructor</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ta:Teaching Assistant</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ep:Exam Proctor</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cr:Course Custom Role</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>st:Student</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ad:Administrator</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>li:Librarian </span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>au:Author</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>dg:Domain Guest</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ca:Co-Author</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>csu:Grant/revoke role of Superuser</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cdc:Grant/revoke role of Domain Coordinator</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ccc:Grant/revoke role of Course Coordinator</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cin:Grant/revoke role of Instructor</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cta:Grant/revoke role of Teaching Assistant</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cep:Grant/revoke role of Exam Proctor</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ccr:Grant/revoke Course Custom Role</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cst:Grant/revoke role of Student</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cad:Grant/revoke role of Administrator</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cli:Grant/revoke role of Librarian</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cau:Grant/revoke role of Author</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cdg:Grant/revoke role of Domain Guest</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cca:Grant/revoke role of Co-Author</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>mcr:Create a Course Custom Role</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>mau:Modify authentication mechanism and data for a user</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>bre:Browse resources</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>are:Assemble resources</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cre:Copy resources</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ere:Create, edit, modify and publish resources</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>mme:Modify metadata for a resource </span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>vgr:View grades</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>mgr:Modify grades</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>gan:Generate anonymous statistics</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>dcm:Disable all communication among students</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>sma:Send internal email</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>srm:Send broadcast and receipt-required email</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>pch:Post to chatrooms and bulletin boards</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>dch:Delete messages from bulletin boards</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>pac:Post anonymously</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>rin:Get identity behind anonymous postings</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>las:Lock and unlock assessments</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>opa:Set assessment parameters</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ain:Assume a student's identity </span></p> </div> <p><span style='font-size:14.0pt'><b>Fig. 2.1.7</b></span><spanstyle='font-size:14.0pt'> Explanation of Privilege Shorthands</span></p> <h3><a name="_Toc421867090">Role Initialization</a></h3> <p>The privileges for a user are established at login time and stored in the session environment. A consequence is that a new role does not become active till the next login. Handlers are able to query for privileges using<span style='font-family:"Courier New"'> </span><span style='font-size:9.0pt;font-family:"Courier New"'>lonnet</span>s<span style='font-size:8.0pt;font-family:"Courier New"'> </span><span style='font-size:9.0pt;font-family:"Courier New"'>&allowed</span><span style='font-size:8.0pt;font-family:"Courier New"'> </span>function. When a user first logs in, their role is the common role, which means that they have the sum of all of their privileges. During a session it might become necessary to choose a particular role, which as a consequence also limits the user to only the privileges in that particular role.</p> <div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>[www@zaphod www]$ more /home/httpd/lonTabs/roles.tab</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>su:s csu&U:sma:mau:cdc&U</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>dc:s sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>dc:d cli&UIK:cau&U:cdg&UIK:mau:ccc&U:cin&UIK:cta&UIK:cep&UIK:ccr&UIK:cst&UIK:cad&UIK</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cc:s bre:sma:mcr</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cc:c cin&IK:cta&IK:cep&IK:ccr&IK:cst&IK:are:cre:ere:vgr:gan:srm:opa</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>in:s sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>in:d bre</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>in:c vgr:mgr:gan:dcm:srm:pch:dch:pac:rin:las:opa</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ta:d sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ta:c bre&RL:vgr&CR:mgr&CR:srm:pch:dch:pac</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ep:d sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ep:c bre&R:mgr&R:dcm:las</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cr:d sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>cr:c bre&R:vgr&SCR:mgr&SCR:gan&SCR:dcm&SC:srm&SC:pch:dch&S:pac:rin&S:las&SR:opa&SR</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>st:d sma&L</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>st:c bre&RXL:pch&L:pac&CL</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ad:d sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ad:c bre:gan:vgr:srm</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>li:s gan:sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>li:d mme</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>au:s gan:sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>au:d bre:are:cre:ere:cca&IK</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ca:s gan:sma</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ca:d bre:are:cre:ere</span></p> <p style='line-height:90%;border:none;padding:0in'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>dg:d bre&R</span></p> </div> <p><span style='font-size:14.0pt'><b>Fig. 2.1.8</b></span><spanstyle='font-size:14.0pt'> Privileges by roles and extent</span></p> <p><span style='font-size:12.0pt;font-family:Arial'>Role Assignment</span></p> <p><span style='font-size:12.0pt;font-family:Arial'><imgborder=0 width=175 height=227 id="_x0000_i1027"src="handout_files/image003.jpg"></span></p> <p><span style='font-size:14.0pt'><b>Fig. 2.1.9</b></span><spanstyle='font-size:14.0pt'> Assigning privileges to a user</span></p> <ul type=disc> <li><span style='font-family:"Courier New"'>loncreateuser.pm</span> allows users to within their own privileges (c<i>xx</i><span style='font-style:normal'> privileges) create users and give them roles (<b>Fig. 2.1.9</b></span>)<span style='font-size:12.0pt;font-family:Arial'> </span></li> <li><span style='font-family:"Courier New"'>londropadd.pm</span> allows course coordinators to upload courselists in different formats, and automatically create users (if they do not exist already), assign them the role of student in a course, and add them to the classlist. </li> <li><span style='font-family:"Courier New"'>loncreatecourse.pm</span> allows domain coordinators to create new courses and assign course coordinators.</li> </ul> <span style='font-size:12.0pt;font-family:Arial'><b><i><br clear=ALLstyle='page-break-before:always'> </i></b></span> <h2><a name="_Toc514840854"> </a></h2></div><brclear=ALL style='page-break-before:always;'><div class=Section2> </div></body></html>
Index: doc/gutshtml/SessionOn2.html
+++ doc/gutshtml/SessionOn2.html
<html>
<head>
<meta name=Title
content="Session One: Problem Engine/Special Targets (grade, edit, print) (Guy)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<link rel=Edit-Time-Data href="Session%20On2_files/editdata.mso">
<title>Session One: Problem Engine/Special Targets (grade, edit, print) (Guy)</title>
<style><!--
.MsoHeader
{tab-stops:center 3.0in right 6.0in;
font-size:10.0pt;
font-family:"Times New Roman";}
.H5
{font-size:10.0pt;
font-family:"Times New Roman";
layout-grid-mode:line;
font-weight:bold;}
.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 One: Problem Engine/Special Targets (grade, edit, print) (Guy)</h2>
<h3><a name="_Toc421867127">Tags</a></h3>
<ul type=disc>
<li><b>Response tags </b></li>
</ul>
<p>Arguments for all response tags </p>
<ul type=disc>
<ul type=circle>
<li><i>ID</i><span style='font-style:
normal'>, if this isn't set it will be set during the publication step.
It is used to assign parameters names in a way that can be tracked if
an instructor modifies things by hand. </span></li>
<li><i>name</i><span
style='font-style:normal'> optional, if set, it will be used by the resource
assembly tool when one is modifying parameters. </span></li>
</ul>
</ul>
<p>Implemented response tags </p>
<ul type=disc>
<ul type=circle>
<li><b><responseparam></b><span
style='font-weight:normal'> if it appears it should be inside of a <*response>
tag, defines an externally adjustable parameter for this question. Arguments:
</span></li>
<ul type=square>
<li><i>default</i><span
style='font-style:normal'> required, specifies a default value for the
parameter </span></li>
<li><i>name</i><span
style='font-style:normal'> required, specifies an internal name for the
parameter </span></li>
<li><i>type</i><span
style='font-style:normal'> required specifies the type of parameter, one
of "tolerance", "int", "float", "string",
"date" (configuration of paramters is handled by lonparmset.pm
and parameter.html) </span></li>
<li><i>description</i><span
style='font-style:normal'> a string describing the parameter, this is what
is used to talk about a parameter outside of a problem </span></li>
</ul>
<li><b><parameter></b><span
style='font-weight:normal'> exactly the same as <responseparam> currently,
but should not appear inside of a <*response> </span></li>
<li><b><numericalresponse></b><span
style='font-weight:normal'> implements a numerical answer, it needs an internal
</span><b><textline></b><span style='font-weight:normal'> for the
response to go in. It checks all styles of numerical supported in CAPA.
Possible args are: </span></li>
<ul type=square>
<li><i>answer</i><span
style='font-style:normal'> required, specifies the correct answer, may
be either a perl list or scalar</span></li>
<li><i>units</i><span
style='font-style:normal'> optional, specifies unit of correct answer,
CAPA style</span></li>
</ul>
<li><b><stringresponse></b><span
style='font-weight:normal'> implements a string answer, it needs an internal
</span><b><textline></b><span style='font-weight:normal'> for the
response to go in. It can check the string for either case or order. </span></li>
<ul type=square>
<li><i>answer</i><span
style='font-style:normal'> required, specifies the correct answer, may
be either a perl list or scalar</span></li>
<li><i>type</i><span
style='font-style:normal'> optional, CAPA style str args, cs/ci/mc </span></li>
<ul type=square>
<li>cs - case senesitive, order important</li>
<li>ci - case insenesitive, order important</li>
<li>mc - case insenesitive, order unimportant</li>
</ul>
</ul>
<li><b><essayresponse></b><span
style='font-weight:normal'> implements a ungraded large text response, it
need an internal </span><b><textarea></b><span style='font-weight:
normal'> for the response to go in. </span></li>
<li><b><imageresponse></b><span
style='font-weight:normal'> implements a image click style image submission,
uses the foil structure tags <a href="#foil">below</a>. Additional tags
that should appear in a <foil> are: </span></li>
<ul type=square>
<li><b><image></b><span
style='font-weight:normal'> required, the contained text specifies a published
graphical resource that is the image used, should only appear once per
foil</span></li>
<li><b><rectangle></b><span
style='font-weight:normal'> required, the contained text specifies a rectangular
area that is correct, should look like (1,2)-(3,4), at least 1 required</span></li>
<li><b><text></b><span
style='font-weight:normal'> required, the contained text is printed on
top of the image.</span></li>
</ul>
<li><b><optionresponse></b><span
style='font-weight:normal'> implements a "select from these choices"
style question, the choices are specified by the instructor, it uses the
foil structure tags <a href="#foil">below</a> with this additional args:
</span></li>
<ul type=square>
<li><b><foilgroup></b><span
style='font-weight:normal'> is required to have <i>options</i></span> which
should be a perl list of possible options for the student. </li>
</ul>
<li><b><radiobuttonresponse></b><span
style='font-weight:normal'> implements a true / false style question with
1 correct answer.it uses the foil structure tags <a href="#foil">below</a>
but the <i>value</i></span> of a <foil>can only be "true"
or "false" or "unused" </li>
<li><b><dataresponse></b><span
style='font-weight:normal'> implements a straight data storage entry idea,
needs and interveing input tag like <textline> to work correctly.<br>
Arguments: </span></li>
<ul type=square>
<li><i>name</i><span
style='font-style:normal'> internal name for the value, it will have the
part id and respose id added on to it </span></li>
<li><i>type</i><span
style='font-style:normal'> type of data stored in this response field,
should be one of the types supported by parameter.html </span></li>
<li><i>display</i><span
style='font-style:normal'> a string that will be used to describe the field
when interfacing with humans </span></li>
</ul>
</ul>
</ul>
<p> <span style='font-size:10.0pt;
font-family:"Courier New"'>o<span style='font:7.0pt "Times New Roman"'>
</span></span> <b><externalresponse></b><span style='font-weight:
normal'> implements the ability to have an external program grade a response,
expects either a <textline> or <textfield> inside the tag. </span></p>
<p>Arguments: </p>
<ul type=disc>
<ul type=circle>
<ul type=square>
<li><i>url</i><span
style='font-style:normal'> the url to submit the answer and form to, does
not need to be a LON-CAPA machine. </span></li>
<li><i>answer</i><span
style='font-style:normal'> a string or scalar variable that can encode
something that should encode the correct answer, in some cases this
may be nothing. </span></li>
<li><i>form</i><span
style='font-style:normal'> a hash variable name that will be submitted
to the remote site as a HTTP form. </span></li>
</ul>
</ul>
</ul>
<p>The response of the remote server needs to be in XML as follows. </p>
<pre> <loncapagrade> <awardetail> CORRECT </awardetail> <message> A message to be shown to the students </message> </loncapagrade> </pre>
<ul type=disc>
<ul type=circle>
<ul type=square>
<li><b><loncapagrade></b><span
style='font-weight:normal'> no arguments but must surround the response.
</span></li>
<li><b><awardetail></b><span
style='font-weight:normal'> required inner tag, the response inside must
be one of the detailed responses that appears in the data storage documentation
(CVS:loncapa/doce/homework/datastorage) </span></li>
<li><b><message></b><span
style='font-weight:normal'> optional message to have shown to the student
</span></li>
</ul>
</ul>
</ul>
<ul type=disc>
<li><a name=foil><b>Foil Structure Tags</b></a><b> </b></li>
</ul>
<p>All tags that implement a foil structure have an optional arg of <i>max</i><span style='font-style:normal'>
that controls the maximum number of total foils to show. </span></p>
<ul type=disc>
<ul type=circle>
<li><b><foilgroup></b><span
style='font-weight:normal'> required, must be the tag that surrounds all
foil definitions </span></li>
<li><b><foil></b><span
style='font-weight:normal'> required, all data inside is a possible foil
</span></li>
<li><b><conceptgroup></b><span
style='font-weight:normal'> optional, surrounds a collection of <foil>,
when a problem is displayed only one of the contained <foil>is selected
for display. It receives one required argument <i>concept</i></span>.
</li>
</ul>
<li><b>Hint structure </b></li>
</ul>
<p>All of these tags must appear inside a <b><*response></b><span
style='font-weight:normal'> tag. </span></p>
<ul type=disc>
<ul type=circle>
<li><b><hintgroup></b><span
style='font-weight:normal'> Tag that surrounds all of a hint. </span></li>
<li><b><hintpart></b><span
style='font-weight:normal'> required, Tag to implement conditional hints.
It has a required argument <i>on</i></span>. When a <*hint> tag
named the same as the value the on attribute evaluates to be correct the
<hintpart> will show. If no other <hintpart> are to show then
all hintparts with a <i>on</i><span style='font-style:normal'> of "default"
will show </span></li>
<li><b><numericalhint></b><span
style='font-weight:normal'> has all the arguments that <numericalresponse>,
does and the required attribute <i>name</i></span> which should be set
to the value of which <hintpart> will be shown. </li>
</ul>
<li><b>Input Tags </b></li>
</ul>
<p>This group of tags implement a mechanism for getting data for students, they
will usually be used by a <*response>. </p>
<ul type=disc>
<ul type=circle>
<li><b><textarea></b><span
style='font-weight:normal'> creates a Large text input box, If data appears
between the start and end tags, the data will appear i the textarea if
the student has not yet made a submission. Additionally it takes two arguments
<i>rows</i></span> and <i>cols</i><span
style='font-style:normal'> which control the height and width of the area
respectively. It defaults to 10 and 80. </span></li>
<li><b><textline></b><span
style='font-weight:normal'> creates a single line of input element, it accepts
1 argument <i>size</i></span> which controls the width on the textline,
it defaults to 20. </li>
</ul>
<li><b>Output Tags </b></li>
</ul>
<p>This group of tags generate useful pieces of output. </p>
<ul type=disc>
<ul type=circle>
<li><b><standalone></b><span
style='font-weight:normal'> everything in between the start and end tag
is shown only on the web, and only if the resource is not part of a course.
</span></li>
<li><b><displayduedate></b><span
style='font-weight:normal'> this will insert the current duedate if one
is set into the document. It is generated to be inside a table of 1x1
elements </span></li>
<li><b><displaytitle></b><span
style='font-weight:normal'> this will insert the title of the problem from
the metadata of the problem </span></li>
<li><b><window></b><span
style='font-weight:normal'> the text in between is put in a popup javascript
window </span></li>
<li><b><m></b><span
style='font-weight:normal'> the inside text is LaTeX, and is converted to
HTML (or MathML) on the fly, if the argument <i>eval</i></span> is set
to "on" the intervening text will have a perl var expansion
done to it before being converted. </li>
<li><b><randomlabel></b><span
style='font-weight:normal'> shows a specified image with images or text
labels randomly assigned to a set of specific locations, those locations
may also have values assigned to them. There is a hash generated conating
the mapping of labels to locations, labels to values, and locations to
values. Example: </span></li>
</ul>
</ul>
<pre> <randomlabel bgimg="URL" width="12" height="45" texwidth="50"> <labelgroup name="GroupOne" type="image"> <location x="123" y="456" value="10" /> <location x="321" y="654" value="20" /> <location x="213" y="546" value="13" /> <label description="TEXT-1">IMG-URL</label> <label description="TEXT-2">IMG-URL</label> <label description="TEXT-3">IMG-URL</label> </labelgroup> <labelgroup name="GroupTwo" type="text"> <location x="12" y="45" /> <location x="32" y="65" /> <location x="21" y="54" /> <label>TEXT-1</label> <label>TEXT-2</label> <label>TEXT-3</label> </labelgroup> </randomlabel> </pre>
<p>Arguments: </p>
<ul type=disc>
<ul type=circle>
<ul type=square>
<li><i>bgimg</i><span
style='font-style:normal'> either a fully qualified URL for an external
image, or a loncapa resource, it supports relative references (../images/apicture.gif),
the image must either be a GIF or JPEG </span></li>
<li><i>width</i><span
style='font-style:normal'> the width of the image in pixels </span></li>
<li><i>height</i><span
style='font-style:normal'> the height of the image in pixels </span></li>
<li><i>texwidth</i><span
style='font-style:normal'> the width of the image in millimeters </span></li>
</ul>
</ul>
</ul>
<p>Internal tags: </p>
<ul type=disc>
<ul type=circle>
<ul type=square>
<li><b><labelgroup></b><span
style='font-weight:normal'> 1 required, multiple allowed. Declares a group
of locations and labels associated with them. <br>
Arguments: </span></li>
<ul type=square>
<li><i>name</i><span
style='font-style:normal'> this is the name of the group, a hash with
this name will be generated holding the mappings for later use in
the problem. For each location a value will be set for which label
is there, (EX. $hash{'1'}="TEXT-2"). For locations with
values the hash will contain 2 items, a location to value mapping
($hash{'value_1'}=10), and a label to value mapping ($hash{'labelvalue_2'}=10).
For all image style of labels there will also be a label description
to label URL mapping ($hash{'image_2'}=IMG-URL). Also the entry 'numlocations
will be set to the total number of locations that exist. (Note that
locations and labels start counting from 1.) </span></li>
<li><i>type</i><span
style='font-style:normal'> the type of labels in this group, either 'image'
or 'text' </span></li>
</ul>
<li><b><location></b><span
style='font-weight:normal'> declares a location on the image that a label
should appear at <br>
Arguments: </span></li>
<ul type=square>
<li><i>x</i><span
style='font-style:normal'> the x value of the location in pixels </span></li>
<li><i>y</i><span
style='font-style:normal'> the y value of the location in pixels </span></li>
<li><i>value</i><span
style='font-style:normal'> a scalar value to associate at this location
(optional) </span></li>
</ul>
<li><b><label></b><span
style='font-weight:normal'> declaration of a label, if this is a text type
labelgroup the internal text should be the text of the label (HTML is
not currently supported), if this is an image type of label the internal
text must be a LON-CAPA resource specification, and the description
filed must be set. <br>
Arguments: </span></li>
<ul type=square>
<li><i>description</i><span
style='font-style:normal'> a required field for image labels, it will
be used when setting values in the hash. </span></li>
</ul>
</ul>
</ul>
<li><b>Scripting </b></li>
</ul>
<p>These tags allow the document to behave programatically </p>
<ul type=disc>
<ul type=circle>
<li><b><display></b><span
style='font-weight:normal'> the intervening perl script is evaluated in
the safe space and the return value of the script replaces the entire
tag </span></li>
<li><b><import></b><span
style='font-weight:normal'> causes the parse to read in the file named in
the body of the tag and parse it as if the entire text of the file had
existed at location of the tag </span></li>
<li><b><parserlib></b><span
style='font-weight:normal'> the enclosed filename contains definitions for
new tags </span></li>
<li><b><script></b><span
style='font-weight:normal'> if the argument <i>type</i></span> is set to
"loncapa/perl" the enclosed data is a perl script which is evaluated
inside the perl Safe space. The return value of the script is ignored.
</li>
<li><b><scriptlib></b><span
style='font-weight:normal'> the enclosed filename contains perl code to
run in the safe space </span></li>
<li><b><block></b><span
style='font-weight:normal'> has a required argument <i>condition</i></span>
that is evaluated, it the condition is true everything inside the tag
is evaluated, if it is false everything inside the block tag is skipped
</li>
<li><b><notsolved></b><span
style='font-weight:normal'> everything inside the tag is skipped if the
problem is "solved" </span></li>
<li><b><postanswerdate></b><span
style='font-weight:normal'> everything inside the tag is skipped if the
problem is before the answer date </span></li>
<li><b><preduedate></b><span
style='font-weight:normal'> everything inside the tag is skipped if the
problem is after the due date </span></li>
<li><b><randomlist></b><span
style='font-weight:normal'> the enclosed tags are parsed in a stable random
order, optional argument <i>show</i></span> restricts the number of tags
indie that are actually parsed the no more than <i>show</i><span
style='font-style:normal'>. </span></li>
<li><b><solved></b><span
style='font-weight:normal'> everything inside the tag is skipped if the
problem is "not solved" </span></li>
<li><b><while></b><span
style='font-weight:normal'> implements a while loop, required argument <i>condition</i></span>
is a perl scriptlet that when evaluated results in a true or false value,
on true the entirety of the text between the whiles is parsed. The condition
is tested again, etc. If false it goes to the next node in the parse.
</li>
</ul>
<li><b>Structure Tags </b></li>
</ul>
<p>These tags give the problem a structure and take care of the recording of
data and giving the student messages. </p>
<ul type=disc>
<ul type=circle>
<li><b><problem></b><span
style='font-weight:normal'> must be the first tag in the file, this tag
sets up the header of the webpage and generates the submit buttons, it
also handles due dates properly </span></li>
<li><b><part></b><span
style='font-weight:normal'> must be below <problem> if it is going
to be used. It does many of the same tasks as <problem> but allows
multiple separate problems to exist in a single file. </span></li>
<li><b><startouttext><endouttext></b><span
style='font-weight:normal'> these tags are somewhat special, they must have
no internal text and occur in pairs. Their use is to mark up the problem
so the web editor knows what sections should be edited in a plain text
block on the web. </span></li>
</ul>
</ul>
<h3><a name="_Toc421867128"><script> Functions</a></h3>
<p>A list of functions that have been written that are available in the Safe
space scripting environment inside a problem. </p>
<ul type=disc>
<li>sin(x), cos(x), tan(x)</li>
<li>asin(x), acos(x), atan(x), atan2(y,x)</li>
<li>log(x), log10(x)</li>
<li>exp(), pow(x,y), sqrt(x)</li>
<li>abs(x), sgn(x)</li>
<li>erf(x), erfc(x)</li>
<li>ceil(x), floor(x)</li>
<li>min(...), max(...)</li>
<li>factorial(n)</li>
<li>N%M</li>
<li>sinh(x), cosh(x), tanh(x)</li>
<li>asinh(x), acosh(x), atanh(x)</li>
<li>roundto(x,n)</li>
<li>web("a","b","c") or web(a,b,c)</li>
<li>html("a") or html(a)</li>
<li>j0(x), j1(x), jn(n,x), jv(y,x)</li>
<li>y0(x), y1(x), yn(n,x), yv(y,x)</li>
<li>random</li>
<li>choose</li>
<li>tex("a","b") or tex(a,b)</li>
<li>var_in_tex(a)</li>
<li>to_string(x), to_string(x,y)</li>
<li>class(), section()</li>
<li>name(), student_number()</li>
<li>open_date(), due_date(), answer_date()</li>
<li>sub_string()</li>
<li>array_moments(array)</li>
<li>format(x,y),prettyprint(x,y)</li>
<li>map(...)</li>
<li>caparesponse_check</li>
<li>caparesponse_check_list</li>
</ul>
<h3><a name="_Toc421867129">Detailed descriptions of each function and comparison
with CAPA</a></h3>
<table border=1 cellpadding=0>
<tr>
<td width=131 valign=top class="Normal"> <p><b>CAPA Functions</b></p></td>
<td width=134 valign=top class="Normal"> <p><b>LON-CAPA</b></p></td>
<td width=147 valign=top class="Normal"> <p><b>Descriptions</b></p></td>
<td width=101 valign=top class="Normal"> <p><b>Differences (if any)</b></p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>sin(x), cos(x), tan(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&sin($x), &cos($x),
&tan($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Trigonometric functions where
x is in radians. $x can be a pure number, i.e., you can call &sin(3.1415)</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>asin(x), acos(x), atan(x), atan2(y,x)</p></td>
<td width=134 valign=top class="Normal"> <p>&asin($x), &acos($x),
&atan($x), &atan2($y,$x)</p></td>
<td width=147 valign=top class="Normal"> <p>Inverse trigonometric functions.
Return value is in radians. For asin and acos the value of x must be
between -1 and 1. The atan2 returns a value between -pi and pi the sign
of which is determined by y. $x and $y can be pure numbers</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>log(x), log10(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&log($x), &log10($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Natural and base-10 logarithm.
$x can be a pure number</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>exp(x), pow(x,y), sqrt(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&exp($x), &pow($x,$y),
&sqrt($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Exponential, power and square
root, i.e.,e<sup>x</sup>, x<sup>y</sup> and /x. $x and $y can be pure
numbers</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>abs(x), sgn(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&abs($x), &sgn($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Abs takes the absolute value
of x while sgn(x) returns 1, 0 or -1 depending on the value of x. For
x>0, sgn(x) = 1, for x=0, sgn(x) = 0 and for x<0, sgn(x) = -1.
$x can be a pure number</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>erf(x), erfc(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&erf($x), &erfc($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Error function. erf =
2/sqrt(pi) integral (0,x) e<sup>t-sq</sup> and <i>erfx(x)</i><span style='font-style:normal'>
= 1.0 - </span><i>erf(x)</i><span
style='font-style:normal'>. $x can be a pure number</span></p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>ceil(x), floor(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&ceil($x), &floor($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Ceil function returns an integer
rounded up whereas floor function returns and integer rounded down.
If x is an integer than it returns the value of the integer. $x can
be a pure number</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>min(...), max(...)</p></td>
<td width=134 valign=top class="Normal"> <p>&min(...), &max(...)</p></td>
<td width=147 valign=top class="Normal"> <p>Returns the minimum/ maximum
value of a list of arguments if the arguments are numbers. If the arguments
are strings then it returns a string sorted according to the ASCII codes</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>factorial(n)</p></td>
<td width=134 valign=top class="Normal"> <p>&factorial($n)</p></td>
<td width=147 valign=top class="Normal"> <p>Argument (n) must be an integer
else it will round down. The largest value for n is 170. $n can be a
pure number</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>N%M</p></td>
<td width=134 valign=top class="Normal"> <p>$N%$M</p></td>
<td width=147 valign=top class="Normal"> <p>N and M are integers and returns
the remainder (in integer) of N/M. $N and $M can be pure numbers</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>sinh(x), cosh(x), tanh(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&sinh($x), &cosh($x),
&tanh($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Hyperbolic functions. $x can
be a pure number</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>asinh(x), acosh(x), atanh(x)</p></td>
<td width=134 valign=top class="Normal"> <p>&asinh($x), &acosh($x),
&atanh($x)</p></td>
<td width=147 valign=top class="Normal"> <p>Inverse hyperbolic functions.
$x can be a pure number</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>/DIS($x,"nn")</p></td>
<td width=134 valign=top class="Normal"> <p>&format($x,"nn")</p></td>
<td width=147 valign=top class="Normal"> <p>Display or format $x as nn where
nn is nF or nE and n is an integer.</p></td>
<td width=101 valign=top class="Normal"> <p> The difference is obvious.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>Not in CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>&prettyprint($x,"nn")</p></td>
<td width=147 valign=top class="Normal"> <p>Display or format $x as nn where
nn is nF or nE and n is an integer. In E mode it will attempt to generate
a pretty x10^3 rather than a E3 following the number</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>roundto(x,n)</p></td>
<td width=134 valign=top class="Normal"> <p>&roundto($x,$n)</p></td>
<td width=147 valign=top class="Normal"> <p>Rounds a real number to n decimal
points. $x and $n can be pure numbers</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>web("a","b","c")
or web(a,b,c)</p></td>
<td width=134 valign=top class="Normal"> <p>&web("a","b","c")
or &web($a,$b,$c)</p></td>
<td width=147 valign=top class="Normal"> <p>Returns either a, b or c depending
on the output medium. a is for plain ASCII, b for tex output and c for
html output</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>html("a") or html(a)</p></td>
<td width=134 valign=top class="Normal"> <p>&html("a") or
&html($a)</p></td>
<td width=147 valign=top class="Normal"> <p>Output only if the output mode
chosen is in html format</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>jn(m,x)</p></td>
<td width=134 valign=top class="Normal"> <p>&j0($x), &j1($x), &jn($m,$x),
&jv($y,$x)</p></td>
<td width=147 valign=top class="Normal"> <p>Bessel functions of the first
kind with orders 0, 1 and m respectively. For jn(m,x), m must be an
integer whereas for jv(y,x), y is real. $x can be a pure number. $m
must be an integer and can be a pure integer number. $y can be a pure
real number</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA, j0, j1 and jn are contained
in one function, jn(m,x) where m takes the value of 0, 1 or 2. jv(y,x)
is new to LON-CAPA.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>yn(m,x)</p></td>
<td width=134 valign=top class="Normal"> <p>&y0($x), &y1($x), &yn($m,$x),
&yv($y,$x)</p></td>
<td width=147 valign=top class="Normal"> <p>Bessel functions of the second
kind with orders 0, 1 and m respectively. For yn(m,x), m must be an
integer whereas for yv(y,x), y is real. $x can be a pure number. $m
must be an integer and can be a pure integer number. $y can be a pure
real number</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA, y0, y1 and yn are contained
in one function, yn(m,x) where m takes the value of 0, 1 or 2. yv(y,x)
is new to LON-CAPA.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random(l,u,d)</p></td>
<td width=134 valign=top class="Normal"> <p>&random($l,$u,$d)</p></td>
<td width=147 valign=top class="Normal"> <p>Returns a uniformly distributed
random number between the lower bound, l and upper bound, u in steps
of d. $l, $u and $d can be pure numbers</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA, all the 3 arguments
must be of the same type. However, now you can mix the type</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>choose(i,...)</p></td>
<td width=134 valign=top class="Normal"> <p>&choose($i,...)</p></td>
<td width=147 valign=top class="Normal"> <p>Choose the ith item from the
argument list. i must be an integer greater than 0 and the value of
i should not exceed the number of items. $i can be a pure integer</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>/MAP(seed;w,x,y,z;a,b,c,d)</p></td>
<td width=134 valign=top class="Normal"> <p>Option 1 - &map($seed,[\$w,\$x,\$y,\$z],[$a,$b,$c,$d])
or <br>
Option 2 - &map($seed,\@mappedArray,[$a,$b,$c,$d]) <br>
Option 3 - @mappedArray = &map($seed,[$a,$b,$c,$d]) <br>
Option 4 - ($w,$x,$y,$z) = &map($seed,\@a) <br>
where $a='A'<br>
$b='B'<br>
$c='B'<br>
$d='B'<br>
$w, $x, $y, and $z are variables</p></td>
<td width=147 valign=top class="Normal"> <p>Assigns to the variables $w,
$x, $y and $z the values of the $a, $b, $c and $c (A, B, C and D). The
precise value for $w .. depends on the seed. (Option 1 of calling map).
In option 2, the values of $a, $b .. are mapped into the array, @mappedArray.
The two options illustrate the different grouping. Options 3 and 4 give
a consistent way (with other functions) of mapping the items. For each
option, the group can be passed as an array, for example, [$a,$b,$c,$d]
=> \@a.</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA, the arguments are divided
into three groups separated by a semicolon ;. In LON-CAPA, the separation
is done by using [] brackets or using an array @a. Note the backslash
(\) before the arguments in the second and third groups.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>rmap(seed;a,b,c,d;w,x,y,z)</p></td>
<td width=134 valign=top class="Normal"> <p>Option 1 - &rmap($seed,[\$w,\$x,\$y,\$z],[$a,$b,$c,$d])
or <br>
Option 2 - &rmap($seed,\@rmappedArray,[$a,$b,$c,$d]) <br>
Option 3 - @rmapped_array = &rmap($seed,[$a,$b,$c,$d]) <br>
Option 4 - ($w,$x,$y,$z) = &rmap($seed,\@a) <br>
where $a='A'<br>
$b='B'<br>
$c='B'<br>
$d='B'<br>
$w, $x, $y, and $z are variables</p></td>
<td width=147 valign=top class="Normal"> <p>The rmap functions does the
reverse action of map if the same seed is used in calling map and rmap.
</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA, the arguments are divided
into three groups separated by a semicolon ;. In LON-CAPA, the separation
is done by using [] brackets (with create an unamed vector reference)
or using an array @a. Note the backslash (\) before the arguments in
the second and third groups (Which cause Perl to send to variable locations
rather than the variable values, similar to a C pointer).</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>$a=&xmlparse($string) </p></td>
<td width=147 valign=top class="Normal"> <p>Runs the internal parser over
the argument parsing for display. <b>Warning</b><span style='font-weight:normal'>
This will result in different strings in different targets. Don't use
the results of this function as an answer.</span></p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>tex(a,b), tex("a","b")</p></td>
<td width=134 valign=top class="Normal"> <p>&tex($a,$b), &tex("a","b")</p></td>
<td width=147 valign=top class="Normal"> <p>Returns a if the output mode
is in tex otherwise returns b</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>var_in_tex(a)</p></td>
<td width=134 valign=top class="Normal"> <p>&var_in_tex($a)</p></td>
<td width=147 valign=top class="Normal"> <p>Equivalent to tex("a","")</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>to_string(x), to_string(x,y)</p></td>
<td width=134 valign=top class="Normal"> <p>&to_string($x), &to_string($x,$y)</p></td>
<td width=147 valign=top class="Normal"> <p>If x is an integer, returns
a string. If x is real than the output is a string with format given
by y. For example, if x = 12.3456, &to_string(x,".3F")
= 12.345 and &to_string(x,".3E") = 1.234E+01.</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>capa_id(), class(), section(),
set(), problem()</p></td>
<td width=134 valign=top class="Normal"> <p>&class(), &section()</p></td>
<td width=147 valign=top class="Normal"> <p>Returns null string, class descriptive
name, section number, set number and null string.</p></td>
<td width=101 valign=top class="Normal"> <p>capa_id(), set() and problem()
are no longer used. Currently, they return a null value.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>name(), student_number()</p></td>
<td width=134 valign=top class="Normal"> <p>&name(), &student_number()</p></td>
<td width=147 valign=top class="Normal"> <p>Return the full name in the
following format: lastname, firstname initial. Student_number returns
the student 9-alphanumeric string. If undefined, the functions return
null.</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>open_date(), due_date(), answer_date()</p></td>
<td width=134 valign=top class="Normal"> <p>&open_date(), &due_date(),
&answer_date()</p></td>
<td width=147 valign=top class="Normal"> <p>Problem open date, due date
and answer date. The time is also included in 24-hr format.</p></td>
<td width=101 valign=top class="Normal"> <p>Output format for time is changed
slightly. If pass noon, it displays ..pm else it displays ..am. So 23:59
is displayed as 11:59 pm.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>get_seed(), set_seed()</p></td>
<td width=134 valign=top class="Normal"> <p>Not implemented</p></td>
<td width=147 valign=top class="Normal"> <p>Get and set the random seed.</p></td>
<td width=101 valign=top class="Normal"> </td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>sub_string(a,b,c)</p></td>
<td width=134 valign=top class="Normal"> <p>&sub_string($a,$b,$c) <br>
perl substr function. However, note the differences</p></td>
<td width=147 valign=top class="Normal"> <p>Retrieve a portion of string
a starting from b and length c. For example, $a = "Welcome
to LON-CAPA"; $result=&sub_string($a,4,4); then $result is
"come"</p></td>
<td width=101 valign=top class="Normal"> <p>Perl intrinsic function, substr(string,b,c)
starts counting from 0 (as opposed to 1). In the example to the left,
substr($a,4,4) returns "ome ".</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>array[xx]</p></td>
<td width=134 valign=top class="Normal"> <p>@arrayname <br>
Array is intrinsic in perl. To access a specific element use $arrayname[$n]
where $n is the $n+1 element since the array count starts from 0</p></td>
<td width=147 valign=top class="Normal"> <p>"xx" can be a variable
or a calculation.</p></td>
<td width=101 valign=top class="Normal"> <p>In LON-CAPA, an array is defined
by @arrayname. It is not necessary to specify the dimension of the array. </p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>array_moments(B,A)</p></td>
<td width=134 valign=top class="Normal"> <p>@B=&array_moments(@A)</p></td>
<td width=147 valign=top class="Normal"> <p>Evaluates the moments of an
array A and place the result in array B[i] where i = 0 to 4. The contents
of B are as follows: B[0] = number of elements, B[1] = mean, B[2] =
variance, B[3] = skewness and B[4] = kurtosis.</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA, the moments are passed
as an array in the first argument whereas in LON-CAPA, the array containing
the moments are set equal to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>array_max(Name), array_min(Name)</p></td>
<td width=134 valign=top class="Normal"> <p>&min(@Name), &max(@Name)</p></td>
<td width=147 valign=top class="Normal"> <p>In LON-CAPA to find the maximum
value of an array, use &max(@arrayname) and to find the minimum
value of an array, use &min(@arrayname)</p></td>
<td width=101 valign=top class="Normal"> <p>Combined with the min and max
functions defined earlier.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>init_array(Name)</p></td>
<td width=134 valign=top class="Normal"> <p>undef @name</p></td>
<td width=147 valign=top class="Normal"> <p>To destroy the contents of an
array, use</p></td>
<td width=101 valign=top class="Normal"> <p>Use perl intrinsic undef function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random_normal (return_array,item_cnt,seed,av,std_dev)</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_normal
($item_cnt,$seed,$av,$std_dev)</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of normal distribution of average $av and standard deviation $std_dev.
The distribution is generated from seed $seed</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA the results are passed
as the first argument whereas in LON-CAPA the results are set equal
to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random_beta (return_array,item_cnt,seed,aa,bb)</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_beta
($item_cnt,$seed,$aa,$bb) <br>
NOTE: Both $aa and $bb MUST be greater than 1.0E-37.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of beta distribution. The density of beta is: X^($aa-1) *(1-X)^($bb-1)
/B($aa,$bb) for 0<X<1.</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA the results are passed
as the first argument whereas in LON-CAPA the results are set equal
to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random_gamma (return_array,item_cnt,seed,a,r)</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_gamma
($item_cnt,$seed,$a,$r) <br>
NOTE: Both $a and $r MUST be positive.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of gamma distribution. The density of gamma is: ($a**$r)/gamma($r) *
X**($r-1) * exp(-$a*X).</p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA the results are passed
as the first argument whereas in LON-CAPA the results are set equal
to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random_exponential (return_array,item_cnt,seed,av)</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_exponential
($item_cnt,$seed,$av) <br>
NOTE: $av MUST be non-negative.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of exponential distribution. </p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA the results are passed
as the first argument whereas in LON-CAPA the results are set equal
to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random_poisson (return_array,item_cnt,seed,mu)</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_poisson
($item_cnt,$seed,$mu) <br>
NOTE: $mu MUST be non-negative.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of poisson distribution. </p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA the results are passed
as the first argument whereas in LON-CAPA the results are set equal
to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random_chi (return_array,item_cnt,seed,df)</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_chi
($item_cnt,$seed,$df) <br>
NOTE: $df MUST be positive.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of chi_square distribution with $df degrees of freedom. </p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA the results are passed
as the first argument whereas in LON-CAPA the results are set equal
to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>random_noncentral_chi (return_array,item_cnt,seed,df,nonc)</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_noncentral_chi
($item_cnt,$seed,$df,$nonc) <br>
NOTE: $df MUST be at least 1 and $nonc MUST be non-negative.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of noncentral_chi_square distribution with $df degrees of freedom and
noncentrality parameter $nonc. </p></td>
<td width=101 valign=top class="Normal"> <p>In CAPA the results are passed
as the first argument whereas in LON-CAPA the results are set equal
to the function.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_f
($item_cnt,$seed,$dfn,$dfd) <br>
NOTE: Both $dfn and $dfd MUST be positive.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of F (variance ratio) distribution with degrees of freedom $dfn (numerator)
and $dfd (denominator). </p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_noncentral_f
($item_cnt,$seed,$dfn,$dfd,$nonc) <br>
NOTE: $dfn must be at least 1, $dfd MUST be positive, and $nonc must
be non-negative.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of noncentral F (variance ratio) distribution with degrees of freedom
$dfn (numerator) and $dfd (denominator). $nonc is the noncentrality
parameter. </p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT DOCUMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_multivariate_normal
($item_cnt,$seed,\@mean,\@covar) <br>
NOTE: @mean should be of length p array of real numbers. @covar should
be a length p array of references to length p arrays of real numbers
(i.e. a p by p matrix.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
of multivariate_normal distribution with mean vector @mean and variance-covariance
matrix. </p></td>
<td width=101 valign=top class="Normal"> <p>Note the backslash before the
@mean and @covar arrays.</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_multinomial
($item_cnt,$seed,@p) <br>
NOTE: $item_cnt is rounded with int() and the result must be non-negative.
The number of elements in @p must be at least 2.</p></td>
<td width=147 valign=top class="Normal"> <p>Returns single observation from
multinomial distribution with $item_cnt events classified into as many
categories as the length of @p. The probability of an event being classified
into category i is given by ith element of @p. The observation is an
array with length equal to @p, so when called in a scalar context it
returns the length of @p. The sum of the elements of the obervation
is equal to $item_cnt.</p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_permutation
($item_cnt,@array) </p></td>
<td width=147 valign=top class="Normal"> <p>Returns @array randomly permuted.</p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_uniform
($item_cnt,$seed,$low,$high) <br>
NOTE: $low must be less than or equal to $high.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
from a uniform distribution. </p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_uniform_integer
($item_cnt,$seed,$low,$high) <br>
NOTE: $low and $high are both passed through int(). $low must be less
than or equal to $high.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
from a uniform distribution in integers. </p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_binomial
($item_cnt,$seed,$nt,$p) <br>
NOTE: $nt is rounded using int() and the result must be non-negative.
$p must be between 0 and 1 inclusive.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate $item_cnt deviates
from the binomial distribution with $nt trials and the probabilty of
an event in each trial is $p. </p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
<tr>
<td width=131 valign=top class="Normal"> <p>NOT IMPLEMENTED IN CAPA</p></td>
<td width=134 valign=top class="Normal"> <p>@return_array=&random_negative_binomial
($item_cnt,$seed,$ne,$p) <br>
NOTE: $ne is rounded using int() and the result must be positive. $p
must be between 0 and 1 exclusive.</p></td>
<td width=147 valign=top class="Normal"> <p>Generate an array of $item_cnt
outcomes generated from negative binomial distribution with $ne events
and the probabilty of an event in each trial is $p. </p></td>
<td width=101 valign=top class="Normal"> <p>New to LON-CAPA</p></td>
</tr>
</table>
<h3><a name="_Toc421867130"><script> Variables</a></h3>
<ul type=disc>
<li>$external::target - set to the current target the xml parser is parsing
for </li>
<li>$external::part - set to the <i>id</i><span style='font-style:normal'>
of the current problem <part>; zero if there are no <part> </span></li>
<li>$external::gradestatus - set to the value of the current resource.partid.solved
value </li>
<li>$external::datestatus - set to the current status of the clock either
CLOSED, CAN_ANSWER, CANNOT_ANSWER, SHOW_ANSWER, or UNCHECKEDOUT </li>
<li>$external::randomseed - set to the number that was used to seed the random
number generator </li>
<li>$pi - set to PI </li>
<li>$rad2deg - converts radians to degrees </li>
<li>$deg2rad - converts degrees to radians </li>
</ul>
<h3><a name="_Toc421867131">Form internals</a> </h3>
<p>Form elements used for homework editing/response </p>
<p>the form is named lonhomework </p>
<h3><a name="_Toc421867132">Viewing a problem (either CSTR or RES space)</a></h3>
<ul type=disc>
<li>grade_target, grade_username, grade_domain, grade_symb - the vaules take
precedence over the the normal ENV settings of these, use &Apache::lonxml::whichuser()
to get back the correct vaues of the items </li>
<li>HWVAL_response:number - the name of the input elements for each response.
The response is the response's ID, and the :number part exists only for
response with multiple foils, and is a unique number in order of the submission
</li>
<li>changerandseed - the 'Change' button, only exists right after the Change
button is clicked </li>
<li>problemmode - in CSTR, it is either 'View','Edit','EditXML' or 'Analyze'
depending on the desired view </li>
<li>rndseed - the currently requested random seed </li>
<li>showallfoils - if it exists, and we are in CSTR space, the problem should
ignore <conceptgroup> and the response's max setting and show all
possible foils </li>
<li>submit - the name of the Submit button </li>
<li>submitted - a hidden form parameter that can be used to tell if the student
has submitted answers or not, if it is set, there should be answers to grade.
</li>
</ul>
<h3><a name="_Toc421867133">Editing a problem (Edit mode)</a></h3>
<p>tagdepth referes to the current value of the xmlparsers tagdepth couter ($Apache::lonxml::currentdepth)</p>
<p>Note: the file edit.pm has many helper functions for creating the standard
elements for editing a tag and it's attributes, all of those functions follow
these conventions </p>
<ul type=disc>
<li>tagdepth_argname - I.E. 1_3.max, a parameter editing value, max is the
name of the parameter and it is for the third tag inside the first tag </li>
<li>delete_tagdepth - if set to yes, delete tag tagdepth and all tags inside
of it </li>
<li>homework_edit_tagdepth - used by both &Apache::edit::editline and
&Apache::edit::editfield for the <textarea> and <input>
form elements they create </li>
<li>insert_tagdepth - used to request an tag insert, it is set to the id number
of the requested tag in the %Apache::lonxml::insertlist </li>
</ul>
<ul type=disc>
<li> </li>
</ul>
<h3><a name="_Toc421867134">Symbs</a></h3>
<p>To identify a specific instance of a resource, LON-CAPA uses symbols or symbs.
These identifiers are built from the URL of the map, the resource number of
the resource in the map, and the URL of the resource itself. The latter is
somewhat redundant, but might help if maps change.</p>
<p>An example is</p>
<p class=MsoHeader><span style='font-family:"Courier New"'> msu/korte/parts/part1.sequence___19___msu/korte/tests/part12.problem</span></p>
<p class=MsoHeader>The respective map entry is</p>
<p class=MsoHeader><span style='font-family:"Courier New"'> <resource
id="19" src="/res/msu/korte/tests/part12.problem"
</span></p>
<p class=MsoHeader><span style='font-family:"Courier New"'> title="Problem
2"></span></p>
<p class=MsoHeader><span style='font-family:"Courier New"'> </resource></span></p>
<p class=MsoHeader>Symbs are used by the random number generator, as well as
to store and restore data specific to a certain instance of for example a
problem.</p>
<h3><a name="_Toc421867135">Store / Restore</a></h3>
<p><span style='color:black'>2 important functions in lonnet.pm are </span><span style='font-family:"Courier New";color:black'>&Apache::lonnet::cstore()</span><span
style='color:black'> and </span><span style='font-family:"Courier New";
color:black'>&Apache::lonnet:restore()</span><span style='color:black'> (and
</span><span style='font-family:"Courier New";color:black'>&Apache::lonnet::store()</span><span
style='color:black'>, which is is the non-critical message twin of </span><span
style='font-family:"Courier New";color:black'>cstore</span><span
style='color:black'>). These functions are for handlers to store a perl hash to
a users permanent data space in an easy manner, and to retrieve it again
on another call. It is expected that a handler would use this once at the
beginning to retrieve data, and then again once at the end to send only the
new data back. </span></p>
<p><span style='color:black'>The data is stored in the users data directory
on the users homeserver under the ID of the course.</span></p>
<p><span style='color:black'>The hash that is returned by </span><span
style='font-family:"Courier New";color:black'>restore</span><span
style='color:black'> will have all of the previous value for all of the elements
of the hash. </span></p>
<p><span style='color:black'>Example: </span></p>
<p><span style='font-family:"Courier New";color:black'>#creating a hash</span></p>
<p><span style='font-family:"Courier New";color:black'>my %hash;</span></p>
<p><span style='font-family:"Courier New";color:black'>$hash{'foo'}='bar';</span></p>
<p><span style='font-family:"Courier New";color:black'>#storing it</span></p>
<p><span style='font-family:"Courier New";color:black'>&Apache::lonnet::cstore(\%hash);</span></p>
<p><span style='font-family:"Courier New";color:black'>#changing a value </span></p>
<p><span style='font-family:"Courier New";color:black'>$hash{'foo'}='notbar';</span></p>
<p><span style='font-family:"Courier New";color:black'>#adding a new value</span></p>
<p><span style='font-family:"Courier New";color:black'>$hash{'bar'}='foo';</span></p>
<p><span style='font-family:"Courier New";color:black'>&Apache::lonnet::cstore(\%hash);</span></p>
<p><span style='font-family:"Courier New";color:black'>#retrieving the hash</span></p>
<p><span style='font-family:"Courier New";color:black'>my %history=&Apache::lonnet::restore();</span></p>
<p><span style='font-family:"Courier New";color:black'>#print the hash</span></p>
<p><span style='font-family:"Courier New";color:black'>foreach my $key (sort(keys(%history)))
{</span></p>
<p><span style='font-family:"Courier New";color:black'> print("\%history{$key}
= $history{$key}");</span></p>
<p><span style='font-family:"Courier New";color:black'>}</span></p>
<p><span style='color:black'>Will print out: </span></p>
<p><span style='font-family:"Courier New";color:black'>%history{1:foo} = bar</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{1:keys} = foo:timestamp</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{1:timestamp}
= 990455579</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{2:bar} = foo</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{2:foo} = notbar</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{2:keys} = foo:bar:timestamp</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{2:timestamp}
= 990455580</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{bar} = foo</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{foo} = notbar</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{timestamp} =
990455580</span></p>
<p><span style='font-family:"Courier New";color:black'>%history{version} = 2</span></p>
<p><span style='color:black'>Note that the special hash entries <i>keys</i></span><span style='color:black'>,
<i>version</i></span><span
style='color:black'> and <i>timestamp</i></span><span style='color:black'> were
added to the hash. <i>version</i></span><span style='color:black'> will be
equal to the total number of versions of the data that have been stored. The
<i>timestamp</i></span><span
style='color:black'> attribute will be the UNIX time the hash was stored. <i>keys</i></span><span
style='color:black'> is available in every historical section to list which keys
were added or changed at a specific historical revision of a hash. </span></p>
<p><span style='color:black'><b>Warning</b></span><span
style='color:black'> do not store the hash that restore returns directly. This
will cause a mess since it will restore the historical keys as if the were
new keys. I.E. </span><span style='font-family:"Courier New";color:black'>1:foo</span><span
style='color:black'> will become </span><span style='font-family:"Courier New";
color:black'>1:1:foo</span><span style='color:black'> etc. </span></p>
<p><span style='color:black'><b>Calling convention: </b></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New";
color:black'> my %record=&Apache::lonnet::restore($symb,$courseid,$domain,$uname,$home);</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New";
color:black'> &Apache::lonnet::cstore(\%newrecord,$symb,$courseid,$domain,$uname,$home);</span></p>
<p><span style='color:black'><b>Arguments (only %newrecord is required the rest
are somewhat optional, read the details): </b></span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>$symb</i></span><span
style='color:black'> - a string containing the internal name of the specific instance
of a resource. Usually this value can be gotten from </span><span
style='font-family:"Courier New";color:black'>&Apache::lonnet::symbread($filename)</span><span
style='color:black'>. If the argument is blank, it will attempt to use </span><span
style='font-family:"Courier New";color:black'>symbread()</span><span
style='color:black'> for it. If the result is ambiguous store/restore will fail.
</span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>$courseid</i></span><span
style='color:black'> - the internal name for a course, usually found in </span><span
style='font-family:"Courier New";color:black'>$ENV{'request.course.id'}</span><span
style='color:black'> which is what will be looked at if no value is passed to
the functions. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>$domain</i></span><span
style='color:black'> - the domain that the user belongs to, usually found in </span><span
style='font-family:"Courier New";color:black'>$ENV{'user.domain'}</span><span
style='color:black'> which is what will be looked at if no value is passed to
the functions. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>$uname</i></span><span
style='color:black'> - the login name for the user, usually found in </span><span
style='font-family:"Courier New";color:black'>$ENV{'user.name'}</span><span
style='color:black'> which is what will be looked at if no value is passed to
the functions. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>$home</i></span><span
style='color:black'> - the homeserver for the user, usually found in </span><span
style='font-family:"Courier New";color:black'>$ENV{'user.home'}</span><span
style='color:black'> but can be easily gotten from a domain and name through </span><span
style='font-family:"Courier New";color:black'>&Apache::lonnet::homeserver($uname,$domain)</span><span
style='color:black'>. If no value is passed to store/restore the value in %ENV
will be used. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>%newrecord</i></span><span
style='color:black'> - the hash to store being passed by reference </span></p>
<p><span style='color:black'><b>Return values: </b></span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>an empty string</i></span><span
style='color:black'> - the function was unable to determine exactly where to store
or restore from. At least one of the "optional" arguments was unable
to be determined. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>a hash</i></span><span
style='color:black'> - restore successfully read a old hash for this specific
user / resource instance. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>no_such_host</i></span><span
style='color:black'> - the <i>$home</i></span><span style='color:black'> specfied
desn't exist in the network. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>con_delayed</i></span><span
style='color:black'> - the <i>$home</i></span><span style='color:black'> was uncontactable
at this time. The store will be delayed until it is again available. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>con_failed</i></span><span
style='color:black'> - the <i>$home</i></span><span style='color:black'> was uncontactable
at this time and store was unable to delay the store until a later time. The
store failed. </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>ok</i></span><span
style='color:black'> - the store completed succesfully </span></p>
<p> <span style='font-family:Symbol;
color:black'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='color:black'><i>error:</i></span><span
style='color:black'> - remote server failied to store or restore the reason follows
the </span><span style='font-family:"Courier New";color:black'>:</span><span
style='color:black'> </span></p>
<h3><a name="_Toc421867136">Mandatory Homework Data</a></h3>
<pre> </pre>
<pre><span
style='font-size:9.0pt'><Provided by &EXT() and set external to the resource, required></span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.opendate #unix time of when the local machine should let the</span></pre>
<pre><span
style='font-size:9.0pt'> #student in</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.duedate #unix time of when the local machine should stop</span></pre>
<pre><span
style='font-size:9.0pt'> #accepting answers</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.answerdate #unix time of when the local machine should</span></pre>
<pre><span
style='font-size:9.0pt'> #provide the correct answer to the student</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.weight # points the problem is worth</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.maxtries # maximum number of attempts the student can have</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.type # type of problem homework can be:</span></pre>
<pre><span
style='font-size:9.0pt'> # homework - randomized, graded, stored with </span></pre>
<pre><span
style='font-size:9.0pt'> # requesting user, full feeback</span></pre>
<pre><span
style='font-size:9.0pt'> # exam - randomized, graded, stored with </span></pre>
<pre><span
style='font-size:9.0pt'> # requesting user, minimal feedback</span></pre>
<pre><span
style='font-size:9.0pt'> # form - unrandomized, ungraded, stored with </span></pre>
<pre><span
style='font-size:9.0pt'> # specified user, full feedback</span></pre>
<pre><span
style='font-size:9.0pt'> # survey - unrandomized, ungraded, stored with </span></pre>
<pre><span
style='font-size:9.0pt'> # requesting user, full feedback</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'><numerical/formula/response needed: (has a default if nonexistant)></span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.responseid.tol # lots of possibilities here</span></pre>
<pre><span
style='font-size:9.0pt'> # percentage, range (inclusive and exclusive),</span></pre>
<pre><span
style='font-size:9.0pt'> # variable name, etc</span></pre>
<pre><span
style='font-size:9.0pt'> # 3%</span></pre>
<pre><span
style='font-size:9.0pt'> # 0.5</span></pre>
<pre><span
style='font-size:9.0pt'> # .05+</span></pre>
<pre><span
style='font-size:9.0pt'> # 3%+</span></pre>
<pre><span
style='font-size:9.0pt'> # 0.5+,.005</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.responseid.sig # one or two comma sepearted integers, </span></pre>
<pre><span
style='font-size:9.0pt'> # specifying the number of significatn figures</span></pre>
<pre><span
style='font-size:9.0pt'> # a student must use</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'><Problem sets using cstore (required):></span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.solved # if not set, problem yet to be viewed</span></pre>
<pre><span
style='font-size:9.0pt'> # incorrect_attempted == incorrect and attempted</span></pre>
<pre><span
style='font-size:9.0pt'> # correct_by_student == correct by student work</span></pre>
<pre><span
style='font-size:9.0pt'> # correct_by_override == correct, instructor override</span></pre>
<pre><span
style='font-size:9.0pt'> # incorrect_by_override == incorrect, instructor override</span></pre>
<pre><span
style='font-size:9.0pt'> # excused == excused, problem no longer counts for student</span></pre>
<pre><span
style='font-size:9.0pt'> # '' (empty) == not attempted</span></pre>
<pre><span
style='font-size:9.0pt'> # ungraded_attempted == an ungraded answer has been</span></pre>
<pre><span
style='font-size:9.0pt'> sumbitted and stored</span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.tries # positive integer of number of unsuccessful attempts</span></pre>
<pre><span
style='font-size:9.0pt'> # made, malformed answers don't count if feedback is</span></pre>
<pre><span
style='font-size:9.0pt'> # on</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.awarded # float between 0 and 1, percentage of</span></pre>
<pre><span
style='font-size:9.0pt'> # resource.weight that the stundent earned.</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.award # final detailed award that was applied to the entire</span></pre>
<pre><span
style='font-size:9.0pt'> # part of the question, check awarddetail below for</span></pre>
<pre><span
style='font-size:9.0pt'> # possibilities</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.previous # boolean, is this submission a previous submission</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.responseid.submissons</span></pre>
<pre><span
style='font-size:9.0pt'> # the student submitted string for the part.response</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.responseid.awarddetail</span></pre>
<pre><span
style='font-size:9.0pt'> # list of all of the results of grading the submissions</span></pre>
<pre><span
style='font-size:9.0pt'> # in detailed form of the specific failure</span></pre>
<pre><span
style='font-size:9.0pt'> #Possible values:</span></pre>
<pre><span
style='font-size:9.0pt'> # EXACT_ANS, APPROX_ANS : student is correct</span></pre>
<pre><span
style='font-size:9.0pt'> # NO_RESPONSE : student submitted no response</span></pre>
<pre><span
style='font-size:9.0pt'> # MISSING_ANSWER : student submitted some but not</span></pre>
<pre><span
style='font-size:9.0pt'> # all parts of a response</span></pre>
<pre><span
style='font-size:9.0pt'> # WANTED_NUMERIC : expected a numeric answer and</span></pre>
<pre><span
style='font-size:9.0pt'> # didn't get one</span></pre>
<pre><span
style='font-size:9.0pt'> # SIG_FAIL : incorrect number of Significant Figures</span></pre>
<pre><span
style='font-size:9.0pt'> # UNIT_FAIL : incorrect unit</span></pre>
<pre><span
style='font-size:9.0pt'> # UNIT_NOTNEEDED : Submitted a unit when one shouldn't</span></pre>
<pre><span
style='font-size:9.0pt'> # NO_UNIT : needed a unit but none was submitted</span></pre>
<pre><span
style='font-size:9.0pt'> # BAD_FORMULA : syntax error in submitted formula</span></pre>
<pre><span
style='font-size:9.0pt'> # INCORRECT : answer was wrong</span></pre>
<pre><span
style='font-size:9.0pt'> # SUBMITTED : submission wasn't graded</span></pre>
<pre><span
style='font-size:9.0pt'> # ERROR : unable to get a grade</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.responseid.message (optional) (not yet supported)</span></pre>
<pre><span
style='font-size:9.0pt'> # a message that should be shown to the student</span></pre>
<pre><span
style='font-size:9.0pt'> </span></pre>
<pre><span
style='font-size:9.0pt'>resource.partid.bonustries (optional) (not yet supported)</span></pre>
<pre><span
style='font-size:9.0pt'> # if set, added to the maxtries parameter for student </span></pre>
<pre><span
style='font-size:9.0pt'> # total number of tries overall</span></pre>
<pre> </pre>
<h3><a name="_Toc421867137">Sample Problems</a></h3>
<p class=H5><span style='layout-grid-mode:
both'>A Simple Problem</span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'><problem></span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>
<script type="loncapa/perl"></span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>$length=&random(10,99,.1);</span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>$width=&random(1,10,.01);</span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>@area=($length*($width*10));</span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>
</script></span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>What
is the area of a box $length mm in length and </span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>&format($width,"2E")
cm in width.</span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>
<numericalresponse id="11" answer="@area" units="mm^2"></span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>
<textline></textline></span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>
<responseparam name="tol" type="tolerance" default="5%"></responseparam></span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'>
</numericalresponse></span></p>
<p style='
line-height:50%'><span style='font-size:8.0pt;font-family:"Courier New"'></problem></span></p>
<p class=H5><span
style='layout-grid-mode:both'>A More Complex Problem</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'><problem></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'><displayduedate
/></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'><p><displaytitle
/></p></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'><script type="loncapa/perl"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$vF="<b>
F<sub>1</sub> </b>";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$vF1="<b>
F<sub>1</sub> </b>";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$vF2="<b>
F<sub>2</sub> </b>";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$mF="|<b>F</b>|";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$F1mag="|<b>F<sub>1</sub></b>|";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$F2mag="|<b>F<sub>2</sub></b>|";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$trq1mag="|<b>
<font face=symbol>t</font><sub>1</sub></b>|";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$trq2mag="|<b>
<font face=symbol>t</font><sub>2</sub></b>|";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$Q1="Q<sub>1</sub>";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$Q2="Q<sub>2</sub>";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$tau="<font
face=symbol>t</font>";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$tau1="<font
face=symbol><b>t</b></font><sub>1</sub>";</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'> $val=&random(1,4,1);</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'> $tp=&choose($val,"her","her","his","his");</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'> $sd=&choose($val,"daughter","niece","nephew","son");</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'></script></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'><startouttext
/></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$trq1mag and $trq2mag
are the magnitudes of the torques produced repectively by </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>forces $vF1 and $vF2
with respect the pivot P. The magnitudes of $vF1 is </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>$F1mag and that of
$vF2 is $F2mag. $Q1 and $Q2 are the locations </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>on a rigid body where
$vF1 and $vF2 act. </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'><endouttext /></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'><optionresponse
max="600"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foilgroup options="('Correct','Incorrect','Can not tell')"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<conceptgroup concept="Effect of the moment-arm on the torque"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="1a" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
For $F1mag larger than $F2mag , $trq1mag is larger than $trq2mag</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="1b" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
For $F1mag smaller than $F2mag , $trq1mag is smaller than $trq2mag</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil
name="1c" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
For $F1mag larger than $F2mag , $trq1mag can be less than $trq2mag</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="1d" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
For $F1mag smaller than $F2mag , $trq1mag can be larger than $trq2mag</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</conceptgroup> </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<conceptgroup concept="For a given pivot, relation of force vector
to torque."></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="2a" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
The moment-arm of $vF is the shortest distance from P to the line along $vF
.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="2b" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
The moment-arm of $vF is the shortest distance from P to $vF vector.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="2c" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
The moment-arm of $vF is not the distance from P to Q<sub>1</sub>.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="2d" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
The moment-arm of $vF is the distance from P to Q<sub>1</sub>.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil> </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</conceptgroup></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<conceptgroup concept="Torque is force x moment-arm."></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="3a" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$trq1mag equals to the product of the moment-arm and $F1mag .</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="3b" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$trq1mag equals to $F1mag times the distance from Q<sub>1</sub>
to P.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="3c" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$trq1mag is not equal to the product of $F1mag and the distance from Q<sub>1</sub>
to P.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="3d" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$trq1mag is not equal to the product of the moment-arm and $F1mag .</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</conceptgroup></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<conceptgroup concept="Pivot point is required to calculate torque"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="4a" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$tau1 vector depends on the location of P.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="4b" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$tau1 vector does not depend on the location of P.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="4c" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$tau1 vector has no meaning unless a pivot is selected.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="4d" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
$tau1 vector can be determined without selecting P. </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</conceptgroup> </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<conceptgroup concept="torque from 2 forces acting along same line"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="5a" value="Correct"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
Two equal forces, acting on a body along the same line but at different positions,
produce equal torques with respect to a given pivot."</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="5b" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
Two equal forces, along the same line, produce equal torques with respect
to a given pivot only if they act at the same point on a body."</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="5c" value="Incorrect"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
Two equal forces acting on a body along the same line but at different positions,
produce equal torques for only one pivot."</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</conceptgroup></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<foil name="6" value="unused"></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
This foil will never display since it is unused.</span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foil></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</foilgroup></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<notsolved></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
<hintgroup></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>Think the definition
of the torque. The force and the moment-arm respect to the pivot. </span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</hintgroup></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'>
</notsolved></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'></optionresponse></span></p>
<p><span style='font-size:8.0pt;font-family:"Courier New"'></problem></span></p>
<h3> </h3>
<p> <img border=0 width=432 height=370
src="Session%20On2_files/image003.png" v:shapes="_x0000_i1025"> </p>
<p><span style='font-size:14.0pt'><b>Fig. 3.1.1</b></span><span
style='font-size:14.0pt'> Internal Structure of Homework Handler</span></p>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionOne.html
+++ doc/gutshtml/SessionOne.html
<html>
<head>
<meta name=Title
content="Session One: Intro/Demo, lonc/d, Replication and Load Balancing (Gerd)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<link rel=Edit-Time-Data href="Session%20One_files/editdata.mso">
<title>Session One: Intro/Demo, lonc/d, Replication and Load Balancing (Gerd)</title>
<style><!--
.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 One: Intro/Demo, lonc/d, Replication and Load Balancing (Gerd)</h2>
<p> <img width=432 height=555
src="Session%20One_files/image002.jpg" v:shapes="_x0000_i1025"> <span
style='font-size:14.0pt'><b>Fig. 1.1.1</b></span><span style='font-size:14.0pt'>
Overview of Network</span></p>
<h3><a name="_Toc514840838"></a><a name="_Toc421867040">Overview</a></h3>
<p>Physically, the Network consists of relatively inexpensive upper-PC-class
server machines which are linked through the commodity internet in a load-balancing,
dynamically content-replicating and failover-secure way. <b>Fig. 1.1.1</b><span style='font-weight:normal'>
shows an overview of this network.</span></p>
<p>All machines in the Network are connected with each other through two-way
persistent TCP/IP connections. Clients (<b>B</b><span
style='font-weight:normal'>, </span><b>F</b><span style='font-weight:normal'>,
</span><b>G</b><span
style='font-weight:normal'> and </span><b>H</b><span style='font-weight:normal'>
in </span><b>Fig. 1.1.1</b><span style='font-weight:normal'>) connect to the
servers via standard HTTP. There are two classes of servers, Library Servers
(</span><b>A</b><span
style='font-weight:normal'> and </span><b>E</b><span style='font-weight:normal'>
in </span><b>Fig. 1.1.1</b><span style='font-weight:normal'>) and Access Servers
(</span><b>C</b><span style='font-weight:normal'>, </span><b>D</b><span
style='font-weight:normal'>, </span><b>I</b><span style='font-weight:normal'>
and </span><b>J</b><span style='font-weight:normal'> in </span><b>Fig. 1.1.1</b><span
style='font-weight:normal'>). Library Servers are used to store all personal records
of a set of users, and are responsible for their initial authentication when
a session is opened on any server in the Network. For Authors, Library Servers
also hosts their construction area and the authoritative copy of the current
and previous versions of every resource that was published by that author.
Library servers can be used as backups to host sessions when all access servers
in the Network are overloaded. Otherwise, for learners, access servers are
used to host the sessions. Library servers need to be strong on I/O, while
access servers can generally be cheaper hardware. The network is designed
so that the number of concurrent sessions can be increased over a wide range
by simply adding additional Access Servers before having to add additional
Library Servers. Preliminary tests showed that a Library Server could handle
up to 10 Access Servers fully parallel.</span></p>
<p>The Network is divided into so-called domains, which are logical boundaries
between participating institutions. These domains can be used to limit the
flow of personal user information across the network, set access privileges
and enforce royalty schemes.</p>
<h3><a name="_Toc514840839"></a><a name="_Toc421867041">Example of Transactions</a></h3>
<p><b>Fig. 1.1.1</b><span style='font-weight:normal'> also depicts examples
for several kinds of transactions conducted across the Network. </span></p>
<p>An instructor at client <b>B</b><span style='font-weight:
normal'> modifies and publishes a resource on her Home Server </span><b>A</b><span
style='font-weight:normal'>. Server </span><b>A</b><span style='font-weight:
normal'> has a record of all server machines currently subscribed to this resource,
and replicates it to servers </span><b>D</b><span style='font-weight:
normal'> and </span><b>I</b><span style='font-weight:normal'>. However, server
</span><b>D</b><span
style='font-weight:normal'> is currently offline, so the update notification gets
buffered on </span><b>A</b><span style='font-weight:normal'> until </span><b>D</b><span
style='font-weight:normal'> comes online again.</span><b> </b><span
style='font-weight:normal'>Servers </span><b>C</b><span style='font-weight:
normal'> and </span><b>J</b><span style='font-weight:normal'> are currently not
subscribed to this resource. </span></p>
<p>Learners <b>F</b><span style='font-weight:normal'> and </span><b>G</b><span
style='font-weight:normal'> have open sessions on server </span><b>I</b><span
style='font-weight:normal'>, and the new resource is immediately available to
them. </span></p>
<p>Learner <b>H</b><span style='font-weight:normal'> tries to connect to server
</span><b>I</b><span style='font-weight:normal'> for a new session, however,
the machine is not reachable, so he connects to another Access Server </span><b>J</b><span style='font-weight:normal'>
instead. This server currently does not have all necessary resources locally
present to host learner </span><b>H</b><span style='font-weight:normal'>,
but subscribes to them and replicates them as they are accessed by </span><b>H</b><span
style='font-weight:normal'>. </span></p>
<p>Learner <b>H</b><span style='font-weight:normal'> solves a problem on server
</span><b>J</b><span style='font-weight:normal'>. Library Server </span><b>E</b><span style='font-weight:normal'>
is </span><b>H</b><span
style='font-weight:normal'>s Home Server, so this information gets forwarded
to </span><b>E</b><span style='font-weight:normal'>, where the records of
</span><b>H</b><span
style='font-weight:normal'> are updated. </span></p>
<h3><a name="_Toc514840840"></a><a name="_Toc421867042">lonc/lond/lonnet</a></h3>
<p><b>Fig. 1.1.2</b><span style='font-weight:normal'> elaborates on the details
of this network infrastructure. </span></p>
<p><b>Fig. 1.1.2A</b><span style='font-weight:normal'> depicts three servers
(</span><b>A</b><span style='font-weight:normal'>, </span><b>B</b><span
style='font-weight:normal'> and </span><b>C</b><span style='font-weight:normal'>,
</span><b>Fig. 1.1.2A</b><span style='font-weight:normal'>) and a client who
has a session on server </span><b>C.</b></p>
<p>As <b>C</b><span style='font-weight:normal'> accesses different resources
in the system, different handlers, which are incorporated as modules into
the child processes of the web server software, process these requests.</span></p>
<p>Our current implementation uses <span style='font-family:
"Courier New"'>mod_perl</span> inside of the Apache web server software. As an
example, server <b>C</b><span style='font-weight:normal'> currently has four
active web server software child processes. The chain of handlers dealing
with a certain resource is determined by both the server content resource
area (see below) and the MIME type, which in turn is determined by the URL
extension. For most URL structures, both an authentication handler and a content
handler are registered.</span></p>
<p>Handlers use a common library <span style='font-family:"Courier New"'>lonnet</span>
to interact with both locally present temporary session data and data across
the server network. For example, <span style='font-family:"Courier New"'>lonnet</span>
provides routines for finding the home server of a user, finding the server
with the lowest loadavg, sending simple command-reply sequences, and sending
critical messages such as a homework completion, etc. For a non-critical message,
the routines reply with a simple connection lost if the message could not
be delivered. For critical messages,<i> </i><span style='font-family:
"Courier New";font-style:normal'>lonnet</span><i> </i><span style='font-style:
normal'>tries to re-establish</span><i> </i><span style='font-style:normal'>connections,
re-send the command, etc. If no valid reply could be received, it answers
connection deferred and stores the message in</span><i> </i><span
style='font-style:normal'>buffer space to be sent</span><i> </i><span
style='font-style:normal'>at a later point in time. Also, failed critical messages
are logged.</span></p>
<p>The interface between <span style='font-family:"Courier New"'>lonnet</span>
and the Network is established by a multiplexed UNIX domain socket, denoted
DS in <b>Fig. 1.1.2A</b><span style='font-weight:normal'>. The rationale behind
this rather involved architecture is that httpd processes (Apache children)
dynamically come and go on the timescale of minutes, based on workload and
number of processed requests. Over the lifetime of an httpd child, however,
it has to establish several hundred connections to several different servers
in the Network.</span></p>
<p>On the other hand, establishing a TCP/IP connection is resource consuming
for both ends of the line, and to optimize this connectivity between different
servers, connections in the Network are designed to be persistent on the timescale
of months, until either end is rebooted. This mechanism will be elaborated
on below.</p>
<p>Establishing a connection to a UNIX domain socket is far less resource consuming
than the establishing of a TCP/IP connection. <span
style='font-family:"Courier New"'>lonc</span> is a proxy daemon that forks off
a child for every server in the Network. . Which servers are members of the
Network is determined by a lookup table, which <b>Fig. 1.1.2B</b><span
style='font-weight:normal'> is an example of. In order, the entries denote an
internal name for the server, the domain of the server, the type of the server,
the host name and the IP address.</span></p>
<p>The <span style='font-family:"Courier New"'>lonc</span> parent process maintains
the population and listens for signals to restart or shutdown, as well as
<i>USR1</i><span style='font-style:normal'>. Every child establishes a multiplexed
UNIX domain socket for its server and opens a TCP/IP connection to the </span><span style='font-family:"Courier New"'>lond</span>
daemon (discussed below) on the remote machine, which it keeps alive.<i> </i><span
style='font-style:normal'>If the connection is interrupted, the child dies, whereupon
the parent makes several attempts to fork another child for that server. </span></p>
<p>When starting a new child (a new connection), first an init-sequence is carried
out, which includes receiving the information from the remote <span style='font-family:"Courier New"'>lond</span>
which is needed to establish the 128-bit encryption key the key is different
for every connection. Next, any buffered (delayed) messages for the server
are sent.</p>
<p>In normal operation, the child listens to the UNIX socket, forwards requests
to the TCP connection, gets the reply from <span
style='font-family:"Courier New"'>lond</span>, and sends it back to the UNIX socket.
Also, <span style='font-family:"Courier New"'>lonc</span> takes care to the
encryption and decryption of messages.</p>
<p><span style='font-family:"Courier New"'>lonc</span> was build by putting
a non-forking multiplexed UNIX domain socket server into a framework that
forks a TCP/IP client for every remote <span style='font-family:
"Courier New"'>lond</span>.</p>
<p><span style='font-family:"Courier New"'>lond</span> is the remote end of
the TCP/IP connection and acts as a remote command processor. It receives
commands, executes them, and sends replies. In normal operation,<i> </i><span
style='font-style:normal'>a </span><span style='font-family:"Courier New"'>lonc</span>
child is constantly connected to a dedicated <span style='font-family:"Courier New"'>lond</span>
child on the remote server, and the same is true vice versa (two persistent
connections per server combination). </p>
<p><span style='font-family:"Courier New"'>lond</span><i> </i><span style='font-style:normal'>listens
to a TCP/IP port (denoted P in <b>Fig. 1.1.2A</b></span>) and forks off enough
child processes to have one for each other server in the network plus two
spare children. The parent process maintains the population and listens for
signals to restart or shutdown. Client servers are authenticated by IP<i>.</i></p>
<br
clear=ALL style='page-break-before:always'>
<p><span style='font-size:14.0pt'> <img width=432 height=492
src="Session%20One_files/image004.jpg" v:shapes="_x0000_i1026"> </span></p>
<p><span style='font-size:14.0pt'><b>Fig. 1.1.2A</b></span><span
style='font-size:14.0pt'> Overview of Network Communication</span></p>
<p>When a new client server comes online<i>,</i><span
style='font-style:normal'> </span><span style='font-family:"Courier New"'>lond</span>
sends a signal<i> USR1 </i><span style='font-style:normal'>to </span><span
style='font-family:"Courier New"'>lonc</span>, whereupon <span
style='font-family:"Courier New"'>lonc</span> tries again to reestablish all lost
connections, even if it had given up on them before a new client connecting
could mean that that machine came online again after an interruption.</p>
<p>The gray boxes in <b>Fig. 1.1.2A</b><span style='font-weight:
normal'> denote the entities involved in an example transaction of the Network.
The Client is logged into server </span><b>C</b><span style='font-weight:normal'>,
while server </span><b>B</b><span style='font-weight:normal'> is her Home
Server. Server </span><b>C</b><span style='font-weight:normal'> can be an
Access Server or a Library Server, while server </span><b>B</b><span
style='font-weight:normal'> is a Library Server. She submits a solution to a homework
problem, which is processed by the appropriate handler for the MIME type problem.
Through </span><span style='font-family:"Courier New"'>lonnet</span>, the
handler writes information about this transaction to the local session data.
To make a permanent log entry, <span style='font-family:"Courier New"'>lonnet
</span>establishes a connection to the UNIX domain socket for server <b>B</b><span
style='font-weight:normal'>. </span><span style='font-family:"Courier New"'>lonc</span>
receives this command, encrypts it, and sends it through the persistent TCP/IP
connection to the TCP/IP port of the remote <span style='font-family:"Courier New"'>lond</span>.
<span style='font-family:"Courier New"'>lond</span> decrypts the command,
executes it by writing to the permanent user data files of the client, and
sends back a reply regarding the success of the operation. If the operation
was unsuccessful, or the connection would have broken down, <span style='font-family:
"Courier New"'>lonc</span> would write the command into a FIFO buffer stack to
be sent again later. <span style='font-family:"Courier New"'>lonc</span> now
sends a reply regarding the overall success of the operation to <span
style='font-family:"Courier New"'>lonnet</span> via the UNIX domain port, which
is eventually received back by the handler.</p>
<h3><a name="_Toc514840841"></a><a name="_Toc421867043">Scalability and Performance
Analysis</a></h3>
<p>The scalability was tested in a test bed of servers between different physical
network segments, <b>Fig. 1.1.2B</b><span style='font-weight:
normal'> shows the network configuration of this test.</span></p>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=443 valign=top class="Normal"> <p><span style='font-family:"Courier New"'>msul1:msu:library:zaphod.lite.msu.edu:35.8.63.51</span></p>
<p><span style='font-family:"Courier New"'>msua1:msu:access:agrajag.lite.msu.edu:35.8.63.68</span></p>
<p><span style='font-family:"Courier New"'>msul2:msu:library:frootmig.lite.msu.edu:35.8.63.69</span></p>
<p><span style='font-family:"Courier New"'>msua2:msu:access:bistromath.lite.msu.edu:35.8.63.67</span></p>
<p><span style='font-family:"Courier New"'>hubl14:hub:library:hubs128-pc-14.cl.msu.edu:35.8.116.34</span></p>
<p><span style='font-family:"Courier New"'>hubl15:hub:library:hubs128-pc-15.cl.msu.edu:35.8.116.35</span></p>
<p><span style='font-family:"Courier New"'>hubl16:hub:library:hubs128-pc-16.cl.msu.edu:35.8.116.36</span></p>
<p><span style='font-family:"Courier New"'>huba20:hub:access:hubs128-pc-20.cl.msu.edu:35.8.116.40</span></p>
<p><span style='font-family:"Courier New"'>huba21:hub:access:hubs128-pc-21.cl.msu.edu:35.8.116.41</span></p>
<p><span style='font-family:"Courier New"'>huba22:hub:access:hubs128-pc-22.cl.msu.edu:35.8.116.42</span></p>
<p><span style='font-family:"Courier New"'>huba23:hub:access:hubs128-pc-23.cl.msu.edu:35.8.116.43</span></p>
<p><span style='font-family:"Courier New"'>hubl25:other:library:hubs128-pc-25.cl.msu.edu:35.8.116.45</span></p>
<p><span style='font-family:"Courier New"'>huba27:other:access:hubs128-pc-27.cl.msu.edu:35.8.116.47</span></p></td>
</tr>
</table>
<p><span style='font-size:14.0pt'><b>Fig. 1.1.2B</b></span><span
style='font-size:14.0pt'> Example of Hosts Lookup Table </span><span
style='font-size:9.0pt;font-family:"Courier New"'>/home/httpd/lonTabs/hosts.tab</span></p>
<p>In the first test,<span style='layout-grid-mode:line'> the simple </span><span style='font-family:"Courier New";layout-grid-mode:line'>ping</span><span
style='layout-grid-mode:line'> command was used. The </span><span
style='font-family:"Courier New";layout-grid-mode:line'>ping</span><span
style='layout-grid-mode:line'> command is used to test connections and yields
the server short name as reply. In this scenario, </span><span style='font-family:"Courier New";layout-grid-mode:
line'>lonc</span><span style='layout-grid-mode:line'> was expected to be the speed-determining
step, since </span><span style='font-family:"Courier New";
layout-grid-mode:line'>lond</span><span style='layout-grid-mode:line'> at the
remote end does not need any disk access to reply. The graph <b>Fig.
1.1.2C</b></span><span style='layout-grid-mode:
line'> shows number of seconds till completion versus number of processes issuing
10,000 ping commands each against one Library Server (450 MHz Pentium II in
this test, single IDE HD). For the solid dots, the processes were concurrently
started on <i>the same</i></span><span style='layout-grid-mode:
line'> Access Server and the time was measured till the processes finished all
processes finished at the same time. One Access Server (233 MHz Pentium II
in the test bed) can process about 150 pings per second, and as expected,
the total time grows linearly with the number of pings.</span></p>
<p><span style='layout-grid-mode:line'>The gray dots were taken with up to seven
processes concurrently running on <i>different</i></span><span
style='layout-grid-mode:line'> machines and pinging the same server the processes
ran fully concurrent, and each process finished as if the other ones were
not present (about 1000 pings per second). Execution was fully parallel.</span></p>
<p>In a second test, <span style='font-family:"Courier New"'>lond</span> was
the speed-determining step 10,000 <span style='font-family:"Courier New"'>put</span>
commands each were issued first from up to seven concurrent processes on the
same machine, and then from up to seven processes on different machines. The
<span
style='font-family:"Courier New"'>put</span> command requires data to be written
to the permanent record of the user on the remote server.</p>
<p>In particular, one <span style='font-family:"Courier New"'>"put"</span>
request meant that the process on the Access Server would connect to the UNIX
domain socket dedicated to the library server, <span style='font-family:"Courier New"'>lonc</span>
would take the data from there, shuffle it through the persistent TCP connection,
<span style='font-family:"Courier New"'>lond</span> on the remote library
server would take the data, write to disk (both to a dbm-file and to a flat-text
transaction history file), answer "ok", <span
style='font-family:"Courier New"'>lonc</span> would take that reply and send it
to the domain socket, the process would read it from there and close the domain-socket
connection.</p>
<p><span style='font-size:14.0pt'> <img width=220 height=190
src="Session%20One_files/image005.jpg" v:shapes="_x0000_i1027"> </span></p>
<p><span style='font-size:14.0pt'><b>Fig. 1.1.2C</b></span><span
style='font-size:14.0pt'> Benchmark on Parallelism of Server-Server Communication
(no disk access)</span></p>
<p>The graph <b>Fig. 1.1.2D</b><span style='font-weight:normal'> shows the results.
Series 1 (solid black diamond) is the result of concurrent processes on the
same server all of these are handled by the same server-dedicated </span><span style='font-family:"Courier New"'>lond-</span>child,
which lets the total amount of time grow linearly.</p>
<p><span style='font-size:14.0pt'> <img width=432 height=311
src="Session%20One_files/image007.jpg" v:shapes="_x0000_i1028"> </span></p>
<p><span style='font-size:14.0pt'><b>Fig. 2D</b></span><span
style='font-size:14.0pt'> Benchmark on Parallelism of Server-Server Communication
(with disk access as in Fig. 2A)</span></p>
<p>Series 2 through 8 were obtained from running the processes on different
Access Servers against one Library Server, each series goes with one server.
In this experiment, the processes did not finish at the same time, which most
likely is due to disk-caching on the Library Server <span
style='font-family:"Courier New"'>lond</span>-children whose datafile was (partly)
in disk cache finished earlier. With seven processes from seven different
servers, the operation took 255 seconds till the last process was finished
for 70,000 <span style='font-family:"Courier New"'>put</span> commands (270
per second) versus 530 seconds if the processes ran on the same server (130
per second).</p>
<h3><a name="_Toc514840842"></a><a name="_Toc421867044">Dynamic Resource Replication</a></h3>
<p>Since resources are assembled into higher order resources simply by reference,
in principle it would be sufficient to retrieve them from the respective Home
Servers of the authors. However, there are several problems with this simple
approach: since the resource assembly mechanism is designed to facilitate
content assembly from a large number of widely distributed sources, individual
sessions would depend on a large number of machines and network connections
to be available, thus be rather fragile. Also, frequently accessed resources
could potentially drive individual machines in the network into overload situations.</p>
<p>Finally, since most resources depend on content handlers on the Access Servers
to be served to a client within the session context, the raw source would
first have to be transferred across the Network from the respective Library
Server to the Access Server, processed there, and then transferred on to the
client.</p>
<p>To enable resource assembly in a reliable and scalable way, a dynamic resource
replication scheme was developed. <b>Fig. 1.1.3</b><span
style='font-weight:normal'> shows the details of this mechanism.</span></p>
<p>Anytime a resource out of the resource space is requested, a handler routine
is called which in turn calls the replication routine (<b>Fig. 1.1.3A</b><span style='font-weight:normal'>).
As a first step, this routines determines whether or not the resource is currently
in replication transfer (</span><b>Fig. 1.1.3A,</b><span style='font-weight:normal'>
</span><b>Step D1a</b><span
style='font-weight:normal'>). During replication transfer, the incoming data is
stored in a temporary file, and </span><b>Step D1a</b><span style='font-weight:
normal'> checks for the presence of that file. If transfer of a resource is actively
going on, the controlling handler receives an error message, waits for a few
seconds, and then calls the replication routine again. If the resource is
still in transfer, the client will receive the message Service currently
not available.</span></p>
<p>In the next step (<b>Fig. 1.1.3A, Step D1b</b><span
style='font-weight:normal'>), the replication routine checks if the URL is locally
present. If it is, the replication routine returns OK to the controlling handler,
which in turn passes the request on to the next handler in the chain.</span></p>
<p>If the resource is not locally present, the Home Server of the resource author
(as extracted from the URL) is determined (<b>Fig. 1.1.3A, Step D2</b><span style='font-weight:normal'>).
This is done by contacting all library servers in the authors domain (as
determined from the lookup table, see </span><b>Fig. 1.1.2B</b><span style='font-weight:normal'>).
In </span><b>Step D2b</b><span style='font-weight:normal'> a query is sent
to the remote server whether or not it is the Home Server of the author (in
our current implementation, an additional cache is used to store already identified
Home Servers (not shown in the figure)). In Step </span><b>D2c</b><span
style='font-weight:normal'>, the remote server answers the query with True or
False. If the Home Server was found, the routine continues, otherwise it contacts
the next server (</span><b>Step D2a</b><span style='font-weight:normal'>).
If no server could be found, a File not Found error message is issued. In
our current implementation, in this step the Home Server is also written into
a cache for faster access if resources by the same author are needed again
(not shown in the figure). </span></p>
<br
clear=ALL style='page-break-before:always'>
<p><span style='font-size:14.0pt'> <img width=432 height=581
src="Session%20One_files/image009.jpg" v:shapes="_x0000_i1029"> </span></p>
<p><span style='font-size:14.0pt'><b>Fig. 1.1.3A</b></span><span
style='font-size:14.0pt'> Dynamic Resource Replication, subscription</span></p>
<br
clear=ALL style='page-break-before:always'>
<p><span style='font-size:14.0pt'> <img width=432 height=523
src="Session%20One_files/image011.jpg" v:shapes="_x0000_i1030"> </span></p>
<p><span style='font-size:14.0pt'><b>Fig. 1.1.3B</b></span><span
style='font-size:14.0pt'> Dynamic Resource Replication, modification</span></p>
<p>In <b>Step D3a</b><span style='font-weight:normal'>, the routine sends a
subscribe command for the URL to the Home Server of the author. The Home Server
first determines if the resource is present, and if the access privileges
allow it to be copied to the requesting server (</span><b>Fig. 1.1.3A, Step
D3b</b><span style='font-weight:normal'>). If this is true, the requesting
server is added to the list of subscribed servers for that resource (</span><b>Step
D3c</b><span style='font-weight:normal'>). The Home Server will reply with
either OK or an error message, which is determined in </span><b>Step D4</b><span style='font-weight:normal'>.
If the remote resource was not present, the error message File not Found
will be passed on to the client, if the access was not allowed, the error
message Access Denied is passed on. If the operation succeeded, the requesting
server sends an HTTP request for the resource out of the /</span><span style='font-family:"Courier New"'>raw</span>
server content resource area of the Home Server.</p>
<p>The Home Server will then check if the requesting server is part of the network,
and if it is subscribed to the resource (<b>Step D5b</b><span
style='font-weight:normal'>). If it is, it will send the resource via HTTP to
the requesting server without any content handlers processing it (</span><b>Step
D5c</b><span style='font-weight:normal'>). The requesting server will store
the incoming data in a temporary data file (</span><b>Step D5a</b><span
style='font-weight:normal'>) this is the file that </span><b>Step D1a</b><span
style='font-weight:normal'> checks for. If the transfer could not complete, and
appropriate error message is sent to the client (</span><b>Step D6</b><span
style='font-weight:normal'>). Otherwise, the transferred temporary file is renamed
as the actual resource, and the replication routine returns OK to the controlling
handler (</span><b>Step D7</b><span style='font-weight:normal'>). </span></p>
<p><b>Fig. 1.1.3B</b><span style='font-weight:normal'> depicts the process
of modifying a resource. When an author publishes a new version of a resource,
the Home Server will contact every server currently subscribed to the resource
(</span><b>Fig. 1.1.3B, Step U1</b><span style='font-weight:normal'>), as
determined from the list of subscribed servers for the resource generated
in </span><b>Fig. 1.1. 3A, Step D3c</b><span style='font-weight:normal'>.
The subscribing servers will receive and acknowledge the update message (</span><b>Step
U1c</b><span
style='font-weight:normal'>). The update mechanism finishes when the last subscribed
server has been contacted (messages to unreachable servers are buffered).</span></p>
<p>Each subscribing server will check if the resource in question had been accessed
recently, that is, within a configurable amount of time (<b>Step U2</b><span style='font-weight:normal'>).
</span></p>
<p>If the resource had not been accessed recently, the local copy of the resource
is deleted (<b>Step U3a</b><span style='font-weight:normal'>) and an unsubscribe
command is sent to the Home Server (</span><b>Step U3b</b><span
style='font-weight:normal'>). The Home Server will check if the server had indeed
originally subscribed to the resource (</span><b>Step U3c</b><span
style='font-weight:normal'>) and then delete the server from the list of subscribed
servers for the resource (</span><b>Step U3d</b><span
style='font-weight:normal'>).</span></p>
<p>If the resource had been accessed recently, the modified resource will be
copied over using the same mechanism as in <b>Step D5a</b><span
style='font-weight:normal'> through </span><b>D7</b><span style='font-weight:
normal'> of </span><b>Fig. 1.1.3A</b><span style='font-weight:normal'> (</span><b>Fig.
1.1.3B</b><span style='font-weight:normal'>, </span><b>Steps U4a </b><span
style='font-weight:normal'>through</span><b> U6</b><span style='font-weight:
normal'>).</span></p>
<p><span style='font-family:Arial'>Load Balancing</span></p>
<p><span style='font-family:"Courier New"'>lond</span> provides a function to
query the servers current <span style='font-family:"Courier New"'>loadavg</span><span
style='font-size:14.0pt'>. </span>As a configuration parameter, one can determine
the value of <span style='font-family:"Courier New"'>loadavg,</span> which
is to be considered 100%, for example, 2.00. </p>
<p>Access servers can have a list of spare access servers, <span
style='font-size:9.0pt;font-family:"Courier New"'>/home/httpd/lonTabs/spares.tab</span>,
to offload sessions depending on own workload. This check happens is done
by the login handler. It re-directs the login information and session to the
least busy spare server if itself is overloaded. An additional round-robin
IP scheme possible. See <b>Fig. 1.1.4</b><span style='font-weight:normal'>
for an example of a load-balancing scheme.</span></p>
<p><span style='font-size:28.0pt;color:green'> <img width=241 height=139
src="Session%20One_files/image013.jpg" v:shapes="_x0000_i1031"> </span></p>
<p><span
style='font-size:14.0pt'><b>Fig. 1.1.4 </b></span><span style='font-size:14.0pt'>Example
of Load Balancing</span><span style='font-size:14.0pt'> <b><i><br
clear=ALL style='page-break-before:always'>
</i></b></span></p>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionThre1.html
+++ doc/gutshtml/SessionThre1.html
<html><head><meta name=Titlecontent="Session Three: Publication, Content Maps, Course Maps (Gerd)"><meta http-equiv=Content-Type content="text/html; charset=macintosh"><title>Session Three: Publication, Content Maps, Course Maps (Gerd)</title><style><!--.Section1 {page:Section1;}.Section2 {page:Section2;}--></style></head><body bgcolor=#FFFFFF class="Normal" lang=EN-US><div class=Section1> <h2>Session Three: Publication, Content Maps, Course Maps (Gerd)</h2> <h3><a name="_Toc514840855"></a><a name="_Toc421867109">Publication of a Resource</a></h3> <p>Authors can only write-access the<i> </i><spanstyle='font-family:"Courier New";font-style:normal'>/~</span><spanstyle='font-family:"Courier New"'><i>authorname</i></span><spanstyle='font-family:"Courier New"'>/</span> space. They can copy resources into the resource area through the publication step, and move them back through a recover step. Authors do not have direct write-access to their resource space. </p> <div class=Section9> <div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'> <p style='border:none;padding:0in'><spanstyle='font-size:14.0pt'><b>Construction space</b></span><spanstyle='font-size:14.0pt'> </span><span style='font-size:14.0pt;font-family:Wingdings'></span><span style='font-size:14.0pt'> Publication Step </span><spanstyle='font-size:14.0pt;font-family:Wingdings'></span><span style='font-size:14.0pt'> <b>Resource space</b></span></p> <p style='border:none;padding:0in'><span style='font-size:14.0pt'> </span><spanstyle='font-size:14.0pt;font-family:Wingdings'></span><span style='font-size:14.0pt'> Retrieve </span><span style='font-size:14.0pt;font-family:Wingdings'></span> </p> </div> <p>During the publication step, several events will be triggered. Metadata is gathered, where a wizard manages default entries on a hierarchical per-directory base: The wizard imports the metadata (including access privileges and royalty information) from the most recent published resource in the current directory, and if that is not available, from the next directory above, etc. The Network keeps all previous versions of a resource and makes them available by an explicit version number, which is inserted between the file name and extension, for example <span style='font-family:"Courier New"'>foo.2.html</span>, while the most recent version does not carry a version number (<spanstyle='font-family:"Courier New"'>foo.html</span>). Servers subscribing to a changed resource are notified that a new version is available.</p> <h3><a name="_Toc514840857"></a><a name="_Toc421867110">Content Re-usage and Granularity</a></h3> <p>Any faculty participating in the Network can publish their own learning resources into the common pool. To that end, the Network provides a construction space which is only accessible to the author, and a publication process, which transfers the material to the shared pool during the publication process, metadata about the resource is gathered, and system-wide update notification and versioning mechanisms are triggered..</p> <p>Learning resources could be simple paragraphs of text, movies, applets, individualizing homework problems, etc. In addition to providing a distributed digital library with mechanisms to store and catalog these resources, the Network enables faculty to combine and sequence these resources at several levels: An instructor from Community College A could combine a text paragraph from University B with a movie from College C and an online homework problem from Publisher D, to form one page. Another instructor from High School E can take that page from Community College A and combine it with other pages into a module, unit or chapter. Those in turn can be combined into whole coursepacks. Faculty can design their own curricula from existing and newly created resources instead of having to buy into a complete off-the-shelf product.</p> <p><b>Fig. 2.3.1</b><span style='font-weight:normal'> shows a general overview of the resource assembly mechanism and the different levels of content granularity supported by the current implementation of this principle. The topmost puzzle piece represents a resource at the fragment level one GIF, one movie, one paragraph of text, one problem, or one regular web page. Attached to the resource is metadata gathered at the publication time of the resource.</span></p> <p>Using the resource assembly tool described below, these fragments and pages can be assembled into a page. A page is a resource of the grain size which would be rendered as one page on the web and/or on the printer.</p> <p>Using the same tool, fragments (which would then be rendered as standalone pages), pages and sequences can be assembled into sequences. Sequences are resources which are rendered a sequence of pages, not necessarily linear. Examples are one lesson, one chapter, or one learning cycle</p> <p>On the third granularity level, fragments (rendered as standalone pages), pages, and sequences can be assembled into courses. Courses are a sequence which represents the entirety of the resources belonging to a learning unit into which learners can be enrolled. Examples are a University one-semester course, a</p> <p>workshop, or a High School class.</p> <p align=center style='text-align:center'><img border=0width=291 height=436 id="_x0000_i1029" src="handout_files/image005.png"></p> <p><span style='font-size:14.0pt'><b>Fig. 2.1.1</b></span><spanstyle='font-size:14.0pt'> Resource Assembly</span></p> <h3><a name="_Toc514840858"></a><a name="_Toc421867111">Maps</a></h3> <p>To increase the utility of the materials, the number of hard-coded hyperlinks between the resources should be minimized. The actual combining and sequencing is part of the system functionality and driven by external "roadmaps", which are constructed by the instructors. With this mechanism, one and the same resource can be part of different courses in different contexts. The soft-linking makes it possible to import only the desired set of resources without effectively importing additional parts another instructors resources through hard-linked menus or "next page" buttons that might resided on those resources.</p> <h3><a name="_Toc514840859"></a><a name="_Toc421867112">Curriculum Adaptivity</a></h3> <p>Maps allow for conditional choices and branching points. The actual path through and presentation of the learning resources is determined by instructor-specified combinations of learner choices and system-generated adaptations (for example, if the learner does not pass a test, additional resources may be included). Each learner can have an individualized curriculum according to preferences, capabilities and skills.</p> <p>These maps can be generated at different levels of granularity with a graphical tool, or in an automated way through custom scripts.</p> <h3><a name="_Toc514840860"></a><a name="_Toc421867113">Resource Assembly Tool</a></h3> <p>The Network provides the Resource Assembly Tool as one means to generate maps. The Resource Assembly Tool provides a graphical user interface inside of a standard web browser. The current implementation is written in JavaScript. </p> <p><b>Fig. 2.3.2</b><span style='font-weight:normal'> shows screenshots of the current implementation. The interface usually consists of two browser windows, one resizable one with a frameset that contains the menu and the map under construction, and a multipurpose non-resizable window that displays information and input forms.</span></p> <p>When a new map is started, it only has a start and a finish resources. The author can then enlarge the map area and insert resources into it.</p> <p>In <b>Fig. 2.3.2A</b><span style='font-weight:normal'>, the author is editing information about a resource in the map after clicking on the box representing the resource in the map. In the dialog, the author can enter a map-internal title for the resource, which is displayed to the learners when navigating the maps. In the same dialog, the author will specify the URL of the resource, which can either be internal to the Network, or any URL of a web page outside of it. For internal resources, the author can also browse the Network filesystem or search the resource metadata to locate an appropriate resource.</span></p> <p><span style='font-size:14.0pt'><b><img border=0 width=431height=327 id="_x0000_i1030" src="handout_files/image006.jpg">Fig. 2.3.2A</b></span><spanstyle='font-size:14.0pt'> </span><span style='font-size:12.0pt'>Example, Graphical User Interface of Resource Assembly Tool</span></p> <p>The resource priority can be chosen. A resource can be regular, mandatory or optional. These resource priorities are only used in book-keeping of earned points by the learners. Within the map, resources of different priorities are displayed in different colors.</p> <p>The dialog also allows for two modes of removing the resource from the map: deleting it from the map including every link to and from it, and deleting it while reconnecting any links that went through the resource. As an example, resources A and B might both connect to resource C, and resource C might connect to D. When removing C from the map using the first option, A and B will not be connected to D anymore. Using the second option, in the end, A will connect to D, and B will connect to D. In the latter case, the Resource Assembly tool will also handle link conditions correctly: if A connected to C under condition 1, and C connected to D under condition 2, then in the end A will connect to D under a new condition which is (1 AND 2).</p> <p>Finally, this dialog allows the author to connect the resource to another resource (or itself) through a new link. When selecting this option, the Resource Assembly Tool goes into link mode, and will link the current resource to the next resource clicked on (unless the action is cancelled).</p> <p><img border=0 width=431 height=327 id="_x0000_i1031"src="handout_files/image007.jpg"></p> <p><span style='font-size:14.0pt'><b>Fig. 2.3.2B</b></span><spanstyle='font-size:14.0pt'> </span><span style='font-size:12.0pt'>Example, Graphical User Interface of Resource Assembly Tool</span></p> <p><b>Fig. 2.3.2B</b><span style='font-weight:normal'> shows the Resource Assembly Tool in info mode, that is, when no specific component of the map is edited, and if the Tool is not in link mode. In info mode, the contents of the dialog window change dynamically as the mouse is moved over the components of the map. In this case, the mouse pointer is over the link condition between two resources. The dialog window shows the titles of the connected resources, as well as the condition priority. In this scenario, the condition priority is set such that the link cannot be taken (is blocked) if the condition is false. The condition priority can also be set such that the link is recommended if the condition is true (possibly giving the learner several options where to go next), or that the link has to be taken (is forced) over any other possible link if the condition is true. Within the map, conditions of different priorities are displayed in different colors. If the author now were to click on the condition, the Tool would go into edit mode, and the condition could be edited.</span></p> <p><b>Fig. 2.3.2C</b><span style='font-weight:normal'> shows the Tool in edit mode for the link between the resource titles displayed. The author can remove the link, or insert a new resource into the link.</span></p> <p>Obviously, by this mechanism, rather complex maps can be generated. These are different from binary trees, both because branches can loop back, and because branches can be re-united in fact, most branches re-unite in the finish resources. Into each link, a condition with one of three different priorities can be attached. Whether or not a certain resource in the map can be displayed depends on whether or not it can be reached through any path along allowed links, starting with the start resource of the course. If a resource is not linked to, it is assumed to be accessible if the map which it is part of is accessible.</p> <p><img border=0 width=431 height=327 id="_x0000_i1032"src="handout_files/image008.jpg"></p> <p><span style='font-size:14.0pt'><b>Fig. 2.3.2C</b></span><spanstyle='font-size:14.0pt'> </span><span style='font-size:12.0pt'>Example, Graphical User Interface of Resource Assembly Tool </span></p> <h3><a name="_Toc514840861"></a><a name="_Toc421867114">Map Representation and Storage Format</a></h3> <p><b>Fig. 2.3.3</b><span style='font-weight:normal'> shows the XML representation of the resource map constructed in </span><b>Fig. 2.3.2</b><spanstyle='font-weight:normal'>, which is the format in which maps are stored. In the figure, however, additional graphical map layout information generated by the Resource Assembly Tool is not displayed. This graphical information is optional to re-generate the same graphical layout when the map is brought up again in the Resource Assembly Tool, and is not needed for any other system functionality.</span></p> <p>Maps can be generated by tools other than the Resource Assembly Tool. In particular, an author might have some other representation of a course sequence, which can be converted into a map using scripts. If this map then were to be brought up in the Resource Assembly Tool, the Tool would automatically generate a graphical layout for it. Each entry of the map (resources, conditions and links) is stored in a separate tag. </p> <p>Resources and conditions have to have unique ID numbers. These numbers are automatically generated by the Resource Assembly Tool when the entry is first created, or added to the entries when a map generated outside the Resource Assembly Tool is first retrieved. They can also be assigned by custom scripts or added in by hand.</p> <p>In this example, <b>Fig. 2.3.3</b><span style='font-weight:normal'>, entry 1 is the start resource of the map when this map is accessed, the source (src) URL of this tag will be the first resource rendered. Entry 2 is the finish resource of this map. This resource will be the last resource in the sequence of resources. Entry 6 is a problem resource with the given URL and title, as well as the priority mandatory. Entry 19 is a condition, which is used by the link between entries 6, the problem, and 9, a sequence. <i>The final syntax for conditions has not yet been determined.</i></span></p> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=443 valign=top class="Normal"> <p class=Preformatted><span style='font-size:8.0pt'><map></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="1" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> src="/res/msu/korte/phy231welcome.html" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> type="start" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Start"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="2" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> src="" type="finish" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Finish"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="6" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> src="/res/msu/korte/tests/units.problem" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> type="mandatory" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Physical Units Test"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="9" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> src="/res/msu/korte/chapters/onedim.sequence" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Motion in One Dimension"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="11" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> src="/res/msu/bauer/bridges/units.sequence" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Physical Units Refresher"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="19" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./res/msu/korte/tests/units.problem].status=solved"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="1" to="6"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="6" to="9" condition="19"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="6" to="11"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="11" to="6"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'></map></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.3</b></span><spanstyle='font-size:14.0pt'> XML representation of the map in Fig. 2.3.2C (non-graphical information only).</span></p> <h3><a name="_Toc514840866"></a><a name="_Toc514840862"></a><aname="_Toc514920452"></a><a name="_Toc421867115">Example of Nested Maps</a></h3> <p><b>Fig. 2.3.4 </b><span style='font-weight:normal'>shows the XML representation of three maps which are imported into each other. </span><b>Fig. 2.3.4B</b><span style='font-weight:normal'> is the sequence that is referenced as resource 9 in the course map </span><b>Fig. 2.3.4A</b><spanstyle='font-weight:normal'>. In the resulting map, the entry point of resource 9 in </span><b>Fig. 2.3.4A</b><span style='font-weight:normal'> is in fact the entry point of the start resource of </span><b>Fig. 2.3.4B</b><spanstyle='font-weight:normal'>, namely, resource 1 there. The exit point of resource 9 in </span><b>Fig. 2.3.4A</b><span style='font-weight:normal'> is the exit point of the finish resource of </span><b>Fig. 2.3.4B</b><spanstyle='font-weight:normal'>, namely, resource 2 there.</span></p> <p><b>Fig. 2.3.4C</b><span style='font-weight:normal'> is the page which is referenced as resource 24 in </span><b>Fig. 2.3.4B</b><spanstyle='font-weight:normal'>.</span></p> <p>A course can easily contain several hundreds of these nested maps. Since the accessibility of each individual resource in the course depends on the state of all possible paths linking it to the start resource of the course across all intermediate maps, the computation and disk-I/O effort per single transaction could quickly become prohibitive. Thus, all maps and conditions are compiled into a pre-processed binary data structure at the start of a session.</p> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=442 valign=top class="Normal"> <p class=Preformatted><span style='font-size:8.0pt'><map></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="1" src="" type="start" title="Start"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="2" src="" type="finish" title="Finish"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="5" src="/res/msu/korte/tests/pretest.problem" type="mandatory" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Pretest"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="9" src="/res/msu/korte/parts/part1.sequence" type="mandatory" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Part 1"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="11" src="/res/msu/korte/tests/midterm.sequence" type="mandatory" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Midterm"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="15" src="/res/msu/korte/parts/part2.sequence" type="mandatory" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Part 2"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="19" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/korte/tests/pretest.problem].status=solved"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="20" src="/res/msu/korte/refresh/refresher.sequence" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Refresher"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="29" src="/res/msu/korte/tests/final.sequence" type="mandatory" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Final Exam"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="30" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/korte/tests/midterm.sequence].percent>60"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="36" src="/res/msu/korte/refresh/review.sequence"</span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Review"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="43" type="force" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/korte/tests/midterm.sequence].percent<10"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="58" src="/res/msu/korte/chapters/applications.sequence" type="optional" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Applications"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="70" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/korte/tests/final.sequence].percent>60"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="1" to="5"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="9" to="11"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="11" to="15" condition="30"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="5" to="9" condition="19"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="5" to="20"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="20" to="5"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="11" to="36" condition="43"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="36" to="9"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="36" to="11"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="15" to="29"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="29" to="2" condition="70"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="11" to="11"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'></map></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.4A</b></span><spanstyle='font-size:14.0pt'> Example of a course map that has nested sequences</span></p> <br clear=ALLstyle='page-break-before:always'> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=442 valign=top class="Normal"> <p class=Preformatted><span style='font-size:8.0pt'><map></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="1" src="" type="start" title="Start"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="2" src="" type="finish" title="Finish"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="5" src="/res/msu/korte/parts/part1intro.html" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> title="Part 1 Introduction"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="6" src="/res/msu/korte/parts/part1dir.xml" title="Directions"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="12" src="/res/msu/korte/tests/part11.problem" title="Problem 1"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="13" src="/res/msu/korte/tests/part13.problem" title="Problem 3"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="19" src="/res/msu/korte/tests/part12.problem" title="Problem 2"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="24" src="/res/msu/korte/parts/summary.page" title="Summary"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="47" type="stop"</span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/korte/tests/part11.problem].status=solved"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="48" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/korte/tests/part12.problem].status=solved"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="49" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/korte/tests/part13.problem].status=solved"></span></p> <p class=Preformatted><span style='font-size:8.0pt'> </condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="5" to="6"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="1" to="5"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="6" to="12"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="6" to="13"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="6" to="19"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="12" to="24" condition="47"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="19" to="24" condition="48"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="13" to="24" condition="49"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="24" to="2"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'></map></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.4B</b></span><spanstyle='font-size:14.0pt'> Example of a sequence (</span><spanstyle='font-size:14.0pt;font-family:"Courier New"'>part1.sequence</span><spanstyle='font-size:14.0pt'>) that has nested pages</span></p> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=443 valign=top class="Normal"> <p class=Preformatted><span style='font-size:8.0pt'><map></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="1" src="" type="start" title="Start"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="2" src="" type="finish" title="Finish"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="5" src="/res/msu/smith/racecar.problem"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="6" src="/res/msu/smith/toofast.html"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="8" src="/res/msu/smith/tooslow.html"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><resource id="15" src="/res/msu/smith/accelerate.html"></resource></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="40" type="force" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/smith/racecar.problem].status=solved"></condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="41" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/smith/racecar.problem].answer=friction"></condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="42" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'> value="user.assessments[this./msu/smith/racecar.problem].answer=sliding"></condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><condition id="43" type="stop" </span></p> <p class=Preformatted><span style='font-size:8.0pt'>value="user.assessments[this./msu/smith/racecar.problem].answer=nonconstant"></condition></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="1" to="5"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="5" to="6" condition="41"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="5" to="8" condition="42"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="5" to="15" condition="43"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="6" to="2"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="8" to="2"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="15" to="2"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'><link from="5" to="2" condition="40"></link></span></p> <p class=Preformatted><span style='font-size:8.0pt'></map></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.4C</b></span><spanstyle='font-size:14.0pt'> Example of a page (</span><span style='font-size:14.0pt;font-family:"Courier New"'>summary.page</span><span style='font-size:14.0pt'>)</span></p> <br clear=ALLstyle='page-break-before:always'> <p><span style='font-size:14.0pt'><img border=0 width=432height=456 id="_x0000_i1033" src="handout_files/image009.jpg"></span></p> <p><span style='font-size:14.0pt'><b>Fig. 2.3.5 </b></span><spanstyle='font-size:14.0pt'>Flow chart of the course initialization routine run when a learner first accesses a course during a session (see Figs. 2.1.6A and 2.1.8A for the procedures </span><span style='font-size:14.0pt;font-family:"Courier New"'>loadmap</span><span style='font-size:14.0pt'> and </span><spanstyle='font-size:14.0pt;font-family:"Courier New"'>traceroute</span><spanstyle='font-size:14.0pt'>)</span></p> <h3><a name="_Toc514840863"></a><a name="_Toc514920453"></a><aname="_Toc421867116">Initialization of a Course for a Learner</a></h3> <p>When a learner first enters a course during a session, the system will initialize this course for the learner. In particular, at this point, the course map and all nested (embedded) maps and resources are evaluated, and the information is compiled into two binary structures, which are stored with the session information: the resource properties hash, and the link conditions array. This information will be used over the duration of the session for several purposes: navigation (which resource is the next, which one the previous?), for access control (can the resource be reached under the link conditions given the current state of the student?), and to register assessment results within the context of a certain course and map (there might be several instances of the same problem resource within a course).</p> <h3><a name="_Toc514840864"></a><a name="_Toc514920454"></a><aname="_Toc421867117">Evaluation of the Map Structure for a Course</a></h3> <p>The URL of the course is passed to the procedure <spanstyle='font-family:"Courier New"'>readmap</span> (<b>Fig. 2.3.5</b><spanstyle='font-weight:normal'>). Procedure </span><span style='font-family:"Courier New"'>readmap</span> first initializes the resource properties as an empty hash, seeds the link conditions array with a 0<sup>th</sup> element, which is set to true, priority normal, and sets the map counter to 0 (<b>Fig. 2.3.5, Step R1</b><spanstyle='font-weight:normal'>). While the resource properties hash, the link conditions array and the map counter are global variable of the initialization process, all other variables are local to the procedures (an important property for these routines to run recursively). The procedure </span><spanstyle='font-family:"Courier New"'>readmap</span> then calls procedure <spanstyle='font-family:"Courier New"'>loadmap</span> for the URL of the course (<b>Fig. 2.3.5, Step R2</b><span style='font-weight:normal'>).</span></p> <p><b>Figs. 2.1.6, 2.1.7</b><span style='font-weight:normal'> show a dump of excerpts of the binary structure generated in </span><spanstyle='font-family:"Courier New"'>loadmap</span> for the nested maps of example <b>Fig. 2.3.4</b><span style='font-weight:normal'>.</span></p> <p>Procedure <span style='font-family:"Courier New"'>loadmap</span> (<b>Fig. 2.3.6A</b><span style='font-weight:normal'>) first checks if the map URL has already been processed (multiple inclusion of the same map in a course structure) (</span><b>Fig. 2.3.6A, Step L1</b><span style='font-weight:normal'>) if it was, it has been assigned a map counter value in the resource properties hash. If the map has been processed, there is no need to process it again, and </span><span style='font-family:"Courier New"'>loadmap</span> returns.</p> <p>If the map has not been processed yet, the map counter is incremented and the map is registered under the current value in the resource properties hash (<b>Fig. 2.3.6A, Step L2</b><span style='font-weight:normal'>). The file is then opened (</span><b>Fig. 2.3.6A, Step L3</b><spanstyle='font-weight:normal'>), which might entail prior replication, and the contents are parsed. If there are no further entries, </span><spanstyle='font-family:"Courier New"'>loadmap</span> returns (<b>Fig. 2.3.6A, Step L4</b><span style='font-weight:normal'>).</span></p> <p>The new entry tag is then read (<b>Fig. 2.3.6A, Step L5</b><spanstyle='font-weight:normal'>) and the type is determined (</span><b>Fig. 2.3.6A, Step L6</b><span style='font-weight:normal'>). </span></p> <p>If the entry is a resource (<b>Step L7</b><spanstyle='font-weight:normal'>), a resource ID is formed by combining the map counter and the resource ID within the map. For example, the Part I Introduction resource of part1.sequence (</span><b>Fig. 2.3.4B</b><spanstyle='font-weight:normal'>) was assigned the resource ID 2.5, since it has the internal resource ID 5 in the 2<sup>nd</sup> map processed (see </span><b>Fig. 2.3.6B</b><span style='font-weight:normal'> under ids_). If the same URL is found again, additional IDs are assigned to it. It is necessary to store the IDs under the URL in the resource properties hash for reverse lookup if a user simply requests a URL. If the resource is a start or finish resources, the resource ID is registered as the start or finish resource of the map, respectively (</span><b>Fig. 2.3.6B</b><span style='font-weight:normal'>, map_start_, map_finish_). The properties of the resource (URL, Title, Priority, etc) are now stored under the resource ID, see for example </span><b>Fig. 2.3.6B</b><spanstyle='font-weight:normal'> title_2.5.</span></p> <p>If the resource is not a map itself (<b>Fig. 2.3.6A</b><spanstyle='font-weight:normal'>, </span><b>Step L8</b><span style='font-weight:normal'>), the next entry is read. Otherwise, procedure </span><spanstyle='font-family:"Courier New"'>loadmap </span>calls itself recursively to process that map (<b>Step L9</b><span style='font-weight:normal'>).</span></p> <p>If in <b>Step L6</b><span style='font-weight:normal'>, the type of the entry was determined to be a condition, a condition ID is formed (</span><b>Step L10</b><span style='font-weight:normal'>) by again combining the map counter with the internal ID. The condition is also added to the end of the condition array (see </span><b>Fig. 10</b><span style='font-weight:normal'>), which is a compilation of all conditions in the course (</span><b>Step L11</b><spanstyle='font-weight:normal'>). The conditions in this array are evaluated when a transaction occurs that could change the state of the student, and the state of each condition is stored by the index number in the session environment. A reference to the index number in the condition array is stored under the condition ID (</span><b>Fig. 2.3.6D</b><span style='font-weight:normal'>, condid_).</span></p> <p>If the entry is a link (<b>Step L6</b><spanstyle='font-weight:normal'>), a link ID is generated (</span><b>Step L12</b><spanstyle='font-weight:normal'>). This ID is formed by combining the map counter and another counter which is incremented for every new link within the map. Under this ID, the IDs of the originating and the destination resource of the link are stored, as well as that of the link condition (</span><b>Fig. 2.3.6D</b><spanstyle='font-weight:normal'>). For the originating resource, in </span><b>Step L13 </b><span style='font-weight:normal'>the link ID is added to the list of outgoing links (</span><b>Fig. 2.3.6C</b><span style='font-weight:normal'>, to_), and for the destination resource, the link ID is added to the list of incoming links (</span><b>Fig. 2.3.6C</b><span style='font-weight:normal'>, from_).</span></p> <p>After the last entry has been processed, procedure <spanstyle='font-family:"Courier New"'>loadmap</span> returns. After the last map has been processed, the original course-level instance of <spanstyle='font-family:"Courier New"'>loadmap</span> returns to <spanstyle='font-family:"Courier New"'>readmap</span> (<b>Fig. 2.3.5</b><spanstyle='font-weight:normal'>, </span><b>Step R2</b><span style='font-weight:normal'>).</span></p> <p><img border=0 width=432 height=547 id="_x0000_i1034"src="handout_files/image010.jpg"></p> <p><span style='font-size:14.0pt'><b>Fig. 2.3.6A</b></span><spanstyle='font-size:14.0pt'> Flow chart of procedure </span><spanstyle='font-size:14.0pt;font-family:"Courier New"'>loadmap</span></p> <br clear=ALLstyle='page-break-before:always'> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=443 valign=top class="Normal"> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/chapters/applications.sequence: 1.58</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/parts/part1.sequence: 1.9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/parts/part1dir.xml: 2.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/parts/part1intro.html: 2.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/parts/part2.sequence: 1.15</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/parts/summary.page: 2.24</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/refresh/refresher.sequence: 1.20</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/refresh/review.sequence: 1.36</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/tests/final.sequence: 1.29</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/tests/midterm.sequence: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/tests/part11.problem: 2.12</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/tests/part12.problem: 2.19</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/tests/part13.problem: 2.13</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/korte/tests/pretest.problem: 1.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/smith/accelerate.html: 3.15</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/smith/racecar.problem: 3.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/smith/toofast.html: 3.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>ids_/res/msu/smith/tooslow.html: 3.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>map_start_/res/msu/korte/foo.sequence: 1.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>map_start_/res/msu/korte/parts/part1.sequence: 2.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>map_start_/res/msu/korte/parts/summary.page: 3.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>map_finish_/res/msu/korte/foo.sequence: 1.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>map_finish_/res/msu/korte/parts/part1.sequence: 2.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>map_finish_/res/msu/korte/parts/summary.page: 3.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.11: Midterm</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.15: Part 2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.20: Refresher</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.29: Final Exam</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.36: Review</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.5: Pretest</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.58: Applications</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_1.9: Part 1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_2.12: Problem 1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_2.13: Problem 3</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_2.19: Problem 2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_2.24: Summary</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_2.5: Part 1 Introduction</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>title_2.6: Directions</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.6B</b></span><spanstyle='font-size:14.0pt'> Dump of the resource properties hash. Excerpt of the resource properties gathered in procedure </span><span style='font-size:14.0pt;font-family:"Courier New"'>loadmap</span></p> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=443 valign=top class="Normal"> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.1: 1.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.11: 1.3,1.7,1.12</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.15: 1.10</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.20: 1.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.29: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.36: 1.8,1.9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.5: 1.4,1.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_1.9: 1.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_2.1: 2.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_2.12: 2.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_2.13: 2.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_2.19: 2.7</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_2.24: 2.9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_2.5: 2.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_2.6: 2.3,2.4,2.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_3.1: 3.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_3.15: 3.7</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_3.5: 3.2,3.3,3.4,3.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_3.6: 3.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>to_3.8: 3.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.11: 1.2,1.9,1.12</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.15: 1.3</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.2: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.20: 1.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.29: 1.10</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.36: 1.7</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.5: 1.1,1.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_1.9: 1.4,1.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_2.12: 2.3</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_2.13: 2.4</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_2.19: 2.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_2.2: 2.9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_2.24: 2.6,2.7,2.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_2.5: 2.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_2.6: 2.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_3.15: 3.4</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_3.2: 3.5,3.6,3.7,3.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_3.5: 3.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_3.6: 3.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>from_3.8: 3.3</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.6C</b></span><spanstyle='font-size:14.0pt'> Dump of the resource properties hash. Excerpt of information gathered about links between resources in subroutine </span><spanstyle='font-size:14.0pt;font-family:"Courier New"'>loadmap</span><spanstyle='font-size:14.0pt'>.</span></p> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=148 valign=top class="Normal"> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.1: 1.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.10: 1.29</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.11: 1.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.12: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.2: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.3: 1.15</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.4: 1.9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.5: 1.20</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.6: 1.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.7: 1.36</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.8: 1.9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_1.9: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.1: 2.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.2: 2.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.3: 2.12</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.4: 2.13</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.5: 2.19</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.6: 2.24</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.7: 2.24</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.8: 2.24</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_2.9: 2.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.1: 3.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.2: 3.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.3: 3.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.4: 3.15</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.5: 3.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.6: 3.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.7: 3.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>goesto_3.8: 3.2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> </td> <td width=148 valign=top class="Normal"> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.1: 1.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.10: 1.15</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.11: 1.29</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.12: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.2: 1.9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.3: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.4: 1.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.5: 1.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.6: 1.20</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.7: 1.11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.8: 1.36</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_1.9: 1.36</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.1: 2.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.2: 2.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.3: 2.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.4: 2.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.5: 2.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.6: 2.12</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.7: 2.19</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.8: 2.13</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_2.9: 2.24</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.1: 3.1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.2: 3.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.3: 3.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.4: 3.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.5: 3.6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.6: 3.8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.7: 3.15</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>comesfrom_3.8: 3.5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> </td> <td width=148 valign=top class="Normal"> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.1: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.10: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.11: 1.70</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.12: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.2: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.3: 1.30</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.4: 1.19</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.5: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.6: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.7: 1.43</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.8: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_1.9: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.1: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.2: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.3: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.4: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.5: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.6: 2.47</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.7: 2.48</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.8: 2.49</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_2.9: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.1: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.2: 3.41</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.3: 3.42</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.4: 3.43</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.5: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.6: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.7: 0</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>undercond_3.8: 3.40</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_1.19: 8</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_1.30: 9</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_1.43: 10</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_1.70: 11</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_2.47: 5</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_2.48: 6</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_2.49: 7</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_3.40: 1</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_3.41: 2</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_3.42: 3</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'>condid_3.43: 4</span></p> <p style='line-height:90%'><span style='font-size:8.0pt; font-family:"Courier New"'><b></b></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.6D</b></span><spanstyle='font-size:14.0pt'> Dump of the resource properties hash. Excerpt of information gathered about links and link conditions between resources in subroutine </span><span style='font-size:14.0pt;font-family:"Courier New"'>loadmap</span><spanstyle='font-size:14.0pt'>.</span></p> <span style='font-size:14.0pt;font-family:"Times New Roman"'><br clear=ALLstyle='page-break-before:always'> </span> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=443 valign=top class="Normal"> <p><span style='font-size:12.0pt'>0 : true:normal</span></p> <p><span style='font-size:12.0pt'>1 : user.assessments[this./msu/smith/racecar.problem].status=solved:force</span></p> <p><span style='font-size:12.0pt'>2 : user.assessments[this./msu/smith/racecar.problem].answer=friction:stop</span></p> <p><span style='font-size:12.0pt'>3 : user.assessments[this./msu/smith/racecar.problem].answer=sliding:stop</span></p> <p><span style='font-size:12.0pt'>4 : user.assessments[this./msu/smith/racecar.problem].answer=nonconstant:stop</span></p> <p><span style='font-size:12.0pt'>5 : user.assessments[this./msu/korte/tests/part11.problem].status=solved:stop</span></p> <p><span style='font-size:12.0pt'>6 : user.assessments[this./msu/korte/tests/part12.problem].status=solved:stop</span></p> <p><span style='font-size:12.0pt'>7 : user.assessments[this./msu/korte/tests/part13.problem].status=solved:stop</span></p> <p><span style='font-size:12.0pt'>8 : user.assessments[this./msu/korte/tests/pretest.problem].status=solved:stop</span></p> <p><span style='font-size:12.0pt'>9 : user.assessments[this./msu/korte/tests/midterm.sequence].percent>60:stop</span></p> <p><span style='font-size:12.0pt'>10 : user.assessments[this./msu/korte/tests/midterm.sequence].percent<10:force</span></p> <p><span style='font-size:12.0pt'>11 : user.assessments[this./msu/korte/tests/final.sequence].percent>60:stop</span></p> <p><span style='font-size:18.0pt'><b></b></span></p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.7</b></span><spanstyle='font-size:14.0pt'> Excerpt of the dump of the condition array constructed in procedure </span><span style='font-size:14.0pt;font-family:"Courier New"'>loadmap </span><i>(the final syntax of conditions has not yet been determined)</i></p> <h3><a name="_Toc514920455"></a><a name="_Toc421867118">Paths and Path Conditions</a></h3> <p>The next mayor step will be to determine all possible paths and conditions leading up to a resource for access control.</p> <p><span style='font-family:"Courier New"'>readmap</span> checks if the course has a start resource from its map_start entry in the resource properties (Step R2), and if does not, continue to store the two global binary data structures (<b>Steps R5,R6</b><span style='font-weight:normal'>) in this special case, all resources which are part of any maps in the course are assumed to be accessible.</span></p> <p>If the course has a start resource, <span style='font-family:"Courier New"'>readmap</span> calls the procedure <span style='font-family:"Courier New"'>traceroute</span> (<b>Fig. 2.3.8A</b><span style='font-weight:normal'>) with the following parameters (</span><b>Step R4</b><spanstyle='font-weight:normal'>): The cumulative condition along this path or route so far is set to true (the map is accessible); the resource ID of the start resource of the course map; and an empty list for all resources processed so far along this route. It is again important to note that all variables except the global binary structures are local to </span><span style='font-family:"Courier New"'>traceroute</span>, since <span style='font-family:"Courier New"'>traceroute</span> will recursively call itself whenever there is a branching to follow all possible paths of the maps.</p> <p><span style='font-family:"Courier New"'>traceroute</span> will establish a section within the resource properties hash that builds up all conditions leading up to a resource. <b>Fig. 2.3.8B</b><span style='font-weight:normal'> shows an excerpt of the final result. For example, resource 2.5, the introduction to part 1, can be reached under condition 8 (see </span><b>Fig. 2.3.7</b><span style='font-weight:normal'>), meaning, after solving the pretest problem.</span></p> <p><span style='font-family:"Courier New"'>traceroute</span> first checks if the resource has already been processed on this route by its resource ID (<b>Fig. 2.3.8A</b><span style='font-weight:normal'>, </span><b>Step T1</b><span style='font-weight:normal'>) this test avoids that </span><spanstyle='font-family:"Courier New"'>traceroute</span> runs into endless loops when the links on the map loop. Next, the resource ID is added to the list of processed resources on this route (<b>Step T2</b><span style='font-weight:normal'>).</span></p> <p>The resource conditions are now ORd with the cumulative conditions on this route (<b>Step T3</b><span style='font-weight:normal'>) the route represents another way of getting to the resource. A small routine with simplification rules for boolean expressions is called to simplify the potentially very long expression.</span></p> <p>In the next step, it is determined if the resource is itself a map (<b>Step T4</b><span style='font-weight:normal'>). If it is, the exit route conditions can differ from the entry route condition by all additional conditions along the paths in the embedded maps (for non-map resources, entry and exit route conditions are the same). If however the embedded map does not have a start resource (</span><b>Step T5</b><span style='font-weight:normal'>), that is not the case again, the missing of entry point to an embedded link structure is interpreted as the resources being openly accessible.</span></p> <p>If the embedded map does have a start resource, <spanstyle='font-family:"Courier New"'>traceroute</span> is called recursively with the current route conditions, the ID of the start resource of that map, and the list of already processed resource IDs (<b>Step T6</b><span style='font-weight:normal'>). Upon return, if the embedded map does not have a finish resource, the entry and exit conditions of this map are assumed to be the same (</span><b>Step T7</b><span style='font-weight:normal'>). If the map had a finish resource, the route condition so far is set to the resource condition of the finish resource of the embedded map (</span><b>Step T8</b><span style='font-weight:normal'>) in order go on from here, the user would have had to reach the finish resource of the embedded map.</span></p> <p>Now the route conditions are correctly set for exiting the resource and going on from here. <span style='font-family:"Courier New"'>traceroute </span>now loops over all outgoing links of the resource (<b>Step T9</b><spanstyle='font-weight:normal'>). If the link does have a link condition (</span><b>Step T10</b><span style='font-weight:normal'>), then for this path, the cumulative route condition so far AND the link condition (</span><b>Step T11</b><spanstyle='font-weight:normal'>). If there is no link condition, then there is no change in route conditions (</span><b>Step T12</b><span style='font-weight:normal'>).</span></p> <p>To further process the routes along this link, <spanstyle='font-family:"Courier New"'>traceroute</span> is called recursively with the resource ID of the destination resource of the link, the new route conditions, and the list of already processed resources (<b>Step T13</b><spanstyle='font-weight:normal'>). </span><span style='font-family:"Courier New"'>traceroute</span> returns after processing the last outgoing link of the resource it had been called for.</p> <p><b>Fig. 2.3.8B</b><span style='font-weight:normal'> shows part of the output of </span><span style='font-family:"Courier New"'>traceroute</span> for the example <b>Fig. 2.3.4</b><span style='font-weight:normal'>.</span></p> <br clear=ALLstyle='page-break-before:always'> <p><span style='font-size:14.0pt'><img border=0 width=432height=557 id="_x0000_i1035" src="handout_files/image011.jpg"></span></p> <p><span style='font-size:14.0pt'><b>Fig. 2.3.8A</b></span><spanstyle='font-size:14.0pt'> Flow chart of procedure </span><spanstyle='font-size:14.0pt;font-family:"Courier New"'>traceroute</span></p> <br clear=ALLstyle='page-break-before:always'> <table border=1 cellspacing=0 cellpadding=0> <tr> <td width=443 valign=top class="Normal"> <p>conditions_1.1: 0</p> <p>conditions_1.11:</p> <p>(((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)|(8&6&2)|(8&6&3)|(8&6&4)|(8&6&1))</p> <p>conditions_1.15:</p> <p>((((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)|(8&6&2)|(8&6&3)|(8&6&4)|(8&6&1)))&9</p> <p>conditions_1.2:</p> <p>(((((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)|(8&6&2)|(8&6&3)|(8&6&4)|(8&6&1)))&9)&11</p> <p>conditions_1.20: 0</p> <p>conditions_1.29:</p> <p>((((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)|(8&6&2)|(8&6&3)|(8&6&4)|(8&6&1)))&9</p> <p>conditions_1.36:</p> <p>((((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)|(8&6&2)|(8&6&3)|(8&6&4)|(8&6&1)))&10</p> <p>conditions_1.5: 0</p> <p>conditions_1.9: 8</p> <p>conditions_2.1: 8</p> <p>conditions_2.12: 8</p> <p>conditions_2.13: 8</p> <p>conditions_2.19: 8</p> <p>conditions_2.2:</p> <p>(((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)))|((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)|(8&6&2)|(8&6&3)|(8&6&4)|(8&6&1))</p> <p>conditions_2.24: ((8&5)|(8&7)|(8&6))</p> <p>conditions_2.5: 8</p> <p>conditions_2.6: 8</p> <p>conditions_3.1: ((8&5)|(8&7)|(8&6))</p> <p>conditions_3.15: ((8&5&4)|(8&7&4)|(8&6&4))</p> <p>conditions_3.2: ((8&5&2)|(8&5&3)|(8&5&4)|(8&5&1)|(8&7&2)|(8&7&3)|(8&7&4)|(8&7&1)|(8&6&2)|(8&6&3)|(8&6&4)|(8&6&1))</p> <p>conditions_3.5: ((8&5)|(8&7)|(8&6))</p> <p>conditions_3.6: ((8&5&2)|(8&7&2)|(8&6&2))</p> <p>conditions_3.8: ((8&5&3)|(8&7&3)|(8&6&3))</p> </td> </tr> </table> <p><span style='font-size:14.0pt'><b>Fig. 2.3.8B </b></span><spanstyle='font-size:14.0pt'>Dump of resource properties hash. Excerpt of cumulative link conditions to reach a certain resource.</span></p> <h3><a name="_Toc514840865"></a><a name="_Toc514920456"></a><aname="_Toc421867119">Multivalued Boolean Evaluation of Link Priorities</a></h3> <p>When a user accessed a resource on a map and desires to access the next resource, the request is processed by a number of steps. From the data examplified in <b>Fig. 2.3.6C</b><span style='font-weight:normal'>, it is determined which outgoing links exist. From the data in </span><b>Fig. 2.3.6D</b><span style='font-weight:normal'> it is determined to which resources those links lead. For each of the resources, the expressions in </span><b>Fig. 2.3.8A</b><span style='font-weight:normal'> are evaluated as follows. Stored in the session environment is the evaluation of the table </span><b>Fig. 10</b><spanstyle='font-weight:normal'>, where the boolean part is evaluated as 0 or 1. In addition, a multivalued boolean value is computed incorporating the condition priority. A false blocking condition is assigned the value zero, all other false conditions the value 1. A true forced condition is assigned the value 3, all other true conditions the value 2. </span></p> <p>In the expressions <b>Fig. 2.3.8A</b><span style='font-weight:normal'> an & (AND) is processed as the minimum (min) operation, a | (OR) is processed as the maximum (max) operation. The outcome 0 means blocked, the outcome 1 mean not recommended, the outcome 2 recommended, and the outcome 3 forced.</span></p> </div> <p> </p></div><brclear=ALL style='page-break-before:always;'><div class=Section2> </div></body></html>
Index: doc/gutshtml/SessionThre2.html
+++ doc/gutshtml/SessionThre2.html
<html>
<head>
<meta name=Title content="Session Three: lonsql (Gerd)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<title>Session Three: lonsql (Gerd)</title>
<style><!--
.Section1
{page:Section1;}
.Section2
{page:Section2;}
-->
</style>
</head>
<body bgcolor=#FFFFFF class="Normal" lang=EN-US>
<div class=Section1>
<h2>Session Three: lonsql (Gerd)</h2>
<p>This section describes issues associated with LON-CAPA and a SQL database.</p>
<p>The SQL database in LON-CAPA is used for catalog searches against resource
metadata only. The authoritative version of the resource metadata is as
discussed an XML-file on the normal file system (same file name as resource
plus .meta). The SQL-database is a cache of these files, and can be reconstructed
from the XML files at any time.</p>
<p>The current database is implemented assuming a non-adjustable architecture
involving these data fields (specific to each version of a resource). </p>
<p> 1.<span style='font:7.0pt "Times New Roman"'> </span>
title </p>
<p> 2.<span style='font:7.0pt "Times New Roman"'> </span>
author </p>
<p> 3.<span style='font:7.0pt "Times New Roman"'> </span>
subject </p>
<p> 4.<span style='font:7.0pt "Times New Roman"'> </span>
notes </p>
<p> 5.<span style='font:7.0pt "Times New Roman"'> </span>
abstract </p>
<p> 6.<span style='font:7.0pt "Times New Roman"'> </span>
mime </p>
<p> 7.<span style='font:7.0pt "Times New Roman"'> </span>
language </p>
<p> 8.<span style='font:7.0pt "Times New Roman"'> </span>
creationdate </p>
<p> 9.<span style='font:7.0pt "Times New Roman"'> </span>
lastrevisiondate </p>
<p> 10.<span style='font:7.0pt "Times New Roman"'> </span> owner </p>
<p> 11.<span style='font:7.0pt "Times New Roman"'> </span> copyright </p>
<h3><a name="_Toc421867145">Purpose within LON-CAPA</a></h3>
<p>LON-CAPA is meant to distribute A LOT of educational content to A LOT of
people. It is ineffective to directly rely on contents within the ext2 filesystem
to be speedily scanned for on-the-fly searches of content descriptions. (Simply
put, it takes a cumbersome amount of time to open, read, analyze, and close
thousands of files.) </p>
<p>The solution is to hash-index various data fields that are descriptive of
the educational resources on a LON-CAPA server machine. Descriptive data fields
are referred to as "metadata". The question then arises as to how
this metadata is handled in terms of the rest of the LON-CAPA network without
burdening client and daemon processes. I now answer this question in the format
of Problem and Solution below. </p>
<p><b>PROBLEM SITUATION:</b><span style='font-weight:normal'> If Server A wants
data from Server B, Server A uses a lonc process to send a database command
to a Server B lond process.</span></p>
<p> lonc= loncapa client process A-lonc=
a lonc process on Server A</p>
<p> lond= loncapa daemon process</p>
<p><span style='font-family:"Courier New"'>
database command</span></p>
<p><span style='font-family:"Courier New"'> A-lonc --------TCP/IP---------------->
B-lond</span></p>
<p>The problem emerges that A-lonc and B-lond are kept waiting for the MySQL
server to "do its stuff", or in other words, perform the conceivably
sophisticated, data-intensive, time-sucking database transaction. By
tying up a lonc and lond process, this significantly cripples the capabilities
of LON-CAPA servers. </p>
<p>While commercial databases have a variety of features that ATTEMPT to deal
with this, freeware databases are still experimenting and exploring with different
schemes with varying degrees of performance stability.</p>
<p><b>THE SOLUTION:</b><span style='font-weight:normal'> A separate daemon process
was created that B-lond works with to handle database requests. This
daemon process is called "lonsql".</span></p>
<p> So,</p>
<p><span style='font-family:"Courier New"'>
database command</span></p>
<p><span style='font-family:"Courier New"'> A-lonc ---------TCP/IP----------------->
B-lond =====> B-lonsql</span></p>
<p><span style='font-family:"Courier New"'>
<---------------------------------/
|</span></p>
<p><span style='font-family:"Courier New"'>
"ok, I'll get back to you..."
|</span></p>
<p><span style='font-family:"Courier New"'>
|</span></p>
<p><span style='font-family:"Courier New"'>
/</span></p>
<p><span style='font-family:"Courier New"'> A-lond <-------------------------------
B-lonc <======</span></p>
<p><span style='font-family:"Courier New"'>
"Guess what? I have the result!"</span></p>
<p>Of course, depending on success or failure, the messages may vary, but the
principle remains the same where a separate pool of children processes (lonsql's)
handle the MySQL database manipulations.</p>
</div>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div>
</body>
</html>
Index: doc/gutshtml/SessionThree.html
+++ doc/gutshtml/SessionThree.html
<html><head><meta name=Titlecontent=" Session Three: Roles and lonnet/loncommon useful functions (Guy)"><meta http-equiv=Content-Type content="text/html; charset=macintosh"><link rel=Edit-Time-Data href="Session%20Three_files/editdata.mso"><title> Session Three: Roles and lonnet/loncommon useful functions (Guy)</title><style><!--.Section1 {page:Section1;}.Section2 {page:Section2;}--></style></head><body bgcolor=#FFFFFF link=blue vlink=purple class="Normal" lang=EN-US><div class=Section1><span style='font-size:12.0pt;font-family:Arial;'><b><i><br clear=ALL style='page-break-before:always'> </i></b></span> <h2><a name="_Toc421867053">Session Three: Roles and lonnet/loncommon useful functions (Guy)</a></h2> <h3><a name=name></a><a name="_Toc421867054">NAME</a></h3> <p>Apache::lonnet - Subroutines to ask questions about things in the network.</p> <div align=center style='text-align:center'> <hr size=2 width="100%" align=center> </div> <h3><a name=synopsis></a><a name="_Toc421867055">SYNOPSIS</a></h3> <p>Invoked by other LON-CAPA modules, when they need to talk to or about objects in the network.</p> <pre> &Apache::lonnet::SUBROUTINENAME(ARGUMENTS);</pre> <p>Common parameters:</p> <ul type=disc> <li>$uname : an internal username (if $cname expecting a course Id specifically) </li> <li>$udom : a domain (if $cdom expecting a course's domain specifically) </li> <li>$symb : a resource instance identifier </li> <li>$namespace : the name of a .db file that contains the data needed or being set. </li> </ul> <div align=center style='text-align:center'> <hr size=2 width="100%" align=center> </div> <h3><a name=introduction></a><a name="_Toc421867056">INTRODUCTION</a></h3> <p>This module provides subroutines which interact with the lonc/lond (TCP) network layer of LON-CAPA. And Can be used to ask about - classes - users - resources</p> <p>For many of these objects you can also use this to store data about them or modify them in various ways.</p> <p>This is part of the LearningOnline Network with CAPA project described at <ahref="http://www.lon-capa.org./">http://www.lon-capa.org.</a></p> <div align=center style='text-align:center'> <hr size=2 width="100%" align=center> </div> <h3><a name="return_messages"></a><a name="_Toc421867057">RETURN MESSAGES</a></h3> <ul type=disc> <li>con_lost : unable to contact remote host </li> <li>con_delayed : unable to contact remote host, message will be delivered when the connection is brought back up </li> <li>con_failed : unable to contact remote host and unable to save message for later delivery </li> <li>error: : an error a occured, a description of the error follows the : </li> <li>no_such_host : unable to fund a host associated with the user/domain that was requested </li> </ul> <div align=center style='text-align:center'> <hr size=2 width="100%" align=center> </div> <h3><a name="session_environment_functions"></a><a name="_Toc421867058">Session Environment Functions</a></h3> <ul type=disc> <li><code><span style='font-family: Courier'>appenv(%hash)</span></code> : the value of %hash is written to the user envirnoment file, and will be restored for each access this user makes during this session, also modifies the %ENV for the current process </li> <li><code><span style='font-family: Courier'>delenv($regexp)</span></code> : removes all items from the session environment file that matches the regular expression in $regexp. The values are also delted from the current processes %ENV. </li> </ul> <h3><a name="user_information"></a><a name="_Toc421867059">User Information</a></h3> <ul type=disc> <li><code><span style='font-family: Courier'>queryauthenticate($uname,$udom)</span></code> : try to determine user's current authentication scheme </li> <li><code><span style='font-family: Courier'>authenticate($uname,$upass,$udom)</span></code> : try to authenticate user from domain's lib servers (first use the current one), $upass should be the users password </li> <li><code><span style='font-family: Courier'>homeserver($uname,$udom)</span></code> : find the server which has the user's directory and files (there must be only one) . This caches the answer and also caches if there is an error.</li> <li><code><span style='font-family: Courier'>idget($udom,@ids)</span></code> : find the usernames behind a list of IDs (IDs are a unique resource in a domain, there must be only 1 ID per username, and only 1 username per ID in a specific domain) (returns hash: id=>name,id=>name) </li> <li><code><span style='font-family: Courier'>idrget($udom,@unames)</span></code> : find the IDs behind a list of usernames (returns hash: name=>id,name=>id) </li> <li><code><span style='font-family: Courier'>idput($udom,%ids)</span></code> : store away a list of names and associated IDs </li> <li><code><span style='font-family: Courier'>rolesinit($udom,$username,$authhost)</span></code> : get user privileges </li> <li><code><span style='font-family: Courier'>usection($udom,$uname,$cname)</span></code> : finds the section of student in the course $cname, return section name/number or '' for ``not in course'' and '-1' for ``no section'' </li> <li><code><span style='font-family: Courier'>userenvironment($udom,$uname,@what)</span></code> : gets the values of the keys passed in @what from the requested user's environment, returns a hash </li> </ul> <h3><a name="user_roles"></a><a name="_Toc421867060">User Roles</a></h3> <ul type=disc> <li><code><span style='font-family: Courier'>allowed($priv,$uri)</span></code> : check for a user privilege; returns codes for allowed actions F: full access U,I,K: authentication modes (cxx only) '': forbidden 1: user needs to choose course 2: browse allowed </li> <li><code><span style='font-family: Courier'>definerole($rolename,$sysrole,$domrole,$courole)</span></code> : define role; define a custom role rolename set privileges in format of lonTabs/roles.tab for system, domain, and course level </li> <li><code><span style='font-family: Courier'>plaintext($short)</span></code> : return value in %prp hash (rolesplain.tab); plain text explanation of a user role term </li> </ul> <h3><a name="user_modification"></a><a name="_Toc421867061">User Modification</a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>assignrole($udom,$uname,$url,$role,$end,$start)</span></code> : assign role; give a role to a user for the level given by URL. Optional start and end dates (leave empty string or zero for ``no date'') </li> <li><span style='font-family: "Courier New"'>changepass($uname,$udom,$currentpass,$newpass,$server):</span> attempts to change a users, password, possible return values are: <span style='font-family:"Courier New"'>ok, pwchange_failure, non_authorized, auth_mode_error, unknown_user, refused</span></li> <li><code><span style='font-family:Courier'>modifyuserauth($udom,$uname,$umode,$upass)</span></code> : modify user authentication </li> <li><code><span style='font-family:Courier'>modifyuser($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene)</span></code> : modify user </li> <li>modifystudent($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene,$usec, $end,$start) : modify student </li> <li><code><span style='font-family:Courier'>assigncustomrole($udom,$uname,$url,$rdom,$rnam,$rolename,$end,$start)</span></code> : assign custom role; give a custom role to a user for the level given by URL. Specify name and domain of role author, and role name </li> <li><code><span style='font-family:Courier'>revokerole($udom,$uname,$url,$role)</span></code> : revoke a role for url </li> <li><code><span style='font-family:Courier'>revokecustomrole($udom,$uname,$url,$role)</span></code> : revoke a custom role </li> </ul> <h3><a name="course_infomation"></a><a name="_Toc421867062">Course Infomation</a></h3> <ul type=disc> <li><code><span style='font-family: Courier'>coursedescription($courseid)</span></code> : course description </li> <li><span style='font-family: "Courier New"'>courseresdata($coursenum,$coursedomain,@which) :</span> request for current parameter setting for a specific course, @what should be a list of parameters to ask about. This routine caches answers for 5 minutes.</li> </ul> <h3><a name="course_modification"></a><a name="_Toc421867063">Course Modification</a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>writecoursepref($courseid,%prefs)</span></code> : write preferences (environment database) for a course </li> <li><code><span style='font-family:Courier'>createcourse($udom,$description,$url)</span></code> : make/modify course </li> </ul> <h3><a name="resource_subroutines"></a><a name="_Toc421867064">Resource Subroutines</a></h3> <ul type=disc> <li><code><span style='font-family: Courier'>subscribe($fname)</span></code> : subscribe to a resource, returns URL if possible (probably should use repcopy instead) </li> <li><code><span style='font-family: Courier'>repcopy($filename)</span></code> : subscribes to the requested file, and attempts to replicate from the owning library server, Might return HTTP_SERVICE_UNAVAILABLE, HTTP_NOT_FOUND, FORBIDDEN, OK, or HTTP_BAD_REQUEST, also attempts to grab the metadata for the resource. Expects the local filesystem pathname (/home/httpd/html/res/....) </li> </ul> <h3><a name="resource_information"></a><a name="_Toc421867065">Resource Information</a></h3> <ul type=disc> <li>EXT($varname,$symb,$udom, $uname) : evaluates and returns the value of a vairety of different possible values, $varname should be a request string, and the other parameters can be used to specify who and what one is asking about. </li> </ul> <p><span style='font-size:10.0pt'>Possible values for $varname are environment.lastname (or other item from the environment hash), user.name (or someother aspect about the user), resource.0.maxtries (or some other part and parameter of a resource)</span></p> <ul type=disc> <li><code><span style='font-family:Courier'>directcondval($number)</span></code> : get current value of a condition; reads from a state string </li> <li><code><span style='font-family:Courier'>condval($condidx)</span></code> : value of condition index based on state </li> <li><code><span style='font-family:Courier'>metadata($uri,$what,$liburi,$prefix,$depthcount)</span></code> : request a resource's metadata, $what should be either a specific key, or either 'keys' (to get a list of possible keys) or 'packages' to get a list of packages that this resource currently uses, the last 3 arguments are only used internally for recursive metadata. This function automatically caches all requests</li> <li><code><span style='font-family:Courier'>metadata_query($query,$custom,$customshow)</span></code> : make a metadata query against the network of library servers; returns file handle of where SQL and regex results will be stored for query</li> <li><code><span style='font-family:Courier'>symbread($filename)</span></code> : return symbolic list entry (filename argument optional); returns the data handle </li> <li><span style='font-family: "Courier New"'>symbverify($symb,$thisfn):</span> verifies that $symb actually exists and is a possible symb for the URL in $thisfn, returns a 1 on success, 0 on failure, user must be in a course, as it assumes the existance of the course init hash, and uses $ENV('request.course.id'}</li> <li><span style='font-family: "Courier New"'>symbclean($symb):</span> removes versions numbers from a symb, returns the cleaned symb</li> <li><span style='font-family: "Courier New"'>is_on_map($uri) :</span> checks if the $uri is somewhere on the current course map, user must be in a course for it to work</li> <li><code><span style='font-family:Courier'>numval($salt)</span></code> : return random seed value (addend for rndseed) </li> <li><code><span style='font-family:Courier'>rndseed($symb,$courseid,$udom,$username)</span></code> : create a random sum; returns a random seed, all arguments are optional, if they aren't sent it uses the environment to derive them. Note: if symb isn't sent and it can't get one from &symbread it will use the current time as its return value </li> <li><code><span style='font-family:Courier'>ireceipt($funame,$fudom,$fucourseid,$fusymb)</span></code> : return unique, unfakeable, receipt </li> <li><code><span style='font-family:Courier'>receipt()</span></code> : API to ireceipt working off of ENV values; given out to users </li> <li><code><span style='font-family:Courier'>countacc($url)</span></code> : count the number of accesses to a given URL </li> <li><code><span style='font-family:Courier'>checkout($symb,$tuname,$tudom,$tcrsid)</span></code> : creates a record of a user having looked at an item, most likely printed out or otherwise using a resource </li> <li><code><span style='font-family:Courier'>checkin($token)</span></code> : updates that a resource has beeen returned (a hard copy version for instance) and returns the data that $token was Checkout with ($symb, $tuname, $tudom, and $tcrsid) </li> <li><code><span style='font-family:Courier'>expirespread($uname,$udom,$stype,$usymb)</span></code> : set expire date for spreadsheet </li> <li><code><span style='font-family:Courier'>devalidate($symb)</span></code> : devalidate temporary spreadsheet calculations, forcing spreadsheet to reevaluate the resource scores next time. </li> </ul> <h3><a name="storing/retreiving_data"></a><a name="_Toc421867066"><spanstyle='"storing\/retreiving_data"'>Storing/Retrieving Data</span></a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>store($storehash,$symb,$namespace,$udom,$uname)</span></code> : stores hash permanently for this url; hashref needs to be given and should be a \%hashname; the remaining args aren't required and if they aren't passed or are '' they will be derived from the ENV </li> <li><code><span style='font-family:Courier'>cstore($storehash,$symb,$namespace,$udom,$uname)</span></code> : same as store but uses critical subroutine </li> <li><code><span style='font-family:Courier'>restore($symb,$namespace,$udom,$uname)</span></code> : returns hash for this symb; all args are optional </li> <li><code><span style='font-family:Courier'>tmpstore($storehash,$symb,$namespace,$udom,$uname)</span></code> : storage that works very similar to store/cstore, but all data is stored in a temporary location and can be reset using tmpreset, $storehash should be a hash reference, returns nothing on success </li> <li><code><span style='font-family:Courier'>tmprestore($symb,$namespace,$udom,$uname)</span></code> : storage that works very similar to restore, but all data is stored in a temporary location and can be reset using tmpreset. Returns a hash of values on success, error string otherwise. </li> <li><code><span style='font-family:Courier'>tmpreset($symb,$namespace,$udom,$uname)</span></code> : temporary storage reset, deltes all keys for $symb form the temporary storage hash. </li> <li><code><span style='font-family:Courier'>get($namespace,$storearr,$udom,$uname)</span></code> : returns hash with keys from array reference filled in from namesp ($udomain and $uname are optional) </li> <li><code><span style='font-family:Courier'>del($namespace,$storearr,$udom,$uname)</span></code> : deletes keys out of array from namesp ($udomain and $uname are optional) </li> <li><code><span style='font-family:Courier'>dump($namespace,$udom,$uname,$regexp)</span></code> : dumps the complete (or key matching regexp) namespace into a hash ($udomain, $uname and $regexp are optional) </li> <li><code><span style='font-family:Courier'>put($namespace,$storehash,$udomain,$uname)</span></code> : stores hash in namesp ($udomain and $uname are optional) </li> <li><code><span style='font-family:Courier'>cput($namespace,$storehash,$udomain,$uname)</span></code> : critical put ($udomain and $uname are optional) </li> <li><code><span style='font-family:Courier'>eget($namespace,$storearr,$udomain,$uname)</span></code> : returns hash with keys from array reference filled in from namesp (encrypts the return communication) ($udomain and $uname are optional) </li> <li><code><span style='font-family:Courier'>log($udom,$name,$home,$message)</span></code> : write to permanent log for user; use critical subroutine </li> </ul> <h3><a name="network_status_functions"></a><a name="_Toc421867067">Network Status Functions</a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>dirlist($uri)</span></code> : return directory list based on URI </li> <li><code><span style='font-family:Courier'>spareserver()</span></code> : find server with least workload from spare.tab </li> </ul> <h3><a name="apache_request"></a><a name="_Toc421867068">Apache Request</a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>ssi($url,%hash)</span></code> : server side include, does a complete request cycle on url to localhost, posts hash </li> </ul> <h3><a name="data_to_string_to_data"></a><a name="_Toc421867069">Data to String to Data</a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>hash2str(%hash)</span></code> : convert a hash into a string complete with escaping and '=' and '&' separators, supports elements that are arrayrefs and hashrefs </li> <li><code><span style='font-family:Courier'>hashref2str($hashref)</span></code> : convert a hashref into a string complete with escaping and '=' and '&' separators, supports elements that are arrayrefs and hashrefs </li> <li><code><span style='font-family:Courier'>arrayref2str($arrayref)</span></code> : convert an arrayref into a string complete with escaping and '&' separators, supports elements that are arrayrefs and hashrefs </li> <li><code><span style='font-family:Courier'>str2hash($string)</span></code> : convert string to hash using unescaping and splitting on '=' and '&', supports elements that are arrayrefs and hashrefs </li> <li><code><span style='font-family:Courier'>str2array($string)</span></code> : convert string to hash using unescaping and splitting on '&', supports elements that are arrayrefs and hashrefs </li> </ul> <h3><a name="logging_routines"></a><a name="_Toc421867070">Logging Routines</a></h3> <p>These routines allow one to make log messages in the lonnet.log and lonnet.perm logfiles.</p> <ul type=disc> <li><code><span style='font-family:Courier'>logtouch()</span></code> : make sure the logfile, lonnet.log, exists </li> <li><code><span style='font-family:Courier'>logthis()</span></code> : append message to the normal lonnet.log file, it gets preiodically rolled over and deleted. </li> <li><code><span style='font-family:Courier'>logperm()</span></code> : append a permanent message to lonnet.perm.log, this log file never gets deleted by any automated portion of the system, only messages of critical importance should go in here. </li> </ul> <h3><a name="general_helper_routines"></a><a name="_Toc421867071">General File Helper Routines</a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>getfile($file)</span></code> : serves up a file, returns the contents of a file or -1; replicates and subscribes to the file </li> <li><code><span style='font-family:Courier'>filelocation($dir,$file)</span></code> : returns file system location of a file based on URI; meant to be ``fairly clean'' absolute reference, $dir is a directory that relative $file lookups are to looked in ($dir of /a/dir and a file of ../bob will become /a/bob) </li> <li><code><span style='font-family:Courier'>hreflocation($dir,$file)</span></code> : returns file system location or a URL; same as filelocation except for hrefs </li> <li><code><span style='font-family:Courier'>declutter()</span></code> : declutters URLs (remove docroot, beginning slashes, 'res' etc) </li> </ul> <h3><a name="_Toc421867072">HTTP Helper Routines</a></h3> <ul type=disc> <li><code><span style='font-family:Courier'>escape()</span></code> : unpack non-word characters into CGI-compatible hex codes </li> <li><code><span style='font-family:Courier'>unescape()</span></code> : pack CGI-compatible hex codes into actual non-word ASCII character </li> </ul></div><h1> </h1><h3><a name="underlying_communication_routines_(shoul"></a><aname="_Toc421867073">Private: Underlying communication routines (Shouldn't call)</a></h3><ul type=disc> <li><code><span style='font-family: Courier'>subreply()</span></code> : tries to pass a message to lonc, returns con_lost if incapable </li> <li><code><span style='font-family: Courier'>reply()</span></code> : uses subreply to send a message to remote machine, logs all failures </li> <li><code><span style='font-family: Courier'>critical()</span></code> : passes a critical message to another server; if cannot get through then place message in connection buffer directory and returns con_delayed, if incapable of saving message, returns con_failed </li> <li><code><span style='font-family: Courier'>reconlonc()</span></code> : tries to reconnect lonc client processes. </li></ul><h3><a name="resource_access_logging"></a><a name="_Toc421867074">Private: Resource Access Logging</a></h3><ul type=disc> <li><code><span style='font-family: Courier'>flushcourselogs()</span></code> : flush (save) buffer logs and access logs </li> <li><code><span style='font-family: Courier'>courselog($what)</span></code> : save message for course in hash </li> <li><code><span style='font-family: Courier'>courseacclog($what)</span></code> : save message for course using &courselog(). Perform special processing for specific resource types (problems, exams, quizzes, etc). </li> <li><code><span style='font-family: Courier'>goodbye()</span></code> : flush course logs and log shutting down; it is called in srm.conf as a PerlChildExitHandler </li></ul><h3><a name=other></a><a name="_Toc421867075">Private: Other</a></h3><p><code><span style='font-family:"Courier New"'>symblist($mapname,%newhash)</span></code><spanstyle='font-family:"Courier New"'> :</span> update symbolic storage links </p><h3><a name="_Toc421867076">Coding Guidelines</a></h3><p class=H5><span style='layout-grid-mode:both'>Things to keep in mind while coding handlers for LON-CAPA </span></p><p><spanstyle='font-size:14.0pt'>1.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DON'T write to Access machine disks with permanent data, use store/restore </span></p><p><spanstyle='font-size:14.0pt'>2.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DON'T </span><spanstyle='font-size:14.0pt;font-family:"Courier New"'>use print()</span><spanstyle='font-size:14.0pt'>, use </span><span style='font-size:14.0pt;font-family:"Courier New"'>$request->print()</span><span style='font-size:14.0pt'> </span></p><p><spanstyle='font-size:14.0pt'>3.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DON'T launch children </span></p><p><spanstyle='font-size:14.0pt'>4.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DO use </span><spanstyle='font-size:14.0pt;font-family:"Courier New"'>$Apache::lonnet::perlvar{'lonDaemons'}/tmp</span><spanstyle='font-size:14.0pt'> for temporary data. </span></p><p><spanstyle='font-size:14.0pt'>5.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DO query the return value of every file operation. </span></p><p><spanstyle='font-size:14.0pt'>6.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DO </span><span style='font-size:14.0pt;font-family:"Courier New"'>use strict;</span><span style='font-size:14.0pt'> </span></p><p><spanstyle='font-size:14.0pt'>7.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DO </span><span style='font-size:14.0pt;font-family:"Courier New"'>use strict;</span><span style='font-size:14.0pt'> </span></p><p><spanstyle='font-size:14.0pt'>8.<span style='font:7.0pt "Times New Roman"'> </span></span><span style='font-size:14.0pt'>DO familiarize your self with the functions in </span><span style='font-size:14.0pt;font-family:"Courier New"'>lonnet.pm</span><spanstyle='font-size:14.0pt'> and use them to communicate with other servers and when you handler needs to ask questions. </span></p><p>9.<spanstyle='font:7.0pt "Times New Roman"'> </span><spanstyle='font-size:14.0pt'>DON'T use </span><span style='font-size:14.0pt;font-family:"Courier New"'>&Apache::lonnet::reply()</span><spanstyle='font-size:14.0pt'> </span></p><brclear=ALL style='page-break-before:always;'><div class=Section2> </div></body></html>
Index: doc/gutshtml/SessionTw1.html
+++ doc/gutshtml/SessionTw1.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=278src="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=290src="Session%20Tw1_files/image005.jpg" v:shapes="_x0000_i1026"> </p> <p><span style='font-size:14.0pt'><b>Fig. 2.2.2</b></span><spanstyle='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><spanstyle='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=240src="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=143src="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=215src="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><spanstyle='font-size:8.0pt;font-family:"Courier New"'>&SUM(d*)</span><spanstyle='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.<spanstyle='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><spanstyle='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=63src="Session%20Tw1_files/image013.jpg" v:shapes="_x0000_i1030"> </span></p> <p><span style='color:black'><b>Fig 2.2.8</b></span><spanstyle='color:black'> - A Simple Resource</span></p> <p><span style='color:black'> <img width=301 height=240src="Session%20Tw1_files/image015.jpg" v:shapes="_x0000_i1031"> </span></p> <p><span style='color:black'><b>Fig. 2.2.9</b></span><spanstyle='color:black'> Composing Discussion Feedback </span></p> <p><span style='color:black'> <img width=292 height=170src="Session%20Tw1_files/image017.jpg" v:shapes="_x0000_i1032"> </span></p> <p><span style='color:black'><b>Fig 2.2.10</b></span><spanstyle='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><brclear=ALL style='page-break-before:always;'><div class=Section2> </div></body></html>
Index: doc/gutshtml/SessionTw2.html
+++ doc/gutshtml/SessionTw2.html
<html>
<head>
<meta name=Title content="Session Two: Statistics/Chart (Behrouz)">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<link rel=Edit-Time-Data href="Session%20Tw2_files/editdata.mso">
<link rel=OLE-Object-Data href="Session%20Tw2_files/oledata.mso">
<title>Session Two: Statistics/Chart (Behrouz)</title>
<style><!--
.MsoFootnoteText
{font-size:10.0pt;
font-family:"Times New Roman";}
.MsoHeader
{tab-stops:center 3.0in right 6.0in;
font-size:10.0pt;
font-family:"Times New Roman";}
.MsoFootnoteReference
{vertical-align:super;}
.MsoBodyText
{line-height:24.0pt;
font-size:12.0pt;
font-family:"Times New Roman";
layout-grid-mode:line;}
.MsoBodyTextIndent
{text-indent:-.5in;
font-size:10.0pt;
font-family:"Times New Roman";}
.MsoBodyText2
{font-size:10.0pt;
font-family:"Times New Roman";
color:black;}
.MsoBodyTextIndent2
{text-align:justify;
line-height:150%;
font-size:11.0pt;
font-family:"Times New Roman";}
.MsoHyperlink
{color:blue;
text-decoration:underline;
text-underline:single;}
.H5
{font-size:10.0pt;
font-family:"Times New Roman";
layout-grid-mode:line;
font-weight:bold;}
.FirstParagraph
{text-align:justify;
font-size:10.0pt;
font-family:"Times New Roman";}
.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: Statistics/Chart (Behrouz)</h2>
<p><span style='layout-grid-mode:line'>In LON-CAPA, we are involved with two kinds
of large data sets: </span></p>
<p> <span style='layout-grid-mode:line'>1)<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='layout-grid-mode:line'>Educational resources such as </span>web pages,
demonstrations, simulations, and individualized problems designed for use on
homework assignments, quizzes, and examinations<span style='layout-grid-mode:
line'>; </span></p>
<p> <span style='layout-grid-mode:line'>2)<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='layout-grid-mode:line'>Information about users who create, modify, assess,
or use these resources. </span></p>
<p><span style='layout-grid-mode:line'>Usually, instructors/ course coordinators
wish to assess the students educational situation or evaluate the problems
have bee presented in the course, after the students used the educational materials.
There are two main modules in LON_CAPA that provide the statistical information
for instructors/ course-coordinators: <i>lonchart.pm </i></span><span style='layout-grid-mode:line'>and
<i>lonstatistics.pm</i></span><span
style='layout-grid-mode:line'>. When an instructors access is authorized, he/she
can find useful reports about the course, regarding maps, problems included
in each map, and the students who tried to solve the problems. When an instructor
selects a course, he/she has two buttons in remote control to obtain the statistical
information: <i>chart</i></span><span style='layout-grid-mode:
line'> or <i>stat</i></span><span style='layout-grid-mode:line'> button.</span></p>
<h3 style='line-height:150%'><a name="_Toc421867139"><span style='layout-grid-mode:
line'>lonchart.pm</span></a></h3>
<p><span style='font-size:11.0pt;layout-grid-mode:line'><i>chart</i></span><span
style='font-size:11.0pt;layout-grid-mode:line'> button in remote control calls
lonchart.pm, which provides a quick review of students tries on different problems
of a course for an instructor. The instructor may monitor the number of
tries of every student in each map and its problems.<span style='color:red'>
</span>The number of solved problems in a map is shown in the end of each map
with a different color (green). The overall solved problems and total number
of problems in the map can be seen at the end of line according to every individual
student in a different color (blue). A sample of chart is shown in <b>Fig. 3.2.1</b></span></p>
<p><span style='font-size:9.0pt;border:solid windowtext .5pt;
padding:0in'>xxxxxxx1:msu ! 001 ! 1*11*121 <span style='color:green'>8</span>
1231.31423212 <span style='color:green'>12 </span> 2111211284.131 <span style='color:green'>13</span>
231113112221 <span style='color:green'>12</span> <span style='color:navy'>162
/ 188<br>
</span>xxxxxxx2:msu ! 003 ! 12113162 <span style='color:green'>8</span> 1+11
1 21x111<span style='color:green'>10</span> 11211322246132 <span
style='color:green'>14</span> ############<span style='color:green'> 0
</span><span
style='color:navy'>149 / 188</span><span style='color:green'> <br>
<br>
</span></span></p>
<div style='border:solid windowtext .5pt;padding:1.0pt 0in 1.0pt 1.0pt'>
<p style='border:none;padding:0in;'>1..9: correct by student in 1..9 tries </p>
<p style='border:none;padding:0in;'>*: correct by student in more than 9 tries
</p>
<p style='border:none;padding:0in;'>+: correct by override </p>
<p style='border:none;padding:0in;'>-: incorrect by override </p>
<p style='border:none;padding:0in;'>.: incorrect attempted </p>
<p style='border:none;padding:0in;'>#: ungraded attempted </p>
<p style='border:none;padding:0in;'> : not attempted </p>
<p style='border:none;padding:0in;'>x: excused</p>
</div>
<p><span style='font-size:14.0pt'><b>Fig. 3.2.1</b></span><span
style='font-size:14.0pt'> Chart of map, problems, and students tries, and a quick
statistics of solved problems</span></p>
<p><span style='layout-grid-mode:line'>1. When an instructor loads the chart in
his/her machine once, its data is cached in his/her local machine. If he/she
runs the chart again, the course chart is loaded very quickly from the cache.</span></p>
<p><span style='layout-grid-mode:line'>2. An instructor can sort the chart according
to user name, last name, as well as, the section which student belongs to.</span></p>
<div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'>
<p align=center style='text-align:center;
border:none;padding:0in;'><span style='font-size:8.0pt;font-family:Arial;
display:none'>Top of Form</span></p>
</div>
<div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 0in 4.0pt'>
<p align=center style='
text-align:center;
border:none;padding:
0in;'><b>Sort by: </b><span
style='font-weight:normal'> <img width=53 height=23
src="Session%20Tw2_files/image003.png" v:shapes="_x0000_i1025">
<img width=51 height=23
src="Session%20Tw2_files/image006.png" v:shapes="_x0000_i1026">
<img width=40 height=23
src="Session%20Tw2_files/image009.png" v:shapes="_x0000_i1027"> <br>
<br>
</span></p>
</div>
<p>3. The instructor is able to select the expired students (who dropped the
course earlier) or active students or any (all the) students.</p>
<div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 0in'>
<p align=center style='
text-align:center;
border:none;padding:0in;
'><br>
<b>Student Status: </b><span style='font-weight:normal'> <img width=66 height=18
src="Session%20Tw2_files/image012.png" v:shapes="_x0000_i1028">
<img width=77 height=23
src="Session%20Tw2_files/image015.png" v:shapes="_x0000_i1029"> </span></p>
</div>
<div style='border:none;border-top:solid windowtext .75pt;padding:1.0pt 0in 0in 0in'>
<p align=center style='text-align:center;border:none;
padding:0in;'><span
style='font-size:8.0pt;font-family:Arial;display:none'>Bottom of Form</span></p>
</div>
<h3 style='line-height:200%'><a name="_Toc421867140"><span style='layout-grid-mode:
line'>lonstatistics.pm</span></a></h3>
<p><span style='layout-grid-mode:line'>In stat button of remote control, a
menu with three options is provided for instructor: </span></p>
<p> <span style='layout-grid-mode:line'>1)<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='layout-grid-mode:line'>Problem stats</span></p>
<p> <span style='layout-grid-mode:line'>2)<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='layout-grid-mode:line'>Problem Analysis</span></p>
<p> <span style='font-size:11.0pt;
layout-grid-mode:line'>3)<span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='layout-grid-mode:line'>Student Assessment</span></p>
<h4 style='line-height:150%'><span style='font-size:6.0pt;font-family:Arial;
layout-grid-mode:line;font-weight:normal'> </span></h4>
<h4><span style='font-size:12.0pt;font-family:Arial;layout-grid-mode:line'>
</span></h4>
<h4><span style='font-size:12.0pt;font-family:Arial;layout-grid-mode:line;
font-weight:normal'>Problem Stats</span></h4>
<p><span style='layout-grid-mode:line'><i>Problem Stats</i></span><span
style='layout-grid-mode:line'> button provides a table<a href="#_ftn1" name="_ftnref1" title=""><span class=MsoFootnoteReference>
[1] </span></a> which includes statistical information about every problem,
as you see in <b>Fig. 3.2.2</b></span><span style='layout-grid-mode:line'>.
The function ExtractStudentData in lonstatitics Perl Module fetches all the
data from a particular student<a name="_Hlt9981185"></a> .db file into a big
hash in local machine. It uses dump function, which communicates via lonc/lond
to get the student data from student repository (data server) and then all versions
of student submissions computed according to every problem. The results are
stored in an array in the memory. Before computing the students tries
in a particular problem, the different parts of problem are distinguished by
considering the meta-data, which is provided for every problem. </span></p>
<p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/mmp\/kap1\/calckap1\.sequence\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Homework Set 1</span></span></span>
</p>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=21 class="Normal"> <p align=center style='text-align:center'><b>P#</b></p></td>
<td width=72 class="Normal"> <p align=center style='text-align:center'><b>
<img width=94 height=23
src="Session%20Tw2_files/image018.png" v:shapes="_x0000_i1030"> </b></p></td>
<td width=37 class="Normal"> <p align=center style='text-align:center'><b>
<img width=41 height=23
src="Session%20Tw2_files/image021.png" v:shapes="_x0000_i1031"> </b></p></td>
<td width=29 class="Normal"> <p align=center style='text-align:center'><b>
<img width=31 height=23
src="Session%20Tw2_files/image024.png" v:shapes="_x0000_i1032"> </b></p></td>
<td width=26 class="Normal"> <p align=center style='text-align:center'><b>
<img width=28 height=23
src="Session%20Tw2_files/image027.png" v:shapes="_x0000_i1033"> </b></p></td>
<td width=30 class="Normal"> <p align=center style='text-align:center'><b>
<img width=32 height=23
src="Session%20Tw2_files/image030.png" v:shapes="_x0000_i1034"> </b></p></td>
<td width=31 class="Normal"> <p align=center style='text-align:center'><b>
<img width=33 height=23
src="Session%20Tw2_files/image033.png" v:shapes="_x0000_i1035"> </b></p></td>
<td width=29 class="Normal"> <p align=center style='text-align:center'><b>
<img width=31 height=23
src="Session%20Tw2_files/image036.png" v:shapes="_x0000_i1036"> </b></p></td>
<td width=36 class="Normal"> <p align=center style='text-align:center'><b>
<img width=40 height=23
src="Session%20Tw2_files/image039.png" v:shapes="_x0000_i1037"> </b></p></td>
<td width=32 class="Normal"> <p align=center style='text-align:center'><b>
<img width=35 height=23
src="Session%20Tw2_files/image042.png" v:shapes="_x0000_i1038"> </b></p></td>
<td width=26 class="Normal"> <p align=center style='text-align:center'><b>
<img width=28 height=23
src="Session%20Tw2_files/image045.png" v:shapes="_x0000_i1039"> </b></p></td>
<td width=33 class="Normal"> <p align=center style='text-align:center'><b>
<img width=36 height=23
src="Session%20Tw2_files/image048.png" v:shapes="_x0000_i1040"> </b></p></td>
<td width=35 class="Normal"> <p align=center style='text-align:center'><b>
<img width=38 height=23
src="Session%20Tw2_files/image051.png" v:shapes="_x0000_i1041"> </b></p></td>
<td width=37 class="Normal"> <p align=center style='text-align:center'><b>
<img width=41 height=23
src="Session%20Tw2_files/image054.png" v:shapes="_x0000_i1042"> </b></p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>1</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/01_Math_1\/msu-prob11\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Calculator Skills</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>267</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>3</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>1.04</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>0.0</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.04</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>0.2</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>5.7</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.03</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.00</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>2</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/01_Math_1\/msu-prob10\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Numbers</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>414</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>17</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>1.62</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>255</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>0.4</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.38</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>1.6</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>5.7</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.11</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.02</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>3</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/03_Units_Scaling\/msu-prob22\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Speed</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>698</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>13</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>2.73</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>255</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>0.4</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.63</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>2.2</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>1.9</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.06</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.02</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>4</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/01_Math_1\/msu-prob13\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Perimeter</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>388</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>7</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>1.52</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>255</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>0.4</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.34</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>0.9</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>2.4</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>-0.00</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.02</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>5</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/devolibrary\/type-math\/fraction-rlt-235\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Reduce a Fraction</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>315</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>4</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>1.23</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>0.0</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.19</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>0.5</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>2.3</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.01</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.00</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>6</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/devolibrary\/type-math\/fract-add-sub-div-p11\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Calculating with Fractions</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>393</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>7</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>1.54</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>255</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>0.4</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.35</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>0.9</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>2.0</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.15</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.02</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>7</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/01_Math_1\/msu-prob04\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Area of a Balloon</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>254</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>601</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>12</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>2.37</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>247</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>2.8</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.59</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>1.8</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>1.8</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>-0.05</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>-0.02</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>8</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/01_Math_1\/msu-prob07\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Volume of a Balloon</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>252</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>565</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>11</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>2.24</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>243</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>3.6</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.57</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>1.9</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>2.0</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>-0.06</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>-0.03</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>9</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/01_Math_1\/msu-prob12\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Numerical Value of Fraction</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>268</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>4</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>1.05</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>0.0</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.04</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>0.2</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>3.4</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.01</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.00</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>10</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/03_Units_Scaling\/msu-prob17\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Units</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>256</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>1116</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>20</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>4.36</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>246</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>3.9</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.78</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>4.2</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>1.9</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.18</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.03</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>11</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/06_Vectors_Scalars\/msu-prob07\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Vector versus Scalar</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>254</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>749</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>11</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>2.95</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>251</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>1.2</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.66</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>2.2</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>1.1</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>-0.05</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>-0.05</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>12</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/06_Vectors_Scalars\/msu-prob10\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Adding Vectors</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>253</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>1026</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>20</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>4.06</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>250</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>0</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>1.2</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.76</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>3.6</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>1.8</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.14</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>0.00</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p>13</p></td>
<td width=72 class="Normal"> <p><span style='font-size:9.0pt'><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/02_Math_2_Trig\/msu-prob13\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Proximity</span></span></span></span></p></td>
<td width=37 bgcolor="white" class="Normal"> <p>249</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>663</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>19</p></td>
<td width=30 bgcolor="white" class="Normal"> <p>2.66</p></td>
<td width=31 bgcolor="white" class="Normal"> <p>239</p></td>
<td width=29 bgcolor="white" class="Normal"> <p>1</p></td>
<td width=36 bgcolor="white" class="Normal"> <p>3.6</p></td>
<td width=32 bgcolor="white" class="Normal"> <p>0.64</p></td>
<td width=26 bgcolor="white" class="Normal"> <p>2.3</p></td>
<td width=33 bgcolor="white" class="Normal"> <p>2.8</p></td>
<td width=35 bgcolor="white" class="Normal"> <p>0.11</p></td>
<td width=37 bgcolor="white" class="Normal"> <p>-0.10</p></td>
</tr>
</table>
<p><span style='font-size:14.0pt'><b>Fig. 3.2.2</b></span><span
style='font-size:14.0pt'>: Statistics table includes general statistics of every
problem of the course</span></p>
<p><span style='font-size:11.0pt;layout-grid-mode:line'>Every part of <i>multi-part</i></span><span style='font-size:11.0pt;layout-grid-mode:
line'> problems is distinguished as a separate problem. The <i>multi-instance</i></span><span
style='font-size:11.0pt;layout-grid-mode:line'> problem is also considered separately,
because a particular problem or one part of it might be used in different maps.
Finally, the array, which includes all computed information from all students,
sorted according to the problem order, underlying in homework sets order. Therefore,
in this step we can compute the following statistical information:</span></p>
<p> <span style='font-size:11.0pt;
layout-grid-mode:line'>1.<span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='font-size:11.0pt;layout-grid-mode:line'><b>#Stdnts</b></span><span
style='font-size:11.0pt;layout-grid-mode:line'>: Total
number of students who take a look at the problem.(Let #Stdnts is equal to <i>n</i></span><span style='font-size:
11.0pt;layout-grid-mode:line'>)</span></p>
<p> <span style='font-size:11.0pt;
layout-grid-mode:line'>2.<span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='font-size:11.0pt;layout-grid-mode:line'><b>Tries:</b></span><span
style='font-size:11.0pt;layout-grid-mode:line'>
Total number of tries to solve the problem (</span><span style='font-size:11.0pt'>
<img width=28 height=34
src="Session%20Tw2_files/image057.png" v:shapes="_x0000_i1043"> where <i><sub>
<img width=12 height=18
src="Session%20Tw2_files/image060.png" v:shapes="_x0000_i1044"> </sub></i></span><span style='font-size:11.0pt'>denote
a student try<span style='layout-grid-mode:line'>).</span></span></p>
<p> <span style='font-size:11.0pt;
layout-grid-mode:line'>3.<span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='font-size:11.0pt;layout-grid-mode:line'><b>Mod:
</b></span><span style='font-size:11.0pt;layout-grid-mode:line'>
Mode, </span><span style='font-size:11.0pt'>Maximum Number of Tries for solving
the problem.</span></p>
<p> <span style='font-size:11.0pt;
layout-grid-mode:line'>4.<span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='font-size:11.0pt'><b>Mean:</b></span><span
style='font-size:11.0pt'> Average Number
of the Tries. </span></p>
<p><span style='font-size:11.0pt'> <img width=11 height=13
src="Session%20Tw2_files/image063.png" v:shapes="_x0000_i1045"> = <img width=38 height=34
src="Session%20Tw2_files/image066.png" v:shapes="_x0000_i1046"> </span></p>
<p> 5.<span style='font:7.0pt "Times New Roman"'> </span>
<span style='font-size:11.0pt;layout-grid-mode:line'><b>#YES:</b></span><span
style='font-size:11.0pt'> Number of students
solved the problem correctly.</span></p>
<p> <span style='font-size:11.0pt'>6.<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='font-size:11.0pt'><b>#yes:</b></span><span style='font-size:11.0pt'>
Number of students solved the problem by override. </span></p>
<p><span style='font-size:11.0pt'>Sometimes, a student gets a correct answer after
talking with the instructor. This type of correct answer is called corrected
by override.</span></p>
<p> <span style='font-size:11.0pt'>7.<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='font-size:11.0pt'><b>%Wrng:</b></span><span style='font-size:11.0pt'>
Percentage of students tried to solve the problem but still incorrect. </span></p>
<p><span style='font-size:11.0pt'> <img width=137 height=31
src="Session%20Tw2_files/image069.png" v:shapes="_x0000_i1047"> </span></p>
<p> <span style='font-size:11.0pt'>8.<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='font-size:11.0pt'><b>S.D.:</b></span><span style='font-size:11.0pt'>
<i>Standard Deviation</i></span><span style='font-size:11.0pt'> of the students
tries. </span></p>
<p><span style='font-size:11.0pt'> <img width=98 height=40
src="Session%20Tw2_files/image072.png" v:shapes="_x0000_i1048"> </span></p>
<p> <span style='font-size:11.0pt'>9.<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='font-size:11.0pt'><b>Skew.:</b></span><span style='font-size:11.0pt'>
<i>Skewness</i></span><span
style='font-size:11.0pt'> of the students tries. </span></p>
<p><span style='font-size:11.0pt'> <img width=194 height=76
src="Session%20Tw2_files/image075.png" v:shapes="_x0000_i1049"> </span></p>
<p> <span style='font-size:11.0pt'>10.<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='font-size:11.0pt'><b>DoDiff:</b></span><span style='font-size:11.0pt'>
<i>Degree of Difficulty</i></span><span
style='font-size:11.0pt'> of the problem. </span></p>
<p><span style='font-size:11.0pt'> <img width=100 height=38
src="Session%20Tw2_files/image078.png" v:shapes="_x0000_i1050"> </span></p>
<p><span style='font-size:11.0pt'>As you see Degree of Difficulty is always between
0 and 1. This is a good factor for an instructor to determine whether a problem
is difficult, and what is the degree of this difficulty. Thus, DoDiff of each
problem is saved in its meta data.</span></p>
<p> <span style='font-size:11.0pt'>11.<span
style='font:7.0pt "Times New Roman"'> </span></span> <span
style='font-size:11.0pt'><b>Dis.F.:</b></span><span style='font-size:11.0pt'>
<i>Discrimination Factor</i></span><a href="#_ftn2" name="_ftnref2"
title=""><span class=MsoFootnoteReference><span style='font-size:11.0pt'> [2]
</span></span></a><span
style='font-size:11.0pt'> is an standard for evaluating how much a problem discriminates
between the upper and the lower students. First, all of the students are
sorted according to a criterion. Then, %27 of upper students and %27 lower students
are selected from the sorted students applying the mentioned criterion. Finally
we obtain the Discrimination Factor from the following difference:</span></p>
<p><span style='font-size:11.0pt'><i>Applied a criterion in %27 upper students
- Applied the same Criterion in %27 lower students.</i></span></p>
<p class=MsoBodyTextIndent2 align=left style='text-align:left;line-height:normal'>Discrimination
Factor is a number in interval [-1,1]. If this number is close to 1, it shows
that only upper students have solved this problem. If it is close to 0 it shows
that the upper students and the lowers are approximately the same in solving
the problem. If this number is negative, it shows that the lower students have
more successes in solving the problem, and thus this problem is very poor in
discriminating the upper and lower students.</p>
<p><span style='font-size:11.0pt'>In lonstatistics.pm we compute the Discrimination
Factor from two criteria:</span></p>
<p><span style='font-size:11.0pt'><i>1st Criterion </i></span><span style='font-size:11.0pt'>for
Sorting the Students: <img width=138 height=41
src="Session%20Tw2_files/image081.png" v:shapes="_x0000_i1051"> </span></p>
<p><span style='font-size:11.0pt'><i>2nd Criterion</i></span><span style='font-size:11.0pt'>
for Sorting the Students: <img width=87 height=41
src="Session%20Tw2_files/image084.png" v:shapes="_x0000_i1052"> </span></p>
<p> <span style='font-size:11.0pt;
font-family:Symbol;layout-grid-mode:line'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='font-size:11.0pt;layout-grid-mode:line'><b>Change
the stats table sorting </b></span></p>
<p><span style='font-size:11.0pt;layout-grid-mode:line'>As you see in Fig. 3.2.
2, all headers in the stats table are buttons that change the order of the table.
Users can change increasingly or decreasingly every column of the table. First
the user select the <i>ascending</i></span><span
style='font-size:11.0pt;layout-grid-mode:line'> or <i>descending</i></span><span
style='font-size:11.0pt;layout-grid-mode:line'> option, then he/she can change
the order of the table with clicking the header of his/her interested header.
If the user changes the order the table, all information is shown in one table,
each row corresponds to a particular problem. If the user selects the first
column, homework set order, the information is shown in different tables,
each table corresponds to a particular homework set. </span></p>
<p> <span style='font-size:11.0pt;
font-family:Symbol;layout-grid-mode:line'><span style='font:7.0pt "Times New Roman"'>
</span></span> <span style='font-size:11.0pt;layout-grid-mode:line'><b>Graphical
chart </b></span></p>
<p><span style='font-size:11.0pt;layout-grid-mode:line'>Two important features
in this page might be seen through the graphical charts. That is, a user could
see the content of %wrong column and degree of difficulty of problems in
the graphical chart as is shown in Fig. 3.2. 3 and 4 for homework set 1 in course
PHY183 SS02. These graphical charts are produced dynamically by calling a CGI
scripts, (graph.gif) which is located in /home/httpd/cgi-bin/</span></p>
<p> <img width=231 height=173
src="Session%20Tw2_files/image086.jpg" v:shapes="_x0000_i1053"> <span
style='layout-grid-mode:line'> <img width=230 height=170
src="Session%20Tw2_files/image088.jpg" v:shapes="_x0000_i1054"> </span></p>
<p><b>Fig. 3.2. 3</b><span
style='font-weight:normal'>: Degree of difficulty graph
</span><b>Fig. 3.2. 4</b><span style='font-weight:normal'>: %Wrong graph</span></p>
<h4 style='line-height:150%'><span style='font-size:12.0pt;font-family:Arial;
layout-grid-mode:line'> </span></h4>
<h3><a name="_Toc421867141"><span style='layout-grid-mode:line'>Problem Analysis</span></a></h3>
<p><span style='font-size:11.0pt'>Conceptual option response problems, in which
the students are given several concepts that are randomly assigned to each student,
are more difficult than numerical simple problems. Instructors usually
want to see the students tries according to every particular concept separately.
Problem Analysis button provides all response option problems in one table
as follows in the <b>Fig. 3.2.5.</b></span><span style='font-size:11.0pt'> </span></p>
<div style='border:solid windowtext .5pt;padding:1.0pt 0in 1.0pt 4.0pt'>
<p style='border:none;padding:0in;'><span style='font-size:11.0pt'>Total number
of students: 263</span></p>
<p style='border:none;padding:0in;'><b>Select number of intervals</b><span style='font-weight:normal'>
<img width=53 height=18
src="Session%20Tw2_files/image091.png" v:shapes="_x0000_i1055"> </span></p>
<p style='border:none;padding:0in;'><b>Option Response Problems</b><span
style='font-weight:normal'> </span><b>in course PHY183 SS02:</b></p>
</div>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=15 class="Normal"> <p align=center style='text-align:center'><b>#
</b></p></td>
<td width=83 class="Normal"> <p align=center style='text-align:center'><b>Problem
Title </b></p></td>
<td width=298 class="Normal"> <p align=center style='text-align:center'><b>Resource
</b></p></td>
<td width=77 class="Normal"> <p align=center style='text-align:center'><b>Address
</b></p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>1 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/01_Math_1\/msu-prob10\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Numbers</span></span></span> </p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/01_Math_1/msu-prob10.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=72 height=23
src="Session%20Tw2_files/image094.png" v:shapes="_x0000_i1056"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>2 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/03_Units_Scaling\/msu-prob22\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Speed</span></span></span> </p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/03_Units_Scaling/msu-prob22.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=72 height=23
src="Session%20Tw2_files/image097.png" v:shapes="_x0000_i1057"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>3 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/03_Units_Scaling\/msu-prob17\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Units</span></span></span> </p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/03_Units_Scaling/msu-prob17.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=72 height=23
src="Session%20Tw2_files/image100.png" v:shapes="_x0000_i1058"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>4 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/06_Vectors_Scalars\/msu-prob07\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Vector versus Scalar</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/06_Vectors_Scalars/msu-prob07.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=72 height=23
src="Session%20Tw2_files/image103.png" v:shapes="_x0000_i1059"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>5 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/06_Vectors_Scalars\/msu-prob10\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Adding Vectors</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/06_Vectors_Scalars/msu-prob10.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=72 height=23
src="Session%20Tw2_files/image106.png" v:shapes="_x0000_i1060"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>6 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/05_1D_Motion\/msu-prob16\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Traveling Car</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/05_1D_Motion/msu-prob16.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=59 height=23
src="Session%20Tw2_files/image109.png" v:shapes="_x0000_i1061"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>7 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/kashy\/Testing\/randomlabel\/atwood3T2M\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Atwood Machine</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/kashy/Testing/randomlabel/atwood3T2M.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=63 height=23
src="Session%20Tw2_files/image112.png" v:shapes="_x0000_i1062"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>8 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/10_Motion_W_Friction\/msu-prob32\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Sliding mass concepts</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/10_Motion_W_Friction/msu-prob32.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=59 height=23
src="Session%20Tw2_files/image115.png" v:shapes="_x0000_i1063"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>9 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/12_Work_Power_Energy\/msu-prob27\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Work, Power, Energy Concepts</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/12_Work_Power_Energy/msu-prob27.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=68 height=23
src="Session%20Tw2_files/image118.png" v:shapes="_x0000_i1064"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>10 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/13_EnergyConservation\/msu-prob32\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Bead on a Wire</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/13_EnergyConservation/msu-prob32.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=63 height=23
src="Session%20Tw2_files/image121.png" v:shapes="_x0000_i1065"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>11 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/20_Rot2_E_Trq_Accel\/msu-prob23\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Atwood Machine</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/20_Rot2_E_Trq_Accel/msu-prob23.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=63 height=23
src="Session%20Tw2_files/image124.png" v:shapes="_x0000_i1066"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>12 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/21_Rot3_AngMom_Roll\/msu-prob38\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Flinstone Bowling</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/21_Rot3_AngMom_Roll/msu-prob38.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=63 height=23
src="Session%20Tw2_files/image127.png" v:shapes="_x0000_i1067"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> <p>13 </p></td>
<td width=83 bgcolor="white" class="Normal"> <p><span style='"HYPERLINK \0022http\:\/\/deepthought\.lite\.msu\.edu\/res\/msu\/physicslib\/msuphysicslib\/32_Fluids1_Pascal_Arch\/msu-prob12\.problem\0022 \\t \0022_blank\0022"'><span
class=MsoHyperlink><span style='color:blue'>Boat on Pond</span></span></span>
</p></td>
<td width=298 bgcolor="white" class="Normal"> <p>/res/msu/physicslib/msuphysicslib/32_Fluids1_Pascal_Arch/msu-prob12.problem
</p></td>
<td width=77 class="Normal"> <p> <img width=68 height=23
src="Session%20Tw2_files/image130.png" v:shapes="_x0000_i1068"> </p></td>
</tr>
<tr>
<td width=15 class="Normal"> </td>
<td width=83 bgcolor="white" class="Normal"> <p align=center style='text-align:center'></p></td>
<td width=298 bgcolor="white" class="Normal"> <p align=center style='text-align:center'></p></td>
<td width=77 class="Normal"> <p align=center style='text-align:center'></p></td>
</tr>
</table>
<p><span style='font-size:11.0pt'><b>Fig. 3.2.5</b></span><span
style='font-size:11.0pt'>: Option response problems in course PHY183 SS02</span></p>
<p><b>Fig. 3.2.5</b><span style='font-weight:normal'> includes a table, which
shows the title of every option response problem in the first column. This title
has a link to the original html page of the problem. In the second column
the source address of the problem is shown. Third column of this table includes
a button to analyze the students data on this particular option response problem.
When this button is clicked, all data about this problem is <i>restored</i></span>,
for every student. Different versions of students submissions are evaluated.
The results are presented in a graphical chart as well as a numerical table.
For example, if we select the analysis of <b>/res/msu/kashy/Testing/randomlabel/atwood3T2M.problem</b></p>
<p> <span style='position:
relative;z-index:0'><span style='position:absolute;left:-37px;top:-32px;
width:248px;height:174px'> <table cellpadding=0 cellspacing=0> <tr> <td width=249 height=174 align=left valign=top bgcolor=white class="Normal"
style='border:.75pt solid black;vertical-align:top;background:white'><span
style='position:absolute;z-index:1'>
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td class="Normal"> <div v:shape="_x0000_s1026" style='padding:3.6pt 7.2pt 3.6pt 7.2pt'
class=shape>
<p class=FirstParagraph><span lang=PT-BR
style='font-size:9.0pt'>A frictionless, massless pulley is attached to the
ceiling, in a gravity field g. Mass Ma is greater than mass Mb. The
tensions Tx,Ty, Tz, and the constant g are magnitudes. (For each,
select: Greater than, Less than, Equal to, True, or False) </span></p>
<p class=FirstParagraph><span lang=PT-BR style='font-size:9.0pt'> <img width=96 height=114
src="Session%20Tw2_files/image132.jpg" v:shapes="_x0000_i1069"> <img width=125 height=120
src="Session%20Tw2_files/image135.png" v:shapes="_x0000_i1070"> </span></p>
</div></td>
</tr>
</table>
</span></td></tr> </table>
<p></p>
<br clear=all>
<p align=right style='text-align:right'> <span style='position:
absolute;z-index:1;left:0px;margin-left:229px;margin-top:97px;width:235px;
height:40px'> <table cellpadding=0 cellspacing=0> <tr> <td width=236 height=40 align=left valign=top bgcolor=white class="Normal" style='border:
.75pt solid white;vertical-align:top;background:white'><span
style='position:absolute;left:0pt;z-index:3'>
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td class="Normal"> <div v:shape="_x0000_s1028" style='padding:3.6pt 7.2pt 3.6pt 7.2pt'
class=shape>
<p><span style='font-size:9.0pt'><b>Fig. 3.2.7</b></span><span
style='font-size:9.0pt'>: Graphical chart of student tries for </span></p>
<p><span style='font-size:9.0pt'>
Atwood Machine Problem
according </span></p>
<p><span style='font-size:9.0pt'>
to every concept in 1 interval time.</span></p>
</div></td>
</tr>
</table>
</span></td></tr> </table> <img width=203 height=150
src="Session%20Tw2_files/image137.png" v:shapes="_x0000_i1071">
<p></p>
<p><span style='font-size:9.0pt'><b>Fig. 3.2.6</b></span><span
style='font-size:9.0pt'>: Atwood Machine option response problem in HW3<b> </b></span></p>
<p><span style='font-size:11.0pt'>In addition, the data of students tries
are shown in a table as you see in <b>Fig. 3.2.8</b></span><span
style='font-size:11.0pt'>. In the last row of the table you can see the time interval
of this data and the overall correct and wrong answers separately. If an
instructor wants to see the students tries in different time intervals,
he/she could set the number of intervals from 1 to 7 time intervals, and
then recompute the analysis. </span></p>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=10 class="Normal"> <p align=center style='text-align:center'><b>#
</b></p></td>
<td width=357 class="Normal"> <p align=center style='text-align:center'><b>Concept
</b></p></td>
<td width=38 class="Normal"> <p align=center style='text-align:center'><b>Correct
</b></p></td>
<td width=35 class="Normal"> <p align=center style='text-align:center'><b>Wrong
</b></p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>1</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Two masses have same
acceleration if the two the string does not stretch. </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>1342 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>433 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>2</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Weight of the two masses
is greater than the tension of the string attached to the ceiling.
</p></td>
<td width=38 bgcolor="white" class="Normal"> <p>585 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>1190 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>3</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>The top tension is equals
the two bottom tensions. (massless pulley) </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>1263 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>512 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>4</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Tension holding the two
masses are equal if mass of pulley=0 </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>1087 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>688 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>5</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Sub-System accelerates
upwards or downwards accordingly </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>757 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>1018 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>6</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Center of mass accelerates
downward </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>1354 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>421 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> </td>
<td width=357 class="Normal"> <p><b>From:[Thu Jan 24 00:46:22 2002] To:
[Mon Feb 4 23:59:59 2002]</b></p></td>
<td width=38 class="Normal"> <p>6388</p></td>
<td width=35 class="Normal"> <p>4245</p></td>
</tr>
</table>
<p><span style='font-size:11.0pt'><b>Fig. 3.2.8</b></span><span
style='font-size:11.0pt'>: Table of student tries for Atwood Machine Problem according
to every concept in one time interval.</span></p>
<p> <span
style='position:relative;z-index:2'><span style='position:
absolute;left:-109px;top:-166px;width:341px;height:24px'> <img width=341
height=24 src="Session%20Tw2_files/image138.png" v:shapes="_x0000_s1027"> <img width=203 height=150
src="Session%20Tw2_files/image140.png" v:shapes="_x0000_i1072"> <img width=203 height=150
src="Session%20Tw2_files/image142.png" v:shapes="_x0000_i1073">
<p></p>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=10 class="Normal"> <p align=center style='text-align:center'><b>#
</b></p></td>
<td width=357 class="Normal"> <p align=center style='text-align:center'><b>Concept
</b></p></td>
<td width=38 class="Normal"> <p align=center style='text-align:center'><b>Correct
</b></p></td>
<td width=35 class="Normal"> <p align=center style='text-align:center'><b>Wrong
</b></p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>1</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Two masses have same
acceleration if the two the string does not stretch. </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>124 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>98 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>2</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Weight of the two masses
is greater than the tension of the string attached to the ceiling.
</p></td>
<td width=38 bgcolor="white" class="Normal"> <p>44 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>178 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>3</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>The top tension is
equals the two bottom tensions. (massless pulley) </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>142 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>80 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>4</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Tension holding the
two masses are equal if mass of pulley=0 </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>125 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>97 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>5</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Sub-System accelerates
upwards or downwards accordingly </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>64 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>158 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>6</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Center of mass accelerates
downward </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>151 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>71 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> </td>
<td width=357 class="Normal"> <p><b>From:[Thu Jan 24 00:46:22 2002]
To: [Wed Jan 30 00:23:10 2002]</b></p></td>
<td width=38 class="Normal"> <p>650</p></td>
<td width=35 class="Normal"> <p>682</p></td>
</tr>
</table>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=10 class="Normal"> <p align=center style='text-align:center'><b>#
</b></p></td>
<td width=357 class="Normal"> <p align=center style='text-align:center'><b>Concept
</b></p></td>
<td width=38 class="Normal"> <p align=center style='text-align:center'><b>Correct
</b></p></td>
<td width=35 class="Normal"> <p align=center style='text-align:center'><b>Wrong
</b></p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>1</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Two masses have same
acceleration if the two the string does not stretch. </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>1218 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>335 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>2</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Weight of the two masses
is greater than the tension of the string attached to the ceiling.
</p></td>
<td width=38 bgcolor="white" class="Normal"> <p>541 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>1012 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>3</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>The top tension is
equals the two bottom tensions. (massless pulley) </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>1121 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>432 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>4</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Tension holding the
two masses are equal if mass of pulley=0 </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>962 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>591 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>5</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Sub-System accelerates
upwards or downwards accordingly </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>693 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>860 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>6</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Center of mass accelerates
downward </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>1203 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>350 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> </td>
<td width=357 class="Normal"> <p><b>From:[Wed Jan 30 00:23:11 2002]
To: [Mon Feb 4 23:59:59 2002]</b></p></td>
<td width=38 class="Normal"> <p>5738</p></td>
<td width=35 class="Normal"> <p>3563</p></td>
</tr>
</table>
<p><span style='font-size:11.0pt'><b>Fig. 3.2.9</b></span><span
style='font-size:11.0pt'>: Table of student tries for Atwood Machine Problem according
to every concept in 2 times interval.</span></p>
<p>In <b>Fig. 3.2.9</b><span style='font-weight:normal'>, number of students
tries tables and the graphical chart are shown in 2 different time intervals.
An instructor would be able to check whether the students have more wrong
answers during the first days of opening the homework set, and how many
students have tried during the first or the second interval. Since the
problems are individualized he/she might be able to see how many students
have tried to solve the problem after communicating with each other and
understanding the concept. In Fig. 3.2. 10 the charts and tables
of students tries are shown in 3 time intervals. So if the homework should
be done in one week, an instructor would be able to observe the distribution
of students tries every day separately after choosing the 7 time intervals.</span></p>
<p> <img width=151 height=150
src="Session%20Tw2_files/image144.png" v:shapes="_x0000_i1074"> <img width=151 height=150
src="Session%20Tw2_files/image146.png" v:shapes="_x0000_i1075"> <img width=149 height=150
src="Session%20Tw2_files/image148.png" v:shapes="_x0000_i1076"> </p>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=10 class="Normal"> <p align=center style='text-align:center'><b>#
</b></p></td>
<td width=357 class="Normal"> <p align=center style='text-align:center'><b>Concept
</b></p></td>
<td width=38 class="Normal"> <p align=center style='text-align:center'><b>Correct
</b></p></td>
<td width=35 class="Normal"> <p align=center style='text-align:center'><b>Wrong
</b></p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>1</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Two masses have same
acceleration if the two the string does not stretch. </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>31 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>30 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>2</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Weight of the two masses
is greater than the tension of the string attached to the ceiling.
</p></td>
<td width=38 bgcolor="white" class="Normal"> <p>8 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>53 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>3</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>The top tension is
equals the two bottom tensions. (massless pulley) </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>44 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>17 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>4</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Tension holding the
two masses are equal if mass of pulley=0 </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>32 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>29 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>5</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Sub-System accelerates
upwards or downwards accordingly </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>20 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>41 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>6</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Center of mass accelerates
downward </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>42 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>19 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> </td>
<td width=357 class="Normal"> <p><b>From:[Thu Jan 24 00:46:22 2002]
To: [Mon Jan 28 00:30:53 2002]</b></p></td>
<td width=38 class="Normal"> <p>177</p></td>
<td width=35 class="Normal"> <p>189</p></td>
</tr>
</table>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=10 class="Normal"> <p align=center style='text-align:center'><b>#
</b></p></td>
<td width=357 class="Normal"> <p align=center style='text-align:center'><b>Concept
</b></p></td>
<td width=38 class="Normal"> <p align=center style='text-align:center'><b>Correct
</b></p></td>
<td width=35 class="Normal"> <p align=center style='text-align:center'><b>Wrong
</b></p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>1</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Two masses have same
acceleration if the two the string does not stretch. </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>692 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>257 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>2</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Weight of the two masses
is greater than the tension of the string attached to the ceiling.
</p></td>
<td width=38 bgcolor="white" class="Normal"> <p>321 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>628 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>3</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>The top tension is
equals the two bottom tensions. (massless pulley) </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>690 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>259 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>4</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Tension holding the
two masses are equal if mass of pulley=0 </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>590 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>359 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>5</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Sub-System accelerates
upwards or downwards accordingly </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>399 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>550 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>6</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Center of mass accelerates
downward </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>703 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>246 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> </td>
<td width=357 class="Normal"> <p><b>From:[Mon Jan 28 00:30:54 2002]
To: [Fri Feb 1 00:15:25 2002]</b></p></td>
<td width=38 class="Normal"> <p>3395</p></td>
<td width=35 class="Normal"> <p>2281</p></td>
</tr>
</table>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=10 class="Normal"> <p align=center style='text-align:center'><b>#
</b></p></td>
<td width=357 class="Normal"> <p align=center style='text-align:center'><b>Concept
</b></p></td>
<td width=38 class="Normal"> <p align=center style='text-align:center'><b>Correct
</b></p></td>
<td width=35 class="Normal"> <p align=center style='text-align:center'><b>Wrong
</b></p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>1</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Two masses have same
acceleration if the two the string does not stretch. </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>619 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>147 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>2</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Weight of the two masses
is greater than the tension of the string attached to the ceiling.
</p></td>
<td width=38 bgcolor="white" class="Normal"> <p>256 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>510 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>3</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>The top tension is
equals the two bottom tensions. (massless pulley) </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>529 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>237 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>4</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Tension holding the
two masses are equal if mass of pulley=0 </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>465 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>301 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>5</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Sub-System accelerates
upwards or downwards accordingly </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>338 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>428 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> <p>6</p></td>
<td width=357 bgcolor="white" class="Normal"> <p>Center of mass accelerates
downward </p></td>
<td width=38 bgcolor="white" class="Normal"> <p>609 </p></td>
<td width=35 bgcolor="white" class="Normal"> <p>157 </p></td>
</tr>
<tr>
<td width=10 class="Normal"> </td>
<td width=357 class="Normal"> <p><b>From:[Fri Feb 1 00:15:26 2002] To:
[Mon Feb 4 23:59:59 2002]</b></p></td>
<td width=38 class="Normal"> <p>2816</p></td>
<td width=35 class="Normal"> <p>1775</p></td>
</tr>
</table>
<p><b>Fig. 3.2. 10</b><span style='font-weight:normal'>: Table of student
tries for Atwood Machine Problem according to every concept in 3 times
interval.</span></p>
<h3><a name="_Toc421867142">Student Assessment</a></h3>
<p class=MsoBodyText2><span style='font-size:11.0pt'>This option provides
some reports about the current educational situation of every student
as you see in <b>Fig. 3.2.11</b></span><span style='font-size:11.0pt'>.
A Y show that the student has solved the problem and N shows his/her
failure. A - denotes a unattempted problem. The numbers in the
right column show the total number of tries of the student in solving
the corresponding problems.</span></p>
<form>
<div style='border:solid windowtext .5pt;padding:1.0pt 0in 1.0pt 4.0pt'>
<p style='border:none;padding:0in;'>Total number of students : 263<br>
<br>
<img width=68 height=23
src="Session%20Tw2_files/image151.png" v:shapes="_x0000_i1077"> <br>
<b>Select Map </b><span style='font-weight:normal'>
<img width=215 height=18
src="Session%20Tw2_files/image154.png" v:shapes="_x0000_i1078"> <br>
</span><b>Select Section</b><span style='font-weight:normal'> <img width=89 height=18
src="Session%20Tw2_files/image157.png" v:shapes="_x0000_i1079"> <br>
</span><b>Select Student</b><span style='font-weight:normal'> <img width=89 height=18
src="Session%20Tw2_files/image160.png" v:shapes="_x0000_i1080"> <br>
<br>
</span></p>
<p style='border:none;padding:0in;'> <img width=93 height=23
src="Session%20Tw2_files/image163.png" v:shapes="_x0000_i1081"> </p>
</div>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td width=21 class="Normal"> <p align=center style='text-align:center;line-height:150%'><b>#
</b></p></td>
<td width=177 class="Normal"> <p align=center style='text-align:center;line-height:150%'><b>Set
Title </b></p></td>
<td width=122 class="Normal"> <p align=center style='text-align:center;line-height:150%'><b>Results
</b></p></td>
<td width=153 class="Normal"> <p align=center style='text-align:center;line-height:150%'><b>Tries
</b></p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>1 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/phy183.sequence
</p></td>
<td width=122 class="Normal"> </td>
<td width=153 class="Normal"> </td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>2 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap1/calckap1.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYYYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>1,1,1,2,1,1,1,1,1,7,9,3,2</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>3 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap2/calckap2.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYNYYYYNNYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>10,1,0,1,1,2,1,4,5,1,1,1,3,2,1,1,1</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>4 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap3/calckap3.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYYYYYNYYYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>4,3,5,1,1,8,2,3,20,1,1,1,1,1,2,3,2,2,3</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>5 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap4/calckap4.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>NYYYYYYYYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>20,1,1,1,3,3,2,3,4,2,3,2,1,1,2,5</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>6 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap5/calckap5.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYYYYYYYY-YY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>5,2,1,9,12,1,3,12,1,2,1,,1,3</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>7 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap6/calckap6.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYYYYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>3,2,4,2,1,1,2,1,1,9,2,3,2,2</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>8 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap7/calckap7.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYYYYYYYYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>4,1,3,1,10,4,1,1,2,1,1,2,1,2,1,3,1,3</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>9 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap8/calckap8.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYYYYYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>4,3,1,2,3,3,4,3,3,1,1,4,1,1,7</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>10 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap9/calckap9.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYN-NYYNY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>1,1,1,2,1,,2,2,1,6,4</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>11 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap10/calckap10.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'><span style='font-size:8.0pt'>YYYYYYYYYYYY
</span></p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>2,1,1,1,1,1,1,1,1,1,1,1</p></td>
</tr>
<tr>
<td width=21 class="Normal"> <p style='line-height:150%'>12 </p></td>
<td width=177 class="Normal"> <p style='line-height:150%'>msu/mmp/kap11/calckap11.sequence
</p></td>
<td width=122 class="Normal"> <p style='line-height:150%'>-----------------
</p></td>
<td width=153 class="Normal"> <p style='line-height:150%'>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</p></td>
</tr>
</table>
<p><span style='layout-grid-mode:line'><b>Fig. 3.2. 5</b></span><span
style='layout-grid-mode:line'>: A sample of a student homework results and tries</span></p>
<p><span style='font-size:11.0pt;layout-grid-mode:line'>We plan to present
several other reports in this page as well. Some student classification
reports also would be depicted here.</span></p>
<p><span style='font-size:11.0pt;layout-grid-mode:line'>In problem stats
and student assessment pages, an instructor can limit the range of
his/her information to a particular section or a particular homework
set. So, an instructor would be able to load the statistics table
or student tries in student assessment table to a particular map or
section. </span><span style='font-size:11.0pt'>After changing the map
or section, he/she would be able to see the results via the recalculating
the computation on that page. </span><span style='font-size:11.0pt;
font-family:Arial;layout-grid-mode:line'></span></p>
<h3><a name="_Toc421867143"><span style='layout-grid-mode:line'>Future
work, using activity.log to classify the students</span></a></h3>
<p><span style='font-size:11.0pt'>The problem is whether we can find the
good features for <i>classifying</i></span><span style='font-size:
11.0pt'> students? If so, we would be able to identify a <i>predictor</i></span><span
style='font-size:11.0pt'> for any individual student after doing a couple of homework
sets. With this information, we would be able to <i>help</i></span><span
style='font-size:11.0pt'> a student use the resources better. <span style='layout-grid-mode:line'>As
the first step of data mining stuff w</span>e want to make an initial
effort to classify the students. </span></p>
<p><span style='font-size:11.0pt'>Preprocessing and finding the useful
student data and segmenting may be a difficult task. Internally, one
part of this data is stored in a student directory:</span></p>
<p><span style='font-size:11.0pt'> </span><span style='font-size:11.0pt;font-family:"Courier New"'>/</span><span
style='font-size:9.0pt;font-family:"Courier New"'>home/httpd/lonUsers/<i>domain</i></span><span
style='font-size:9.0pt;font-family:"Courier New"'>/<i>1st.char</i></span><span
style='font-size:9.0pt;font-family:"Courier New"'>/<i>2nd.char</i></span><span
style='font-size:9.0pt;font-family:"Courier New"'>/<i>3rd.char</i></span><span
style='font-size:9.0pt;font-family:"Courier New"'>/<i>username</i></span><span
style='font-size:9.0pt;font-family:"Courier New"'>/</span></p>
<p class=MsoHeader><span style='font-size:11.0pt'>For example: /home/httpd/lonUsers/msu/m/i/n/minaeibi/</span></p>
<p><span style='font-size:11.0pt;layout-grid-mode:line'>Since spring semester
2002, LON-CAPA has logged every activity of every student who has used</span><span style='font-size:11.0pt'>
online educational resources and their recorded paths through the web.
So another part of data is stored in activity.log which is located
in course directory.</span></p>
<p><span style='font-size:11.0pt'>The student data restored from .db files
in student directory and is fetched into a hash table. The special hash
keys <i>keys</i></span><span style='font-size:11.0pt'>, <i>version</i></span><span
style='font-size:11.0pt'> and <i>timestamp</i></span><span style='font-size:
11.0pt'> were evaluated from the hash. The <i>version</i></span><span
style='font-size:11.0pt'> will be equal to the total number of versions of the
data that have been stored. The <i>timestamp</i></span><span style='font-size:
11.0pt'> attribute is the UNIX time the data was stored. <i>keys</i></span><span
style='font-size:11.0pt'> is available in every historical section to list which
keys were added or changed at a specific historical revision of a hash.
We extract the features from a structured homework data, which is stored
as particular URLs. For example the result of solving homeworks problem
by students could be extracted from </span><span style='font-size:9.0pt;
font-family:"Courier New"'><i>resource.partid.solved</i></span><span
style='font-size:11.0pt;font-family:"Courier New"'>, </span><span
style='font-size:11.0pt'>the total number of the students for solving the problem
could be extracted from </span><span style='font-size:9.0pt;font-family:
"Courier New"'><i>resource.partid.tries</i></span><span style='font-size:11.0pt;
font-family:"Courier New"'>,</span><span style='font-size:11.0pt'> and so forth.</span></p>
<p><span style='font-size:11.0pt'>All data stored in activity.log includes
<i>user name</i></span><span style='font-size:11.0pt'>, <i>time</i></span><span
style='font-size:11.0pt'> and <i>resource URL</i></span><span style='font-size:
11.0pt'>. We can divide these data into six types of URLs, listed below, according
to their importance for data mining: </span></p>
<p style='line-height:150%'><span style='font-size:11.0pt'>1. <b><u>problems:</u></b></span><span
style='font-size:11.0pt'> are the most useful data. i.e.<b><u> </u></b></span><span
style='font-size:7.0pt'><b><u>msu/mmp/kap14/kap14.sequence___33___msu/mmp/kap14/problems/cd418a.problem</u></b></span>
<br>
<span style='font-size:11.0pt'>2. <b>html pages</b></span><span
style='font-size:11.0pt'> to those are some links in the problems. i.e. </span><span
style='font-size:7.0pt'><b>msu/mmp/kap14/kap14.sequence___5___msu/mmp/kap14/cd396.htm</b></span>
<br>
<span style='font-size:11.0pt'>3. <i>the images</i></span><span
style='font-size:11.0pt'>, which are loaded in above html pages. i.e. <i>/res/msu/mmp/kap14/picts/backsoun.gif</i></span><span
style='font-size:11.0pt'> .</span></p>
<p style='line-height:150%'><span style='font-size:11.0pt'>4. <u>loncapa
routines</u>: i.e. <u>/adm/navmaps,</u> or <u>/adm/roles,</u>
or <u>/adm/logout</u>.<br>
5. <i><u>Posted data</u></i></span><span style='font-size:11.0pt'> by
students: i.e. <i><u>resource.0.11.submission=27.11</u></i></span><span style='font-size:
11.0pt'> <br>
6. remote control gif files: i.e.: /res/adm/pages/v.gif </span></p>
<p>So, activity.log usually grows fast, when students have more access
to the educational resources. We have brought a sample of different
types of data which are logged in activity.log after a preprocessing
phase as follows: </p>
<p><u>144) 1010955846: studentX --> /adm/navmaps</u> <br>
<i>145) 1010955205: studentX --> /res/msu/mmp/kap14/picts/beta_eqn.gif</i><span
style='font-style:normal'> <br>
<u>146) 1010955685: studentX --> /adm/navmaps</u> <br>
<u>147) 1010955988: studentX --> /adm/navmaps</u> <br>
</span><span style='font-size:8.0pt'><b>148) 1010955998: studentX -->
msu/mmp/kap14/kap14.sequence___5___msu/mmp/kap14/cd396.htm</b></span>
<br>
<i>149) 1010955999: studentX --> /res/msu/mmp/kap14/picts/velocity_eqn3.gif</i>
<br>
<i>150) 1010956000: studentX --> /res/msu/mmp/kap14/picts/time_eqn.gif</i><span style='font-style:normal'>
<br>
151) 1010954609: studentX --> /res/adm/pages/grds.gif <br>
</span><i>152) 1010954611: studentX --> /res/msu/mmp/wordproc.gif</i><span
style='font-style:normal'> <br>
153) 1010954626: studentX --> /res/adm/pages/i.gif <br>
</span><span style='font-size:8.0pt'><b>154) 1010955717: studentX -->
msu/mmp/kap14/kap14.sequence___1___msu/mmp/kap14/cd392.htm</b></span>
<br>
<i>155) 1010955717: studentX --> /res/msu/mmp/kap14/picts/backsoun.gif</i>
<br>
<span style='font-size:8.0pt'><b>156) 1010955920: studentX --> msu/mmp/kap14/kap14.sequence___3___msu/mmp/kap14/cd394.htm</b></span>
<br>
<i>157) 1010955921: studentX --> /res/msu/mmp/gifs/demo.gif</i><span
style='font-style:normal'> <br>
158) 1010956113: studentX --> /res/adm/pages/v.gif <br>
159) 1010954629: studentX --> /res/adm/pages/eval.gif <br>
160) 1010954631: studentX --> /res/adm/pages/back.gif <br>
161) 1010954632: studentX --> /res/adm/pages/b.gif <br>
162) 1010954633: studentX --> /res/adm/pages/r.gif <br>
</span><span style='font-size:9.0pt'><b>163) 1010955754:</b></span><b>
studentX --> msu/mmp/kap14/kap14.sequence___2___msu/mmp/kap14/cd393.htm</b><span
style='font-weight:normal'> <br>
<i>164) 1010955756: studentX --> /res/msu/mmp/kap14/picts/asound.jpg</i></span>
<br>
<i>165) 1010955762: studentX --> /res/msu/mmp/kap14/picts/sensor.jpg</i>
<br>
<i>166) 1010955999: studentX --> /res/msu/mmp/gifs2/example.gif</i><span
style='font-style:normal'> <br>
173) 1010955687: studentX --> /res/adm/pages/u.gif <br>
174) 1010955688: studentX --> /res/adm/pages/s.gif <br>
175) 1010955688: studentX --> /res/adm/pages/e.gif <br>
</span><span style='font-size:9.0pt'><b>176) 1010956528:</b></span><b>
studentX</b><span
style='font-size:9.0pt'><b> --> msu/mmp/kap14/kap14.sequence___33___msu/mmp/kap14/problems/cd418a.problem</b></span>
<br>
<i><u>177) Sent data</u></i> <br>
<span style='font-size:9.0pt'><b><u>178) 1010956536: </u></b></span><b><u>studentX</u></b><span
style='font-size:9.0pt'><u><b> --></b></u></span><b><u> </u></b><span
style='font-size:9.0pt'><u><b>msu/mmp/kap14/kap14.sequence___33___msu/mmp/kap14/problems/cd418a.problem</b></u></span>
<br>
<i><u>179) Sent data HWVAL11=27.11</u></i> <br>
<span style='font-size:9.0pt'><b><u>180) 1010956536:</u></b></span><b><u>
studentX</u></b><span style='font-size:9.0pt'><u><b> --></b></u></span><b><u>
</u></b><span style='font-size:9.0pt'><u><b>msu/mmp/kap14/kap14.sequence___33___msu/mmp/kap14/problems/cd418a.problem</b></u></span>
<br>
<i><u>181) Sent data resource.0.11.submission=27.11</u></i> <br>
<span style='font-size:9.0pt'><b><u>182) 1010956702: studentX -->
msu/mmp/kap14/kap14.sequence___33___msu/mmp/kap14/problems/cd418a.problem</u></b></span>
<br>
<span style='font-size:11.0pt'><i><u>183) Sent data</u></i></span><span
style='font-size:11.0pt'> <br>
<i>184) 1010955921: studentX --> /res/msu/mmp/kap14/picts/areal.gif</i></span><span
style='font-size:11.0pt'> <br>
185) 1010955731: studentX --> /res/adm/pages/n.gif <br>
<br>
</span></p>
<p class=H5> <span
style='font-size:11.0pt;font-family:Symbol;font-weight:normal'><span
style='font:7.0pt "Times New Roman"'> </span></span>
<span
style='font-size:11.0pt;font-family:Arial'>Feature Extraction</span></p>
<p class=MsoBodyText2>From these two types of student data which are stored
by the LON-CAPA system, the features may be considered for classifying
the students, are as follows: </p>
<p> 1.<span style='font:7.0pt "Times New Roman"'>
</span> Total number of correct answers. </p>
<p> 2.<span style='font:7.0pt "Times New Roman"'>
</span> Total number of tries for doing homework. </p>
<p> 3.<span style='font:7.0pt "Times New Roman"'>
</span> Time at which the student got the problem correct. Usually better
students get the homework completed earlier.</p>
<p> 4.<span style='font:7.0pt "Times New Roman"'>
</span> Reading the material before attempting homework vs. attempting
first and then read up on it.</p>
<p> 5.<span style='font:7.0pt "Times New Roman"'>
</span> Submitting a lot of attempts in a short amount of time without
looking up material in between, vs. those giving it one try, reading
up, submitting another one, etc.</p>
<p> 6.<span style='font:7.0pt "Times New Roman"'>
</span> Getting the problem right on the first try, vs. those with high
number of tries.</p>
<p> 7.<span style='font:7.0pt "Times New Roman"'>
</span> Giving up on a problem versus students continuing trying up
to the deadline.</p>
<p> 8.<span style='font:7.0pt "Times New Roman"'>
</span> Participating in the communication mechanisms, vs. those working
alone.</p>
<p><br>
It might be interesting to group students with time of the first log
on (beginning of assignment, middle of the week, last minute) and correlate
this with the number of tries or number of solved problems. A student
who gets all correct answers will not necessarily be in the successful
group if they took an average of 5 tries per problem, but it should
be verified from this research. </p>
<p>We hope to find similar patterns of use in the data gathered from LON-CAPA,
and eventually be able to make predictions as to the most-beneficial
course of studies for each learner based on a limited number of variables
for each individual student. Based on the current state of the learner
in a learning sequence, the system could then make suggestions to the
learner as to how to proceed. </p>
</form>
<br
clear=ALL style='page-break-before:always;'>
<div class=Section2> </div></div>
<br clear=all>
<hr align=left size=1 width="33%">
<div id=ftn1>
<p class=MsoFootnoteText><a href="#_ftnref1"
name="_ftn1" title=""><span class=MsoFootnoteReference> [1] </span></a> If instructor
is going to port the statistics table data to Excel, he/she can select
the checkbox Output CSV format at top of the statistics table.</p>
</div>
<div id=ftn2>
<p class=MsoFootnoteText><a href="#_ftnref2"
name="_ftn2" title=""><span class=MsoFootnoteReference> [2] </span></a>
This name has been got from administration office of Michigan State
University for evaluating the exams problem. Here we expanded this
expression to homework problems as well.</p>
</div></span></span></span></span></span>
</body>
</html>
Index: doc/gutshtml/SessionTwo.html
+++ doc/gutshtml/SessionTwo.html
<html><head><meta name=Title content="Session Two: Apache Handlers (loncapa_apache"><meta http-equiv=Content-Type content="text/html; charset=macintosh"><title>Session Two: Apache Handlers (loncapa_apache</title><style><!--.Section1 {page:Section1;}.Section2 {page:Section2;}--></style></head><body bgcolor=#FFFFFF class="Normal" lang=EN-US><div class=Section1> <h2>Session Two: Apache Handlers (loncapa_apache.conf), Authentication and Access Control, Session Environment (Matthew)</h2> <h3><a name="_Toc470397993"></a><a name="_Toc514840845"></a><aname="_Toc421867046"><span>Server Content Resource Areas</span></a></h3> <p>Internally, all resources are identified primarily by their URL. Different logical areas of the server are distinguished by the beginning part of the URL: </p> <ul type=disc> <li><span style='font-family:"Courier New"'>/adm: </span>publicly available content, logos, manual pages, etc.<i></i></li> </ul> <ul type=disc> <li><span style='font-family:"Courier New"'>/res/<i>domainname</i></span><span style='font-family:"Courier New"'>/<i>authorname</i></span><span style='font-family:"Courier New"'>/..: </span>the resource area, holding course maps, HTML pages, homework, movies, applets, etc. Access to these files is restricted by the cookie-based authentication mechanism. Content in this area will be served by type-dependent handlers, for example, one handlers to serve homework problems, and another one for TeX resources. The structure of this area of the server is exactly the same on every server, even though not all resources might be present everywhere.</li> </ul> <ul type=disc> <li><span style='font-family:"Courier New"'>/raw/<i>domainname</i></span><span style='font-family:"Courier New"'>/<i>authorname</i></span><span style='font-family:"Courier New"'>/..: </span>internally, this is just a symbolic link to the <span style='font-family:"Courier New"'>res</span> directory, however, no content handlers are called when serving a resource and access is controlled by IP rather than cookies. This structure is used for replication of resources between servers.</li> </ul> <ul type=disc> <li><span style='font-family:"Courier New"'>/~<i>authorname</i></span><span style='font-family:"Courier New"'>/.., /priv<i>/authorname</i></span><span style='font-family:"Courier New"'>: </span>the content construction space.<span style='font-family:"Courier New"'> </span>This is normal UNIX filespace, which however can only by viewed on the web by the authors themselves through the cookie based authentication. Content handlers are active for this space. This space can be mounted on other UNIX machines, as well as AppleShare and Windows. Below the <span style='font-family:"Courier New"'><i>authorname</i></span>, this directory has the same structure as the resource space of the author.</li> </ul> <ul type=disc> <li><span style='font-family:"Courier New"'>/lon-status/..: </span>LON-CAPA status information behind basic http authentication so it is not dependent on system functions</li> </ul> <p>Authors can only write-access the<i> </i><spanstyle='font-family:"Courier New";font-style:normal'>/~</span><spanstyle='font-family:"Courier New"'><i>authorname</i></span><spanstyle='font-family:"Courier New"'>/</span> space. They can copy resources into the resource area through the publication step, and move them back through a retrieve step. Authors do not have direct write-access to their resource space.</p> <h3><a name="_Toc514840846"></a><a name="_Toc421867047">Apache Request Cycle and Handlers</a></h3> <p>The standard mode in which the Apache web server is used is that a URL corresponds to some static file on the file system, which then more or less gets sent out as-is. Slight deviations from that simple principle are however already the directory listing function, virtual servers, and the cgi-bin directory. In the latter case, Apache executes the file in a new process and provides both the input to the process in the environment, and routes the output to the client. Other deviations are the error messages.</p> <p>In a more general view, URLs to Apache are URIs (Uniform Resource Identifiers), which may are may not correspond to a physical file, which in turn may or may not be sent out as-is.</p> <p>As a request for a URI gets sent to the Apache server, it goes through several phases. At each phase (stage) along the process, handler modules can be defined to deal with the request. Details about these phases are given in the Eagle book Chapter 3 (page 60).</p> <p>These handler modules are not like cgi-scripts executed in a separate process, but are dynamically linked into the Apache child processes themselves they run inside of Apache. The mod_perl mechanism in addition links the Perl interpreter into the Apache child process. Modules are pre-interpreted (compiled) by the Perl interpreter when they are first loaded, and the pre-interpreted code stays permanently in the memory allocated to that Apache child process. The result is a significant speed-up, and through the flexible mechanism of module registration and different stages of the process, a high degree of customizability.</p> <p>LON-CAPA does not use Apache::Registry, and so in addition avoids the unnecessary overhead of emulating a cgi-environment within the handlers. Instead, it makes direct use of the Apache Perl API (Chapter 9, Eagle book). </p> <h3><a name="_Toc514840847"></a><a name="_Toc421867048">Handler Definition</a></h3> <p>Which chain of handler deals with which kind of resource is defined in <span style='font-size:9.0pt;font-family:"Courier New"'>/etc/httdp/conf/loncapa_apache.conf</span>. LON-CAPA only defines handlers at the (in order) header-parser, access control, and response phase (figure 3-3 Eagle book). In the header-parser phase, the replication handler is run, and in the access-control phase, the various access-handlers. Future handlers will mostly be implemented in the response phase.<b> Fig. 1.2.2</b><span style='font-weight:normal'> shows excerpts of the configuration script </span><span style='font-size:9.0pt;font-family:"Courier New"'>/etc/httpd/loncapa_apache.conf</span> for these modules.</p> <div style='border:solid windowtext .5pt;padding:31.0pt 31.0pt 31.0pt 31.0pt'> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'># ------------------------------------------------------------- Access Handlers</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/res.*"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlAccessHandler Apache::lonacc</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHeaderParserHandler Apache::lonrep</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 403 /adm/login</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 404 /adm/notfound.html</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 406 /adm/roles</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 500 /adm/errorhandler</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/priv.*"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlAccessHandler Apache::loncacc</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lonconstruct</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 403 /adm/login</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 404 /adm/notfound.html</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 406 /adm/unauthorized.html</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 500 /adm/errorhandler</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/raw.*"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlAccessHandler Apache::lonracc</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/\~.*"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlAccessHandler Apache::loncacc</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 403 /adm/login</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 404 /adm/notfound.html</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 406 /adm/unauthorized.html</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 500 /adm/errorhandler</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>AllowOverride None</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:20.0pt;font-family:"Courier New"'><b></b></span><spanstyle='font-size:16.0pt;font-family:"Courier New"'></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'># --------------------------------------------- Resource Space Content Handlers</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/res/.*/$"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lonindexer</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/res/.*\.tex$"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lontex</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/res/.*\.page$></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lonpage</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:20.0pt;font-family:"Courier New"'><b></b></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/(res|\~).*\.(xml|html|htm|xhtml|xhtm)$"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lonxml</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><LocationMatch "^/(res|\~).*\.(problem|exam|quiz|assess|survey|form)$"></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lonhomework</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></LocationMatch></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'># -------------------------------------------------------------- Admin Programs</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><Location /adm/roles></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlAccessHandler Apache::lonacc</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lonroles</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 403 /adm/login</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 500 /adm/errorhandler</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></Location></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><Location /adm/login></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::lonlogin</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></Location></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:20.0pt;font-family:"Courier New"'><b></b></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'><Location /adm/annotations></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlAccessHandler Apache::lonacc</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>SetHandler perl-script</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>PerlHandler Apache::admannotations</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 403 /adm/login</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'>ErrorDocument 500 /adm/errorhandler</span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:8.0pt;font-family:"Courier New"'></Location></span></p> <p style='border:none;padding:0in;'><spanstyle='font-size:14.0pt;font-family:"Courier New"'><b> etc </b></span></p> </div> <p><span style='font-size:14.0pt'><b>Fig. 1.2.2</b></span><spanstyle='font-size:14.0pt'> Excerpts of </span><span style='font-size:14.0pt;font-family:"Courier New"'>loncapa_apache.conf</span></p> <h3><a name="_Toc514840849"></a><a name="_Toc421867049">Authentication Overview</a></h3> <p>A user can log into any server in the network and run sessions. The server responsible for initially authenticating the user is the users homeserver.</p> <p>When a user first accesses a server within a browser session, he or she is challenged to provide authentication information in the form of username, password and domain this is done by <span style='font-family:"Courier New"'>lonlogin</span>, which is the <span style='font-family:"Courier New"'>error_document</span> for <span style='font-family:"Courier New"'>lonacc</span> and <spanstyle='font-family:"Courier New"'>loncacc </span>(the normal authentication handlers). When the server receives that information, it asks all library servers in the domain that the user specified to validate the information this is done by <span style='font-family:"Courier New"'>lonauth</span>. </p> <p>The users home server will answer with<i> </i><spanstyle='font-family:"Courier New";font-style:normal'>authorized</span> or <spanstyle='font-family:"Courier New"'>non_authorized</span>, all others with <spanstyle='font-family:"Courier New"'>unknown_user</span>. If one server authorizes the user, a cookie is returned to the user by <span style='font-family:"Courier New"'>lonauth</span> and the session is initialized on the local server by establishing the session environment file. If a server sends<i> </i><span style='font-family:"Courier New";font-style:normal'>non_authorized</span>, the user is rejected. <b>Fig. 1.3.1</b><spanstyle='font-weight:normal'> illustrates this process.</span></p></div><brclear=ALL style='page-break-before:always;'><div class=Section2> <div class=Section3> <div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'> <p style='border:none;padding:0in'>Domain</p> <p style='border:none;padding:0in'> <span style='font-family:Wingdings'></span> username, password <span style='font-family:Wingdings'></span> <b>Library Server</b></p> <p style='border:none;padding:0in'> | <span style='font-family:Wingdings'></span> unknown_user <span style='font-family:Wingdings'></span></p> <p style='border:none;padding:0in'> |</p> <p style='border:none;padding:0in'> | <span style='font-family:Wingdings'></span> username, password <span style='font-family:Wingdings'></span> <b>Library Server</b></p> <p style='border:none;padding:0in'> | <span style='font-family:Wingdings'></span> authorized <span style='font-family:Wingdings'></span></p> <p style='border:none;padding:0in'> |</p> <p style='border:none;padding:0in'><b>User</b><spanstyle='font-weight:normal'> </span><span style='font-family:Wingdings'></span> username,password,domain <span style='font-family:Wingdings'></span> <b>Server </b></p> <p style='border:none;padding:0in'><b> </b><spanstyle='font-family:Wingdings'><b></b></span><b> </b><span style='font-weight:normal'>cookie</span><b> </b><span style='font-family:Wingdings'><b></b></span><b> </b><span style='font-weight:normal'>store session information for valid cookies</span></p> </div> <p><span style='font-size:14.0pt'><b>Fig. 1.3.1</b></span><spanstyle='font-size:14.0pt'> Illustration of Authentication Mechanism</span></p> <p class=MsoBodyText style='line-height:normal'><span style='font-size:10.0pt'>At all subsequent interactions, the client sends the cookie back to the server if the cookie is missing or invalid, the user is re-challenged for login information. Handlers are </span><span style='font-size:10.0pt;font-family:"Courier New"'>lonacc</span><span style='font-size:10.0pt'> and </span><spanstyle='font-size:10.0pt;font-family:"Courier New"'>loncacc</span><spanstyle='font-size:10.0pt'>. Cookies expire by closing the browser and are invalidated when the user logs out or logs in a second time into the same machine from another browser<i>.</i></span></p> <h3><a name="_Toc514840850"></a><a name="_Toc421867050">Authentication Mechanisms, User Data, Passwords</a></h3> <p>On the library servers, it is a routine in<spanstyle='font-family:"Courier New"'> lond </span>that does the authentication. It checks if this is the users homeserver, checks the password, and answers<spanstyle='font-family:"Courier New"'> </span>with <span style='font-family:"Courier New"'>unknown_user, authorized </span>or<span style='font-family:"Courier New"'> non_authorized. </span></p> <p class=MsoHeader>Determination if this is the users homeserver is done by the presence of his or her password file in</p> <p><span style='font-family:"Courier New"'> /home/httpd/lonUsers/<i>domain</i></span><span style='font-family:"Courier New"'>/<i>1.char</i></span><spanstyle='font-family:"Courier New"'>/<i>2.char</i></span><span style='font-family:"Courier New"'>/<i>3.char</i></span><span style='font-family:"Courier New"'>/<i>username</i></span><spanstyle='font-family:"Courier New"'>/passwd</span></p> <p class=MsoHeader>for example</p> <p><span style='font-family:"Courier New"'> /home/httpd/lonUsers/msu/s/m/i/smith/passwd</span></p> <p>The password is stored in the format <span style='font-family:"Courier New"'>mechanism:info, </span>where mechanism can currently be <spanstyle='font-family:"Courier New"'>unix</span>, <span style='font-family:"Courier New"'>krb4</span> or <span style='font-family:"Courier New"'>internal</span>. For <spanstyle='font-family:"Courier New"'>krb4</span>, the <span style='font-family:"Courier New"'>info</span> is the Kerberos domain, for <span style='font-family:"Courier New"'>internal</span> it is the crypt password itself. <spanstyle='font-family:"Courier New"'>unix</span> simply authenticates against <spanstyle='font-family:"Courier New"'>/etc/passwd</span>. </p> <h3><a name="_Toc514840851"></a><a name="_Toc421867051">Environment</a></h3> <p>The access handlers coming early in the Apache request cycle also set up the session environment. The cookie received from the web client is a pointer to the session profiles, which are stored in a directory for temporary files <span style='font-family:"Courier New"'>(/home/httpd/lonIDs/</span>). </p> <p class=H5><span style='layout-grid-mode:both'>Standard Components</span></p> <p>These are the standard components of the environment added by Apache and the shell.</p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>AUTH_TYPE ---- Basic</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>DOCUMENT_ROOT ---- /home/httpd/html</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>GATEWAY_INTERFACE ---- CGI-Perl/1.1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_ACCEPT ---- image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_ACCEPT_CHARSET ---- iso-8859-1,*,utf-8</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_ACCEPT_ENCODING ---- gzip</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_ACCEPT_LANGUAGE ---- en,pdf</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_CONNECTION ---- Keep-Alive</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_COOKIE ---- SITESERVER=ID=cbc6695505253a2ff0e7bb7110574d90; lonID=kortemey_990461714_msu_msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_HOST ---- zaphod.lite.msu.edu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_REFERER ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>HTTP_USER_AGENT ---- Mozilla/4.75 (Macintosh; U; PPC)</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>MOD_PERL ---- mod_perl/1.21</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>PATH ---- /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bi¤</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>QUERY_STRING ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>REMOTE_ADDR ---- 35.8.63.7</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>REMOTE_PORT ---- 1844</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>REMOTE_USER ---- lonadm</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>REQUEST_METHOD ---- GET</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>REQUEST_URI ---- /adm/test</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SCRIPT_FILENAME ---- /home/httpd/html/adm/test</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SCRIPT_NAME ---- /adm/test</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SERVER_ADDR ---- 35.8.63.51</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SERVER_ADMIN ---- korte@lite.msu.edu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SERVER_NAME ---- zaphod.lite.msu.edu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SERVER_PORT ---- 80</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SERVER_PROTOCOL ---- HTTP/1.0</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SERVER_SIGNATURE ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>SERVER_SOFTWARE ---- Apache/1.3.9 (Unix) (Red Hat/Linux) mod_perl/1.21</span></p> <p class=H5><span style='layout-grid-mode:both'>Resource Access Control</span></p> <p>The following values are set by traceroute at the initialization of the course and are used by access handlers to check if a resource can be served to a user.</p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.cond.msu_12679c3ed543a25msul1.0 ---- 0</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.cond.msu_12679c3ed543a25msul1.1 ---- 0</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1. ---- &:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp ---- &welcome267.htm:1&welcomelbs267.htm:0&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/applist/Spectrum ---- &s.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/applist/chain ---- &chain.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/applist/coulomb ---- &orbit.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/applist/induct ---- &faraday.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/conversions ----</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>&conv_area.htm:1&prefixes.htm:1&conv_power.htm:1&intro.htm:1&conv_temperature.htm:1&conv_time.htm:1&conv_velocity.htm:1&conversions.sequence:1&conv_length.htm:1&conv_mass.htm:1&conv_pressure.htm:1&conv_volume.htm:1&conv_energy.htm:1&conv_angle.htm:1&sibaseunits.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap13 ---- &cd371.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap16 ----</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>&cd427.htm:1&cd424.htm:1&Stable.htm:1&cd421.htm:1&Constants.htm:1&cd425.htm:1&cd422.htm:1&kap16.sequence:1&cd426.htm:1&cd423.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap17 ----</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>&cd436.htm:1&kap17.sequence:1&cd433.htm:1&cd430.htm:1&cd437.htm:1&cd434.htm:1&cd428.htm:1&cd431.htm:1&cd435.htm:1&cd429.htm:1&geometry.htm:1&cd432.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap17/calculus ---- &calc.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap18 ----</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>&RR440.htm:1&RR449b.htm:1&RR446b.htm:1&cd473.htm:1&RR453.htm:1&RR447.htm:1&RR443b.htm:1&RR449a.htm:1&RR450.htm:1&RR452a.htm:1&RR444.htm:1&RR446a.htm:1&sum18a.htm:1|1&RR441.htm:1&RR443a.htm:1&eField.htm:1&RR454.htm:1&RR444b.htm:1&RR448.htm:1&RR447app.htm:1&RR451.htm:1&RR445.htm:1&RR453a.htm:1&kap18.sequence:1&RR439.htm:1&RR447a.htm:1&RR442.htm:1&RR450a.htm:1&RR444a.htm:1&RR448b.htm:1&RR445newch.htm:1&RR4460app.htm:1&RR455.htm:1&RR441a.htm:1&RR449.htm:1&RR452.htm:1&cd438.htm:1&RR446.htm:1&RR454a.htm:1&sum18.htm:1|1&RR446c.htm:1&RR448a.htm:1&RR451a.htm:1&RR443.htm:1&RR445answer.htm:0&RR445a.htm:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap18/demo ----</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>&vid440.htm:0&vid440sm.htm:0&vid449.htm:0&vid449-a.htm:0&vid441.htm:0&vid449sm.htm:0&vid455.htm:0&egun.htm:0&egunsm.htm:0&vid441sm.htm:0&vid449-asm.htm:0&vid455sm.htm:0&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap18/problems ----</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>&cd460b.problem:1&cd458.problem:1&cd462.problem:1&cd457.problem:1&cd461.problem:1&cd460.problem:1&cd464.problem:1&cd459.problem:1&cd463.problem:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap18a ---- &kap18a.sequence:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>acc.res.msu_12679c3ed543a25msul1.msu/mmp/kap18a/problems ----</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>&cd465.problem:1&cd472.problem:1&cd466.problem:1&cd467.problem:1&cd470.problem:1&cd468.problem:1&cd471.problem:1&cd469.problem:1&</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'><i> etc for all resources in the course </i></span></p> <p class=H5><span style='layout-grid-mode:both'>Browser Information</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>browser.mathml ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>browser.os ---- mac</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>browser.type ---- netscape</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>browser.version ---- 4.75</span></p> <p class=H5><span style='layout-grid-mode:both'>Cached Information about Courses and their Description</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a16msul1.description ---- lbs267L Lab SS01</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a16msul1.domain ---- msu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a16msul1.home ---- msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a16msul1.last_cache ---- 990461725</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a16msul1.num ---- 12679c3ed543a16msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a16msul1.url ---- msu/mmp/lbs267l.sequence</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a25msul1.description ---- lbs267 Lecture SS01</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a25msul1.domain ---- msu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a25msul1.home ---- msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a25msul1.last_cache ---- 990461728</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a25msul1.num ---- 12679c3ed543a25msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a25msul1.url ---- msu/mmp/lbs267.sequence</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a37msul1.description ---- Demo Course</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a37msul1.domain ---- msu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a37msul1.home ---- msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a37msul1.last_cache ---- 990461725</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a37msul1.num ---- 12679c3ed543a37msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>course.msu_12679c3ed543a37msul1.url ---- msu/korte/demo.sequence</span></p> <p class=H5><span style='layout-grid-mode:both'>Information Imported from the Environment Database File of the User</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>environment.favorite.cake ---- Cheese Cake</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>environment.favorite.color ---- green</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>environment.firstname ---- Gerd</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>environment.id ---- z12345678</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>environment.lastname ---- Kortemeyer</span></p> <p><b>Information about the Request</b></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>httpref./res/msu/mmp/ ---- /res/msu/mmp/welcome267.htm</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.ambiguous ---- adm/pages/index.html</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.course.fn ---- /home/httpd/perl/tmp/kortemey_msu_12679c3ed543a25msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.course.id ---- msu_12679c3ed543a25msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.course.sec ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.course.uri ---- msu/mmp/lbs267.sequence</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.filename ---- /home/httpd/html/adm/test</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.host ---- zaphod.lite.msu.edu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.role ---- cc./msu/12679c3ed543a25msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>request.state ---- published</span></p> <p class=H5><span style='layout-grid-mode:both'>Information about the User</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.domain ---- msu</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.environment ---- /home/httpd/lonIDs/kortemey_990461714_msu_msul1.id</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.home ---- msul1</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.login.time ---- 990461714</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.name ---- kortemey</span></p> <p class=H5><span style='layout-grid-mode:both'>Information about User Roles and Privileges</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.au./msu/./ ---- :sma&F:gan&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.au./msu/./msu/ ---- :cca&IK:are&F:bre&F:cre&F:ere&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.ca./msu/korte./ ---- :sma&F:gan&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.ca./msu/korte./msu/ ---- :are&F:bre&F:cre&F:ere&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.ca./msu/korte./msu/korte ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a16msul1./ ---- :sma&F:bre&F:mcr&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a16msul1./msu/ ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a16msul1./msu/12679c3ed543a16msul1 ---- :opa&F:srm&F:gan&F:are&F:ccr&IK:cep&IK:cta&IK:cre&F:cst&IK:cin&IK:ere&F:vgr&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a25msul1./ ---- :sma&F:bre&F:mcr&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a25msul1./msu/ ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a25msul1./msu/12679c3ed543a25msul1 ---- :opa&F:srm&F:gan&F:cta&IK:cep&IK:ccr&IK:are&F:cin&IK:cst&IK:cre&F:ere&F:vgr&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a37msul1./ ---- :sma&F:mcr&F:bre&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a37msul1./msu/ ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cc./msu/12679c3ed543a37msul1./msu/12679c3ed543a37msul1 ---- :opa&F:srm&F:gan&F:are&F:ccr&IK:cep&IK:cta&IK:cre&F:cst&IK:cin&IK:ere&F:vgr&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cm./ ---- :sma&F:mcr&F:gan&F:bre&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cm./msu/ ---- :mau&F:cca&IK:cad&UIK:ccc&U:cst&UIK:cdg&UIK:are&F:cli&UIK:cta&UIK:cep&UIK:ccr&UIK:bre&F:cau&U:cre&F:cin&UIK:ere&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cm./msu/12679c3ed543a16msul1 ---- :opa&F:srm&F:gan&F:are&F:ccr&IK:cep&IK:cta&IK:cre&F:cst&IK:cin&IK:ere&F:vgr&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cm./msu/12679c3ed543a25msul1 ---- :opa&F:srm&F:gan&F:are&F:ccr&IK:cep&IK:cta&IK:cre&F:cst&IK:cin&IK:ere&F:vgr&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cm./msu/12679c3ed543a37msul1 ---- :opa&F:cst&IK:vgr&F:srm&F:gan&F:are&F:ccr&IK:cep&IK:cta&IK:cre&F:cin&IK:ere&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.cm./msu/korte ---- </span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.dc./msu/./ ---- :sma&F</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.priv.dc./msu/./msu/ ---- :mau&F:cad&UIK:ccr&UIK:cep&UIK:cta&UIK:cli&UIK:ccc&U:cau&U:cst&UIK:cin&UIK:cdg&UIK</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.role.au./msu/ ---- 964531839.0</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.role.ca./msu/korte ---- .</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.role.cc./msu/12679c3ed543a16msul1 ---- 964531839.0</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.role.cc./msu/12679c3ed543a25msul1 ---- 964531839.0</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.role.cc./msu/12679c3ed543a37msul1 ---- 964531839.0</span></p> <p><span style='font-size:8.0pt;font-family:"Courier New"'>user.role.dc./msu/ ---- 964531839.0</span></p> <h2> </h2> <h3><a name="_Toc421867052">Handler Reference: LON-CAPA and the 77 Web Perl Modules</a></h3> <p><i>Scott Harrison, freeware volunteer, sharrison@sourceforge.net</i><spanstyle='font-style:normal'> </span></p> <p>LON-CAPA provides many different web services for coordinating online educational interactions. Currently, these web services are made available by 77 different perl modules. The invocation of these perl modules is many times due to the URI format based on entries inside <tt><span style='font-family:"Courier New"'>/etc/httpd/conf/loncapa_apache.conf</span></tt>. </p> <p>Throughout this technical manual, various web perl modules are described in detail. Here is a summary of all the 77 web perl modules: </p> <table border=1 cellpadding=0> <tr> <td class="Normal"> <p align=center style='text-align:center'><b>Name/Location</b></p> </td> <td class="Normal"> <p align=center style='text-align:center'><b>Description</b></p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonwrapper.pm<br> TARGET: home/httpd/lib/perl/Apache/lonwrapper.pm</p> </td> <td class="Normal"> <p>Wrapper for external and binary files as standalone resources. Edit handler for rat maps; TeX content handler.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/publisher/loncfile.pm<br> TARGET: home/httpd/lib/perl/Apache/loncfile.pm</p> </td> <td class="Normal"> <p>Provides web-based functionality for file copy, rename, mkdir, etc, in the construction space menu.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonstatistics.pm<br> TARGET: home/httpd/lib/perl/Apache/lonstatistics.pm</p> </td> <td class="Normal"> <p>Handler to show statistics on solving LON-CAPA problems.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/publisher/londiff.pm<br> TARGET: home/httpd/lib/perl/Apache/londiff.pm</p> </td> <td class="Normal"> <p>Handler to show difference between two files.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/publisher/lonupload.pm<br> TARGET: home/httpd/lib/perl/Apache/lonupload.pm</p> </td> <td class="Normal"> <p>Handler to upload files through browser into construction space.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/essayresponse.pm<br> TARGET: home/httpd/lib/perl/Apache/essayresponse.pm</p> </td> <td class="Normal"> <p>Handler to evaluate essay (ungraded) style responses.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/externalresponse.pm<br> TARGET: home/httpd/lib/perl/Apache/externalresponse.pm</p> </td> <td class="Normal"> <p>Handler to evaluate externally graded responses.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/loncapagrade.pm<br> TARGET: home/httpd/lib/perl/Apache/loncapagrade.pm</p> </td> <td class="Normal"> <p>Handler to evaluate externally graded responses.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/publisher/lonpubdir.pm<br> TARGET: home/httpd/lib/perl/Apache/lonpubdir.pm</p> </td> <td class="Normal"> <p>Handler to publish directories.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/publisher/lonretrieve.pm<br> TARGET: home/httpd/lib/perl/Apache/lonretrieve.pm</p> </td> <td class="Normal"> <p>Handler to retrieve old versions from resource space.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/edit.pm<br> TARGET: home/httpd/lib/perl/Apache/edit.pm</p> </td> <td class="Normal"> <p>Helper functions when in homework edit mode.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonmeta.pm<br> TARGET: home/httpd/lib/perl/Apache/lonmeta.pm</p> </td> <td class="Normal"> <p>Metadata display handler.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonambiguous.pm<br> TARGET: home/httpd/lib/perl/Apache/lonambiguous.pm</p> </td> <td class="Normal"> <p>Handler to resolve ambiguous file locations.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonratparms.pm<br> TARGET: home/httpd/lib/perl/Apache/lonratparms.pm</p> </td> <td class="Normal"> <p>Handler to set resource parameters inside of the RAT based on metadata.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonsequence.pm<br> TARGET: home/httpd/lib/perl/Apache/lonsequence.pm</p> </td> <td class="Normal"> <p>Handler for showing sequence objects of educational resources.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/loncreatecourse.pm<br> TARGET: home/httpd/lib/perl/Apache/loncreatecourse.pm</p> </td> <td class="Normal"> <p>Allows domain coordinators to create new courses and assign course coordinators.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/loncreateuser.pm<br> TARGET: home/httpd/lib/perl/Apache/loncreateuser.pm</p> </td> <td class="Normal"> <p>Allows users to within their own privileges create/edit users and give them roles.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonchart.pm<br> TARGET: home/httpd/lib/perl/Apache/lonchart.pm</p> </td> <td class="Normal"> <p>Produces simple LectureOnline-like student assessment performance chart</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/loncommon.pm<br> TARGET: home/httpd/lib/perl/Apache/loncommon.pm</p> </td> <td class="Normal"> <p>Makes a table out of the previous attempts. Inputs result_from_symbread, user, domain, home_server, course_id.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/grades.pm<br> TARGET: home/httpd/lib/perl/Apache/grades.pm</p> </td> <td class="Normal"> <p>Handles the viewing of grades.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/imageresponse.pm<br> TARGET: home/httpd/lib/perl/Apache/imageresponse.pm</p> </td> <td class="Normal"> <p>Coordinates the response to clicking an image.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/optionresponse.pm<br> TARGET: home/httpd/lib/perl/Apache/optionresponse.pm</p> </td> <td class="Normal"> <p>Handles tags associated with showing a list of options.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/outputtags.pm<br> TARGET: home/httpd/lib/perl/Apache/outputtags.pm</p> </td> <td class="Normal"> <p>Handles tags associated with output. Seems to relate to due dates of the assignment.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lontest.pm<br> TARGET: home/httpd/lib/perl/Apache/lontest.pm</p> </td> <td class="Normal"> <p>Used for debugging and testing the LON-CAPA system.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/radiobuttonresponse.pm<br> TARGET: home/httpd/lib/perl/Apache/radiobuttonresponse.pm</p> </td> <td class="Normal"> <p>Handles multiple-choice style responses.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonassignments.pm<br> TARGET: home/httpd/lib/perl/Apache/lonassignments.pm</p> </td> <td class="Normal"> <p>Handles processing of assignments.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/loncommunicate.pm<br> TARGET: home/httpd/lib/perl/Apache/loncommunicate.pm</p> </td> <td class="Normal"> <p>Will be the access handler to email sending, as well as the planned chatrooms, etc.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonerrorhandler.pm<br> TARGET: home/httpd/lib/perl/Apache/lonerrorhandler.pm</p> </td> <td class="Normal"> <p>Handles errors.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonevaluate.pm<br> TARGET: home/httpd/lib/perl/Apache/lonevaluate.pm</p> </td> <td class="Normal"> <p>Handles evaluation.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonfeedback.pm<br> TARGET: home/httpd/lib/perl/Apache/lonfeedback.pm</p> </td> <td class="Normal"> <p>Handles feedback from students to instructors and system administrators. Provides a screenshot of the current resource, as well as previous attempts if the resource was a homework. Used by lonmsg.pm.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonnavmaps.pm<br> TARGET: home/httpd/lib/perl/Apache/lonnavmaps.pm</p> </td> <td class="Normal"> <p>Handles navigational maps.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonpreferences.pm<br> TARGET: home/httpd/lib/perl/Apache/lonpreferences.pm</p> </td> <td class="Normal"> <p>Handles user preferences associated with customizing the online LON-CAPA educational environment.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonprintout.pm<br> TARGET: home/httpd/lib/perl/Apache/lonprintout.pm</p> </td> <td class="Normal"> <p>Handles the production of printable files and resources.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonsearchcat.pm<br> TARGET: home/httpd/lib/perl/Apache/lonsearchcat.pm</p> </td> <td class="Normal"> <p>Handles a searchable catalogue.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/londropadd.pm<br> TARGET: home/httpd/lib/perl/Apache/londropadd.pm</p> </td> <td class="Normal"> <p>Allows course coordinators to upload courselists in different formats, and automatically create users (if they do not exist already), assign them the role of student in a course, and add them to the classlist.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonmsg.pm<br> TARGET: home/httpd/lib/perl/Apache/lonmsg.pm</p> </td> <td class="Normal"> <p>lonmsg.pm has several functions to send and receive internal messages. author_res_msg - send message to resource author. user_crit_msg - send a critical message to a user. A critical message will require acknowledgment by the recipient and the sender will be notified. user_crit_received - routine to trigger acknowledgment. statuschange - change the status of a message (read, replied, forwarded, etc). The handler also displays messages, has routines to reply, etc.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/hint.pm<br> TARGET: home/httpd/lib/perl/Apache/hint.pm</p> </td> <td class="Normal"> <p>This handler coordinates the delivery of hints to students working on LON-CAPA problems and assignments.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonspreadsheet.pm<br> TARGET: home/httpd/lib/perl/Apache/lonspreadsheet.pm</p> </td> <td class="Normal"> <p>Spreadsheets are completely web-based. They exist on the level of a whole course, a student, and individual assessments.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonparmset.pm<br> TARGET: home/httpd/lib/perl/Apache/lonparmset.pm</p> </td> <td class="Normal"> <p>Handler to resolve ambiguous file locations</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/publisher/lonconstruct.pm<br> TARGET: home/httpd/lib/perl/Apache/lonconstruct.pm</p> </td> <td class="Normal"> <p>Page wrapper for handling construction space.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/publisher/lonpublisher.pm<br> TARGET: home/httpd/lib/perl/Apache/lonpublisher.pm</p> </td> <td class="Normal"> <p>Publishes an LON-CAPA educational resource complete with metadata (authorship, language, copyright, creation date, etc).</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonmenu.pm<br> TARGET: home/httpd/lib/perl/Apache/lonmenu.pm</p> </td> <td class="Normal"> <p>Has routines which control the remote control.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonpageflip.pm<br> TARGET: home/httpd/lib/perl/Apache/lonpageflip.pm</p> </td> <td class="Normal"> <p>Deals with forward, backward, and other page flips.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonratedt.pm<br> TARGET: home/httpd/lib/perl/Apache/lonratedt.pm</p> </td> <td class="Normal"> <p>Builds up frame set and loads in the right thing.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/html/res/adm/pages/homeworkmenu.html<br> TARGET: home/httpd/html/res/adm/pages/homeworkmenu.html</p> </td> <td class="Normal"> <p>Homework remote control.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/html/res/adm/pages/annotator/admannotations.pm<br> TARGET: home/httpd/lib/perl/Apache/admannotations.pm</p> </td> <td class="Normal"> <p>This will take annotations and then plug them into a page.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/html/res/adm/pages/bookmarkmenu/admbookmarks.pm<br> TARGET: home/httpd/lib/perl/Apache/admbookmarks.pm</p> </td> <td class="Normal"> <p>This will take bookmarks and get/write/display them for the LON-CAPA user interface.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonratsrv.pm<br> TARGET: home/httpd/lib/perl/Apache/lonratsrv.pm</p> </td> <td class="Normal"> <p>Handler that takes output from RAT and stores it on disk. Handles the upper hidden frame of the added window that comes up in RAT. (3 frames come up in RAT server, code, and output. This module handles server connection.)</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonpage.pm<br> TARGET: home/httpd/lib/perl/Apache/lonpage.pm</p> </td> <td class="Normal"> <p>bundles pages into one page</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: rat/lonuserstate.pm<br> TARGET: home/httpd/lib/perl/Apache/lonuserstate.pm</p> </td> <td class="Normal"> <p>compile course into binary data structure (in loncom/rat)</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/lontex.pm<br> TARGET: home/httpd/lib/perl/Apache/lontex.pm</p> </td> <td class="Normal"> <p>Handler for tex files (somewhere in modules)</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/lontexconvert.pm<br> TARGET: home/httpd/lib/perl/Apache/lontexconvert.pm</p> </td> <td class="Normal"> <p>Access to tth/ttm</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/lonxml.pm<br> TARGET: home/httpd/lib/perl/Apache/lonxml.pm</p> </td> <td class="Normal"> <p>XML Parsing Module</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/lonplot.pm<br> TARGET: home/httpd/lib/perl/Apache/lonplot.pm</p> </td> <td class="Normal"> <p>XML-based plotter of graphs</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/style.pm<br> TARGET: home/httpd/lib/perl/Apache/style.pm</p> </td> <td class="Normal"> <p>Style Parsing Module</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/londefdef.pm<br> TARGET: home/httpd/lib/perl/Apache/londefdef.pm</p> </td> <td class="Normal"> <p>Tags Default Definition Module</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/run.pm<br> TARGET: home/httpd/lib/perl/Apache/run.pm</p> </td> <td class="Normal"> <p>used to prevent poorly written problems from causing lingering after effects</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/scripttag.pm<br> TARGET: home/httpd/lib/perl/Apache/scripttag.pm</p> </td> <td class="Normal"> <p>implements <script>, <scriptlib>, <parserlib>, and <import></p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/randomlabel.pm<br> TARGET: home/httpd/lib/perl/Apache/randomlabel.pm</p> </td> <td class="Normal"> <p>Interface for producing applet code which randomizes the labelling of an image.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/lonhomework.pm<br> TARGET: home/httpd/lib/perl/Apache/lonhomework.pm</p> </td> <td class="Normal"> <p>handles requests for output, evaluation, and alteration of a homework resource</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/inputtags.pm<br> TARGET: home/httpd/lib/perl/Apache/inputtags.pm</p> </td> <td class="Normal"> <p>produces HTML input tags (<INPUT>) for rendering homework resources</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/structuretags.pm<br> TARGET: home/httpd/lib/perl/Apache/structuretags.pm</p> </td> <td class="Normal"> <p>produces HTML tags necessary for structuring the presentation of homework resources</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/response.pm<br> TARGET: home/httpd/lib/perl/Apache/response.pm</p> </td> <td class="Normal"> <p>defines different types of responses given to student as well as syntax for producing response values</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/caparesponse/caparesponse.pm<br> TARGET: home/httpd/lib/perl/Apache/caparesponse.pm</p> </td> <td class="Normal"> <p>handles request to the CAPA homework processing engine</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/xml/Safe.pm<br> TARGET: home/httpd/lib/perl/Safe.pm</p> </td> <td class="Normal"> <p>Meant to safely substitute for CPAN version of Safe. Allows for safely executing embedded perl comands in a way that does not threaten the operating system.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/localauth.pm<br> TARGET: home/httpd/lib/perl/localauth.pm</p> </td> <td class="Normal"> <p>Local authentication mechanism (meant to be customized).</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/lonacc.pm<br> TARGET: home/httpd/lib/perl/Apache/lonacc.pm</p> </td> <td class="Normal"> <p>(This module, like loncacc.pm also authenticates with cookies.) lonacc.pm coordinates access to a wide range of administrative-type functions (e.g. roles, logout, annotations, and bookmarks) as well as coordinating access to educational resources.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/lonracc.pm<br> TARGET: home/httpd/lib/perl/Apache/lonracc.pm</p> </td> <td class="Normal"> <p>access handler for file transfers</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/loncacc.pm<br> TARGET: home/httpd/lib/perl/Apache/loncacc.pm</p> </td> <td class="Normal"> <p>This module provides access to an educational resource construction area. This module is invoked by the URL-related pattern syntax LocationMatch "^/priv.*" or LocationMatch "^/\~.*". Authentication of user identity is coordinated through cookies. The abbreviation "cacc" corresponds to "construction-space access"). If the cookie handle is invalid, then this module returns a forbidden status and makes appropriate log entries. If the cookie handle is valid, status is determined to be okay (and, for the "priv"-type access, the resource is delivered by the lonconstruct module).</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/lonauth.pm<br> TARGET: home/httpd/lib/perl/Apache/lonauth.pm</p> </td> <td class="Normal"> <p>authenticate, set up session environment</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/lonlogin.pm<br> TARGET: home/httpd/lib/perl/Apache/lonlogin.pm</p> </td> <td class="Normal"> <p>login screen</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/lonlogout.pm<br> TARGET: home/httpd/lib/perl/Apache/lonlogout.pm</p> </td> <td class="Normal"> <p>logout</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/lonnet/perl/lonrep.pm<br> TARGET: home/httpd/lib/perl/Apache/lonrep.pm</p> </td> <td class="Normal"> <p>replication</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/auth/lonroles.pm<br> TARGET: home/httpd/lib/perl/Apache/lonroles.pm</p> </td> <td class="Normal"> <p>This perl handling module reads in the available roles available for a LON-CAPA user (different courses, different privileges, etc) and produces a form-element HTML page which allows the user to select which role he wishes to exercise in the LON-CAPA system. For instance, a user may want to select between being a student in a thermodynamics physics course or a teaching assistant for an introductory calculus class.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/lonindexer.pm<br> TARGET: home/httpd/lib/perl/Apache/lonindexer.pm</p> </td> <td class="Normal"> <p>cross server filesystem browser</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/interface/groupsort.pm<br> TARGET: home/httpd/lib/perl/Apache/groupsort.pm</p> </td> <td class="Normal"> <p>Implements a second phase of importing multiple resources into the RAT. Allows for reordering the sequence of resources.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/lonnet/perl/lonnet.pm<br> TARGET: home/httpd/lib/perl/Apache/lonnet.pm</p> </td> <td class="Normal"> <p>This file is an interface to the lonc processes of the LON-CAPA network as well as set of elaborated functions for handling information necessary for navigating through a given cluster of LON-CAPA machines within a domain. There are over 40 specialized functions in this module which handle the reading and transmission of metadata, user information (ids, names, environments, roles, logs), file information (storage, reading, directories, extensions, replication, embedded styles and descriptors), educational resources (course descriptions, section names and numbers), url hashing (to assign roles on a url basis), and translating abbreviated symbols to and from more descriptive phrases or explanations.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/lectureonline.lcpm<br> TARGET: home/httpd/html/res/adm/includes/lectureonline.lcpm</p> </td> <td class="Normal"> <p>Intended for providing perl functions for the <script></script> environment in a problem that was converted from lectureonline.</p> </td> </tr> <tr> <td class="Normal"> <p>SOURCE: loncom/homework/default_homework.lcpm<br> TARGET: home/httpd/html/res/adm/includes/default_homework.lcpm</p> </td> <td class="Normal"> <p>Provides many functions for the <script> environment in a .problem. Functions are documented in CVS:loncapa/doc/homework/homework5.html.</p> </td> </tr> </table> </div></div></body></html>
Index: doc/gutshtml/handout.htm
+++ doc/gutshtml/handout.htm
<html><head><meta name=Title content=" "><meta http-equiv=Content-Type content="text/html; charset=macintosh"><title> </title><style><!--.MsoToc1 {font-size:10.0pt; font-family:Times; text-transform:uppercase; font-weight:bold;}.MsoToc2 {font-size:10.0pt; font-family:Times; font-variant:small-caps;}.MsoToc3 {font-size:10.0pt; font-family:Times; font-style:italic;}.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;}.Preformatted {tab-stops:0in 47.95pt 95.9pt 143.85pt 191.8pt 239.75pt 287.7pt 335.65pt 383.6pt 431.55pt 479.5pt; font-size:10.0pt; font-family:"Courier New"; layout-grid-mode:line;}.H5 {font-size:10.0pt; font-family:"Times New Roman"; layout-grid-mode:line; font-weight:bold;}.Section1 {page:Section1;}.Section2 {page:Section2;}.Section3 {page:Section3;}.Section4 {page:Section4;}.Section5 {page:Section5;}.Section6 {page:Section6;}.Section7 {page:Section7;}.Section8 {page:Section8;}.Section9 {page:Section9;}.Section10 {page:Section10;}.Section11 {page:Section11;}.Section12 {page:Section12;}.Section13 {page:Section13;}.Section14 {page:Section14;}.Section15 {page:Section15;}.Section16 {page:Section16;}.Section17 {page:Section17;}.Section18 {page:Section18;}.Section19 {page:Section19;}.Section20 {page:Section20;}.Section21 {page:Section21;}.Section22 {page:Section22;}--></style></head><body bgcolor=#FFFFFF link=blue vlink=purple class="Normal" lang=EN-US><div class=Section1> <h4><span style='font-size:36.0pt'>The Guts of LON-CAPA</span></h4> <h4>Workshop</h4> <p><span style='font-size:14.0pt'>Michigan State University</span></p> <p><span style='font-size:14.0pt'>June 10<sup>th</sup>-12<sup>th</sup>, 2002</span></p> <p align=center style='text-align:center'><img width=243height=332 id="_x0000_i1025" src="handout_files/image001.jpg"></p> <p align=right style='text-align:right'>This project is funded in part by the</p> <p align=right style='text-align:right'>National Science Foundation under ITR 0085921,</p> <p align=right style='text-align:right'>with additional support by the</p> <p align=right style='text-align:right'>Andrew W. Mellon and Alfred P. Sloan foundations.</p> <br clear=ALLstyle='page-break-before:always'> <p><span style='font-size:18.0pt'><ahref="http://www.lon-capa.org/">http://www.lon-capa.org/</a></span></p> <p>(517) 432-5468</p> <p>Guy Albertelli, <a href="mailto:albertel@msu.edu">albertel@msu.edu</a></p> <p>Gerd Kortemeyer, <a href="mailto:korte@lon-capa.org">korte@lon-capa.org</a></p> <p>Scott Harrison, freeware volunteer, <ahref="mailto:sharrison@sourceforge.net">sharrison@sourceforge.net</a></p> <p>Project Manager: Helen Keefe, <ahref="mailto:helen@loncapa.org">helen@loncapa.org</a></p> <p>LON-CAPA Coordinator: Felicia Berryman, <ahref="mailto:felicia@lon-capa.org">felicia@lon-capa.org</a></p> <p>Installation site: <a href="http://install.lon-capa.org/">http://install.lon-capa.org/</a></p> <p>Mailing lists: <a href="http://mail.lon-capa.org/">http://mail.lon-capa.org/</a></p> <p>User help: <a href="http://help.lon-capa.org/">http://help.lon-capa.org/</a></p> <p>Bugs and enhancements: <a href="http://bugs.lon-capa.org/">http://bugs.lon-capa.org/</a></p> <span style='font-size:14.0pt;font-family:"Times New Roman"'><br clear=ALLstyle='page-break-before:always'> </span> <h1><a name="_Toc514840836"></a><a name="_Toc421867038">Day 1</a></h1></div><br clear=ALLstyle='page-break-before:auto'><div class=Section2><a href="Session%20One">Session One</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section3><a href="Session%20Two">Session Two</a> <div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'><p style='border:none;padding:0in'><br clear=ALLstyle='page-break-before:auto'> </p> </div></div><div class=Section4><a href="Session%20Three">Session Three</a> </div><br clear=ALLstyle='page-break-before:auto'><div class=Section5><a href="Session%20Four">Session Four</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section6><a href="Session%20Five">Session Five</a><span style='font-size:14.0pt;font-family:"Times New Roman"'><brclear=ALL style='page-break-before:always'> </span> <h1><a name="_Toc421867082">Day 2</a></h1></div><br clear=ALLstyle='page-break-before:auto'><div class=Section7><a href="Session%20On1">Session On1</a> </div><div class=Section8><a href="Session%20Tw1">Session Tw1</a> <br clear=ALLstyle='page-break-before:auto'></div><div class=Section9><a href="Session%20Thre1">Session Thre1</a> <div style='border:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt'> <a href="Session%20Fou1">Session Fou1</a></div></div><p><a href="Session%20Fiv1">Session Fiv1</a></p><p><span style='font-size:14.0pt;font-family:"Times New Roman"'><brclear=ALL style='page-break-before:always'> </span> </p><div class=Section11><h1><a name="_Toc421867125">Day 3</a></h1></div><br clear=ALLstyle='page-break-before:auto'><div class=Section12><a href="Session%20On2">Session On2</a> <br clear=ALLstyle='page-break-before:auto'></div><div class=Section13><a href="Session%20Tw2">Session Tw2</a> <br clear=ALLstyle='page-break-before:auto'></div><div class=Section14><a href="Session%20Thre2">Session Thre2</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section15><a href="Session%20Fou2">Session Fou2</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section16> <p><a href="Session%20Fiv2">Session Fiv2</a> </p> <p><br clear=ALLstyle='page-break-before:auto'> </p></div><div class=Section17><a href="Different%20Types%20of%20LON">Different Types of LON</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section18><a href="Hardware%20specification%20for%20LON">Hardware specification for LON</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section19><a href=LON>LON</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section20><a href=Configuration>Configuration</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section21><a href="Fast%20Installation">Fast Installation</a></div><br clear=ALLstyle='page-break-before:auto'><div class=Section22><a href=Glossary>Glossary</a> </div></body></html>
Index: doc/gutshtml/SessionFou1_files/filelist.xml
+++ doc/gutshtml/SessionFou1_files/filelist.xml
<xml xmlns:o="urn:schemas-microsoft-com:office:office"> <o:MainFile HRef="::Session Fou1"/> <o:File HRef="image001.png"/> <o:File HRef="image002.jpg"/> <o:File HRef="image003.gif"/> <o:File HRef="image004.pct"/> <o:File HRef="image005.png"/> <o:File HRef="filelist.xml"/></xml>
Index: doc/gutshtml/SessionFou1_files/image004.pct
+++ doc/gutshtml/SessionFou1_files/image004.pct
u t : g u t s : g u t s h t m l : S e s s i o n F o u 1 _ f i l e s : i m a g e 0 0 4 . p c t пK _ M| M|Mx ^K_ E C e MPM|Mx ^M0E wk]L _ k @ MM|< vT $ . ^ . R.MR. L !q Lj 0 L1 1 LM! R.P$ L_ Ԩ P$^ 'H H H
# /Access_Softek_context save def/dict_count countdictstack def/op_count count 1 sub def/cxy [ currentpoint ] def66 dict begin/showpage {} def0 setgray 0 setlinecap1 setlinewidth 0 setlinejoin10 setmiterlimit [] 0 setdash/languagelevel where{pop languagelevel1 ne {false setstrokeadjust false setoverprint } if } if 0 792 translate 1 -1 scale cxy 0 get 792 cxy 1 get sub translate " q/exy [ currentpoint ] defexy 0 get cxy 0 get sub 682 div exy 1 get cxy 1 get sub 384 div scale0 -384 translate " 2 . *Title: xmlparse.eps *+Creator: fig2dev Version 3.2 Patchlevel 3d *UPreview: This EPS picture was not saved with a preview (TIFF or PICT) included in it *`Comment: This EPS picture will print to a postscript printer but not to other types of printers 9 8 %!PS-Adobe-2.0 EPSF-2.0
%%Title: xmlparse.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3d
%%CreationDate: Wed Jun 5 19:58:38 2002
%%For: albertel@annarbor.albertelli.com ()
%%BoundingBox: 0 0 682 384
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 384 moveto 0 0 lineto 682 0 lineto 682 384 lineto closepath clip newpath
-13.4 389.1 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
10 setmiterlimit
0.06299 0.06299 sc
%
% Fig objects follow
%
% Polyline
7.500 slw
n 10170 1215 m 11025 1215 l 11025 1620 l 10170 1620 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
10350 1485 m
gs 1 -1 sc (recurse) col0 sh gr
% Polyline
n 8370 2340 m 9135 2340 l 9135 2745 l 8370 2745 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
8505 2610 m
gs 1 -1 sc (callsub) col0 sh gr
% Polyline
n 225 360 m 990 360 l 990 810 l 225 810 l
cp gs col0 s gr
% Polyline
n 270 1440 m 2295 1440 l 2295 2250 l 270 2250 l
cp gs col0 s gr
% Polyline
n 2745 1665 m 4140 1665 l 4140 2070 l 2745 2070 l
cp gs col0 s gr
% Polyline
n 5130 1440 m 4680 1890 l 5130 2340 l 5580 1890 l
cp gs col0 s gr
% Polyline
n 6120 1665 m 7380 1665 l 7380 2160 l 6120 2160 l
cp gs col0 s gr
% Polyline
n 8752 1012 m 8302 1462 l 8752 1912 l 9202 1462 l
cp gs col0 s gr
% Polyline
n 5985 3060 m 7425 3060 l 7425 3465 l 5985 3465 l
cp gs col0 s gr
% Polyline
n 8100 4095 m 9270 4095 l 9270 4590 l 8100 4590 l
cp gs col0 s gr
% Polyline
n 6817 3937 m 6367 4387 l 6817 4837 l 7267 4387 l
cp gs col0 s gr
% Polyline
gs clippath
555 1455 m 615 1455 l 615 1303 l 585 1423 l 555 1303 l cp
eoclip
n 585 810 m
585 1440 l gs col0 s gr gr
% arrowhead
n 555 1303 m 585 1423 l 615 1303 l col0 s
% Polyline
gs clippath
2760 1875 m 2760 1815 l 2608 181 5 l 2728 1845 l 2608 1875 l cp
eoclip
n 2295 1845 m
2745 1845 l gs col0 s gr gr
% arrowhead
n 2608 1875 m 2728 1845 l 2608 1815 l col0 s
% Polyline
gs clippath
4695 1920 m 4695 1860 l 4543 1860 l 4663 1890 l 4543 1920 l cp
eoclip
n 4185 1890 m
4680 1890 l gs col0 s gr gr
% arrowhead
n 4543 1920 m 4663 1890 l 4543 1860 l col0 s
% Polyline
gs clippath
5415 1065 m 5415 1005 l 5263 1005 l 5383 1035 l 5263 1065 l cp
eoclip
n 5130 1440 m 5130 1035 l
5400 1035 l gs col0 s gr gr
% arrowhead
n 5263 1065 m 5383 1035 l 5263 1005 l col0 s
% Polyline
gs clippath
6135 1920 m 6135 1860 l 5983 1860 l 6103 1890 l 5983 1920 l cp
eoclip
n 5580 1890 m
6120 1890 l gs col0 s gr gr
% arrowhead
n 5983 1920 m 6103 1890 l 5983 1860 l col0 s
% Polyline
gs clippath
6000 3270 m 6000 3210 l 5848 3210 l 5968 3240 l 5848 3270 l cp
eoclip
n 5130 2340 m 5130 3240 l
5985 3240 l gs col0 s gr gr
% arrowhead
n 5848 3270 m 5968 3240 l 5848 3210 l col0 s
% Polyline
gs clippath
8295 1470 m 8295 1410 l 8143 1410 l 8263 1440 l 8143 1470 l cp
eoclip
n 7380 1935 m 7830 1935 l 7830 1440 l
8280 1440 l gs col0 s gr gr
% arrowhead
n 8143 1470 m 8263 1440 l 8143 1410 l col0 s
% Polyline
n 6570 945 m 7830 945 l
7830 1440 l gs col0 s gr
% Polyline
gs clippath
10185 1470 m 10185 1410 l 10033 1410 l 10153 1440 l 10033 1470 l cp
eoclip
n 9180 1440 m
10170 1440 l gs col0 s gr gr
% arrowhead
n 10033 1470 m 10153 1440 l 10033 1410 l col0 s
% Polyline
gs clippath
8700 2400 m 8760 2400 l 8760 2248 l 8730 2368 l 8700 2248 l cp
eoclip
n 8730 1935 m
8730 2385 l gs col0 s gr gr
% arrowhead
n 8700 2248 m 8730 2368 l 8760 2248 l col0 s
% Polyline
gs clippath
7410 3165 m 7410 3225 l 7562 3225 l 7442 3195 l 7562 3165 l cp
eoclip
n 8730 2745 m 8730 3195 l
7425 3195 l gs col0 s gr gr
% arrowhead
n 7562 3165 m 7442 3195 l 7562 3225 l col0 s
% Polyline
n 10620 1620 m 10620 3195 l
8730 3195 l gs col0 s gr
% Polyline
gs clippath
6765 3975 m 6825 3975 l 6825 3823 l 6795 3943 l 6765 3823 l cp
eoclip
n 6795 3465 m
6795 3960 l gs col0 s gr gr
% arrowhead
n 6765 3823 m 6795 3943 l 6825 3823 l col0 s
% Polyline
gs clippath
8115 4395 m 8115 4335 l 7963 4335 l 8083 4365 l 7963 4395 l cp
eoclip
n 7245 4365 m
8100 4365 l gs col0 s gr gr
% arrowhead
n 7963 4395 m 8083 4365 l 7963 4335 l col0 s
% Polyline
gs clippath
6765 5415 m 6825 5415 l 6825 5263 l 6795 5383 l 6765 5263 l cp
eoclip
n 6795 4815 m
6795 5400 l gs col0 s gr gr
% arrowhead
n 6765 5263 m 6795 5383 l 6825 5263 l col0 s
% Polyline
gs clippath
4665 1875 m 4605 1875 l 4605 2027 l 4635 1907 l 4665 2027 l cp
eoclip
n 6750 5895 m 6750 6165 l 4635 6165 l
4635 1890 l gs col0 s gr gr
% arrowhead
n 4665 2027 m 4635 1907 l 4605 2027 l col0 s
% Polyline
n 8685 4590 m 8685 6165 l
6750 6165 l gs col0 s gr
% Polyline
n 6120 5400 m 7560 5400 l 7560 5895 l 6120 5895 l
cp gs col0 s gr
% Polyline
n 5400 675 m 6570 675 l 6570 1215 l 5400 1215 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
315 630 m
gs 1 -1 sc (Start) col0 sh gr
/Times-Roman ff 180.00 scf sf
405 1710 m
gs 1 -1 sc (Setup globals) col0 sh gr
/Times-Roman ff 180.00 scf sf
405 1920 m
gs 1 -1 sc (Initialize Safe Space) col0 sh gr
/Times-Roman ff 180.00 scf sf
405 2130 m
gs 1 -1 sc (Initialize Tag Arguments) col0 sh gr
/Times-Roman ff 180.00 scf sf
2835 1935 m
gs 1 -1 sc (For Each Parser) col0 sh gr
/Times-Roman ff 180.00 scf sf
4815 1935 m
gs 1 -1 sc (get_token) col0 sh gr
/Times-Roman ff 180.00 scf sf
5490 900 m
gs 1 -1 sc (Pop argument) col0 sh gr
/Times-Roman ff 180.00 scf sf
5490 1110 m
gs 1 -1 sc (Stacks) col0 sh gr
/Times-Roman ff 180.00 scf sf
6210 1890 m
gs 1 -1 sc (Push Argument) col0 sh gr
/Times-Roman ff 180.00 scf sf
6210 2100 m
gs 1 -1 sc (Stacks) col0 sh gr
/Times-Roman ff 180.00 scf sf
8550 1305 m
gs 1 -1 sc (Style) col0 sh gr
/Times-Roman ff 180.00 scf sf
8415 1530 m
gs 1 -1 sc (Definition) col0 sh gr
/Times-Roman ff 180.00 scf sf
270 225 m
gs 1 -1 sc (LONXML) col0 sh gr
/Times-Roman ff 180.00 scf sf
6075 3330 m
gs 1 -1 sc (Expand Variables) col0 sh gr
/Times-Roman ff 180.00 s vcf sf
8235 4275 m
gs 1 -1 sc (Put result ) col0 sh gr
/Times-Roman ff 180.00 scf sf
8235 4485 m
gs 1 -1 sc (in outputstack) col0 sh gr
/Times-Roman ff 180.00 scf sf
6255 5835 m
gs 1 -1 sc (return value) col0 sh gr
/Times-Roman ff 180.00 scf sf
6255 5625 m
gs 1 -1 sc (Save to xmlparse) col0 sh gr
/Times-Roman ff 165.00 scf sf
6435 4410 m
gs 1 -1 sc (Redirection) col0 sh gr
/Times-Roman ff 180.00 scf sf
7425 4365 m
gs 1 -1 sc (Yes) col0 sh gr
/Times-Roman ff 180.00 scf sf
6435 5085 m
gs 1 -1 sc (No) col0 sh gr
/Times-Roman ff 180.00 scf sf
9405 1395 m
gs 1 -1 sc (Yes) col0 sh gr
/Times-Roman ff 180.00 scf sf
8775 2160 m
gs 1 -1 sc (No) col0 sh gr
/Times-Roman ff 180.00 scf sf
4590 1350 m
gs 1 -1 sc (End Tag) col0 sh gr
/Times-Roman ff 180.00 scf sf
5220 2745 m
gs 1 -1 sc (Text) col0 sh gr
/Times-Roman ff 180.00 scf sf
5400 1710 m
gs 1 -1 sc (Start Tag) col0 sh gr
$F2psEnd
rs
icount op_count sub {pop} repeatcountdictstack dict_count sub {end} repeatAccess_Softek_context restore
Index: doc/gutshtml/SessionOn2_files/filelist.xml
+++ doc/gutshtml/SessionOn2_files/filelist.xml
<xml xmlns:o="urn:schemas-microsoft-com:office:office"> <o:MainFile HRef="::Session On2"/> <o:File HRef="image001.gif"/> <o:File HRef="image002.pct"/> <o:File HRef="image003.png"/> <o:File HRef="filelist.xml"/></xml>
Index: doc/gutshtml/SessionOn2_files/image002.pct
+++ doc/gutshtml/SessionOn2_files/image002.pct
u t : g u t s : g u t s h t m l : S e s s i o n O n 2 _ f i l e s : i m a g e 0 0 2 . p c t пK _ M| M|Mx ^K_ E a e M&ԿM|Mx ^M0 wk L / . ^ . & / . ^ . R.MR. L !q j 0 L1 ^ LM! R.P$ L_ Ԩ P$^ +( H H
# /Access_Softek_context save def/dict_count countdictstack def/op_count count 1 sub def/cxy [ currentpoint ] def66 dict begin/showpage {} def0 setgray 0 setlinecap1 setlinewidth 0 setlinejoin10 setmiterlimit [] 0 setdash/languagelevel where{pop languagelevel1 ne {false setstrokeadjust false setoverprint } if } if 0 792 translate 1 -1 scale cxy 0 get 792 cxy 1 get sub translate " q/exy [ currentpoint ] defexy 0 get cxy 0 get sub 492 div exy 1 get cxy 1 get sub 421 div scale0 -421 translate " 2 . *Title: lonhomework.eps *+Creator: fig2dev Version 3.2 Patchlevel 3d *OPreview: This EPS picture was not saved with a preview (TIFF or PICT) included *in it *NComment: This EPS picture will print to a postscript printer but not to other *types of printers 9 8 %!PS-Adobe-2.0 EPSF-2.0
%%Title: lonhomework.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3d
%%CreationDate: Wed Jun 5 20:26:03 2002
%%For: albertel@annarbor.albertelli.com ()
%%BoundingBox: 0 0 492 421
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 421 moveto 0 0 lineto 492 0 lineto 492 421 lineto closepath clip newpath
-47.4 464.8 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
10 setmiterlimit
0.06299 0.06299 sc
%
% Fig objects follow
%
% Polyline
7.500 slw
n 990 1755 m 1935 1755 l 1935 2340 l 990 2340 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
1035 2025 m
gs 1 -1 sc (Problem) col0 sh gr
/Times-Roman ff 180.00 scf sf
1035 2235 m
gs 1 -1 sc (Request) col0 sh gr
% Polyline
n 2700 1755 m 3555 1755 l 3555 2340 l 2700 2340 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
2790 1980 m
gs 1 -1 sc (Decide) col0 sh gr
/Times-Roman ff 180.00 scf sf
2790 2205 m
gs 1 -1 sc (Targets) col0 sh gr
% Polyline
n 900 720 m 1890 720 l 1890 1305 l 900 1305 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
1035 990 m
gs 1 -1 sc (Start) col0 sh gr
% Polyline
n 4350 1740 m 5340 1740 l 5340 2280 l 4350 2280 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
4575 1965 m
gs 1 -1 sc (Call ) col0 sh gr
/Times-Roman ff 180.00 scf sf
4575 2175 m
gs 1 -1 sc (xmlparse) col0 sh gr
% Polyline
n 6165 1800 m 7110 1800 l 7110 2295 l 6165 2295 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
6345 1980 m
gs 1 -1 sc (Restore) col0 sh gr
/Times-Roman ff 180.00 scf sf
6345 2190 m
gs 1 -1 sc (Data) col0 sh gr
% Polyline
gs clippath
6585 2670 m 6645 2670 l 6645 2518 l 6615 2638 l 6585 2518 l cp
eoclip
n 6615 2295 m
6615 2655 l gs col0 s gr gr
% arrowhead
n 6585 2518 m 6615 2638 l 6645 2518 l col0 s
% Polyl ine
n 6165 2655 m 7335 2655 l 7335 3150 l 6165 3150 l
cp gs col0 s gr
% Polyline
n 7470 3915 m 6165 3915 l 6165 3420 l 7470 3420 l
cp gs col0 s gr
% Polyline
gs clippath
6585 3435 m 6645 3435 l 6645 3283 l 6615 3403 l 6585 3283 l cp
eoclip
n 6615 3150 m
6615 3420 l gs col0 s gr gr
% arrowhead
n 6585 3283 m 6615 3403 l 6645 3283 l col0 s
% Polyline
n 5850 1395 m 7650 1395 l 7650 4050 l 5850 4050 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
6030 1620 m
gs 1 -1 sc (<problem>) col0 sh gr
/Times-Roman ff 180.00 scf sf
6255 2925 m
gs 1 -1 sc (Setup globals) col0 sh gr
/Times-Roman ff 180.00 scf sf
6300 3735 m
gs 1 -1 sc (Check Access) col0 sh gr
% Polyline
n 7575 4620 m 7125 5070 l 7575 5520 l 8025 5070 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
7350 5115 m
gs 1 -1 sc (Target) col0 sh gr
% Polyline
n 7035 6315 m 8115 6315 l 8115 6855 l 7035 6855 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
7125 6540 m
gs 1 -1 sc (Save results) col0 sh gr
/Times-Roman ff 180.00 scf sf
7125 6750 m
gs 1 -1 sc (hash) col0 sh gr
% Polyline
n 8055 5040 m 8370 5040 l
8370 7110 l gs col0 s gr
% Polyline
gs clippath
7575 6270 m 7635 6270 l 7635 6118 l 7605 6238 l 7575 6118 l cp
eoclip
n 7605 5535 m
7605 6255 l gs col0 s gr gr
% arrowhead
n 7575 6118 m 7605 6238 l 7635 6118 l col0 s
% Polyline
n 6750 4275 m 8550 4275 l 8550 7335 l 6750 7335 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
6840 4500 m
gs 1 -1 sc (</problem>) col0 sh gr
/Times-Roman ff 180.00 scf sf
7110 5850 m
gs 1 -1 sc (Grade) col0 sh gr
% Polyline
gs clippath
7545 7080 m 7545 7140 l 7697 7140 l 7577 7110 l 7697 7080 l cp
eoclip
n 8370 7110 m
7560 7110 l gs col0 s gr gr
% arrowhead
n 7697 7080 m 7577 7110 l 7697 7140 l col0 s
% Polyline
n 5310 6868 m 6255 6868 l 6255 7367 l 5310 7367 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
5445 7076 m
gs 1 -1 sc (Handle) col0 sh gr
/Times-Roman ff 180.00 scf sf
5445 7270 m
gs 1 -1 sc (Result) col0 sh gr
% Polyline
n 5715 5280 m 5265 5730 l 5715 6180 l 6165 5730 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
5490 5775 m
gs 1 -1 sc (Target) col0 sh gr
% Polyline
n 3255 5490 m 4380 5490 l 4380 6030 l 3255 6030 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
3345 5715 m
gs 1 -1 sc (Send result) col0 sh gr
/Times-Roman ff 180.00 scf sf
3345 5925 m
gs 1 -1 sc (to browser) col0 sh gr
% Polyline
n 3315 4770 m 4485 4770 l 4485 5355 l 3315 5355 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
3450 5040 m
gs 1 -1 sc (Save result) col0 sh gr
/Times-Roman ff 180.00 scf sf
3450 5250 m
gs 1 -1 sc (to file) col0 sh gr
% Polyline
n 2745 2880 m 2295 3330 l 2745 3780 l 3195 3330 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
2430 3465 m
gs 1 -1 sc (Targets?) col0 sh gr
/Times-Roman ff 180.00 scf sf
2520 3285 m
gs 1 -1 sc (More) col0 sh gr
% Polyline
n 765 3060 m 1665 3060 l 1665 3600 l 765 3600 l
cp gs col0 s gr
/Times-Roman ff 180.00 scf sf
900 3285 m
gs 1 -1 sc (End) col0 sh gr
% Polyline
gs clippath
1320 1815 m 1380 1815 l 1380 1663 l 1350 1783 l 1320 1663 l cp
eoclip
n 1350 1305 m
1350 1800 l gs col0 s gr gr
% arrowhead
n 1320 1663 m 1350 1783 l 1380 1663 l col0 s
% Polyline
gs clippath
2715 2055 m 2715 1995 l 2563 1995 l 2683 2025 l 2563 2055 l cp
eoclip
n 1935 2025 m
2700 2025 l gs col0 s gr gr
% arrowhead
n 2563 2055 m 2683 2025 l 2563 1995 l col0 s
% Polyline
gs clippath
4335 2055 m 4335 1995 l 4183 1995 l 4303 2025 l 4183 2055 l cp
eoclip
n 3555 2025 m
4320 2025 l gs col0 s gr gr
% arrowhead
n 4183 2055 m 4303 2025 l 4183 1995 l col0 s
% Polyline
gs clippath
6135 2055 m 6135 1995 l 5983 1995 l 6103 2025 l 5983 2055 l cp
eoclip
n 5355 2025 m
6120 2025 l gs col0 s gr gr
% arrowhead
n 5983 2055 m 6103 2025 l 5983 1995 l col0 s
% Polyline
gs clippath
7170 5115 m 7170 5055 l 7018 5055 l 7138 5085 l 7018 5115 l cp
eoclip
n 6255 3960 m 6255 5085 l
7155 5085 l gs col0 s gr gr
% arrowhead
n 7018 5115 m 7138 5085 l 7018 5055 l col0 s
% Polyline
gs clippath
6285 7080 m 6285 7140 l 6437 7140 l 6317 7110 l 6437 7080 l cp
eoclip
n 7560 6885 m 7560 7110 J l
6300 7110 l gs col0 s gr gr
% arrowhead
n 6437 7080 m 6317 7110 l 6437 7140 l col0 s
% Polyline
gs clippath
5745 6195 m 5685 6195 l 5685 6347 l 5715 6227 l 5745 6347 l cp
eoclip
n 5715 6885 m
5715 6210 l gs col0 s gr gr
% arrowhead
n 5745 6347 m 5715 6227 l 5685 6347 l col0 s
% Polyline
gs clippath
4395 5685 m 4395 5745 l 4547 5745 l 4427 5715 l 4547 5685 l cp
eoclip
n 5265 5715 m
4410 5715 l gs col0 s gr gr
% arrowhead
n 4547 5685 m 4427 5715 l 4547 5745 l col0 s
% Polyline
gs clippath
4485 5100 m 4485 5160 l 4637 5160 l 4517 5130 l 4637 5100 l cp
eoclip
n 5715 5310 m 5715 5130 l
4500 5130 l gs col0 s gr gr
% arrowhead
n 4637 5100 m 4517 5130 l 4637 5160 l col0 s
% Polyline
gs clippath
2685 5010 m 2685 5070 l 2837 5070 l 2717 5040 l 2837 5010 l cp
eoclip
n 3285 5040 m
2700 5040 l gs col0 s gr gr
% arrowhead
n 2837 5010 m 2717 5040 l 2837 5070 l col0 s
% Polyline
gs clippath
2775 3720 m 2715 3720 l 2715 3872 l 2745 3752 l 2775 3872 l cp
eoclip
n 3285 5805 m 2745 5805 l
2745 3735 l gs col0 s gr gr
% arrowhead
n 2775 3872 m 2745 3752 l 2715 3872 l col0 s
% Polyline
gs clippath
4352 2078 m 4307 2038 l 4206 2151 l 4309 2082 l 4251 2191 l cp
eoclip
n 3195 3330 m
4320 2070 l gs col0 s gr gr
% arrowhead
n 4251 2191 m 4309 2082 l 4206 2151 l col0 s
% Polyline
gs clippath
1650 3300 m 1650 3360 l 1802 3360 l 1682 3330 l 1802 3300 l cp
eoclip
n 2295 3330 m
1665 3330 l gs col0 s gr gr
% arrowhead
n 1802 3300 m 1682 3330 l 1802 3360 l col0 s
/Times-Roman ff 180.00 scf sf
5445 4680 m
gs 1 -1 sc (Eventually) col0 sh gr
/Times-Roman ff 180.00 scf sf
4770 5085 m
gs 1 -1 sc (modified) col0 sh gr
/Times-Roman ff 180.00 scf sf
4545 5985 m
gs 1 -1 sc (any other) col0 sh gr
/Times-Roman ff 180.00 scf sf
3690 3105 m
gs 1 -1 sc (Yes) col0 sh gr
/Times-Roman ff 180.00 scf sf
1845 3240 m
gs 1 -1 sc (No) col0 sh gr
$F2psEnd
rs
icount op_count sub {pop} repeatcountdictstack dict_count sub {end} repeatAccess_Softek_context restore
Index: doc/gutshtml/SessionOne_files/filelist.xml
+++ doc/gutshtml/SessionOne_files/filelist.xml
<xml xmlns:o="urn:schemas-microsoft-com:office:office"> <o:MainFile HRef="::Session One"/> <o:File HRef="image001.jpg"/> <o:File HRef="image002.jpg"/> <o:File HRef="image003.jpg"/> <o:File HRef="image004.jpg"/> <o:File HRef="image005.jpg"/> <o:File HRef="image006.jpg"/> <o:File HRef="image007.jpg"/> <o:File HRef="image008.jpg"/> <o:File HRef="image009.jpg"/> <o:File HRef="image010.jpg"/> <o:File HRef="image011.jpg"/> <o:File HRef="image012.png"/> <o:File HRef="image013.jpg"/> <o:File HRef="filelist.xml"/></xml>
Index: doc/gutshtml/SessionTw1_files/filelist.xml
+++ doc/gutshtml/SessionTw1_files/filelist.xml
<xml xmlns:o="urn:schemas-microsoft-com:office:office"> <o:MainFile HRef="::Session Tw1"/> <o:File HRef="image001.gif"/> <o:File HRef="image002.pct"/> <o:File HRef="image003.png"/> <o:File HRef="image004.jpg"/> <o:File HRef="image005.jpg"/> <o:File HRef="image006.jpg"/> <o:File HRef="image007.jpg"/> <o:File HRef="image008.jpg"/> <o:File HRef="image009.jpg"/> <o:File HRef="image010.jpg"/> <o:File HRef="image011.jpg"/> <o:File HRef="image012.png"/> <o:File HRef="image013.jpg"/> <o:File HRef="image014.png"/> <o:File HRef="image015.jpg"/> <o:File HRef="image016.png"/> <o:File HRef="image017.jpg"/> <o:File HRef="filelist.xml"/></xml>
Index: doc/gutshtml/SessionTw1_files/image002.pct
+++ doc/gutshtml/SessionTw1_files/image002.pct
u t : g u t s : g u t s h t m l : S e s s i o n T w 1 _ f i l e s : i m a g e 0 0 2 . p c t пK _ M| M|Mx ^K_ E = e MؿM|Mx ^M0 wk L q . ^ . q . ^ . R.MR. L !q j s 0 L1 ^ LM! R.P$ L_ Ԩ P$^ Y H H
# /Access_Softek_context save def/dict_count countdictstack def/op_count count 1 sub def/cxy [ currentpoint ] def66 dict begin/showpage {} def0 setgray 0 setlinecap1 setlinewidth 0 setlinejoin10 setmiterlimit [] 0 setdash/languagelevel where{pop languagelevel1 ne {false setstrokeadjust false setoverprint } if } if 0 792 translate 1 -1 scale cxy 0 get 792 cxy 1 get sub translate " q/exy [ currentpoint ] defexy 0 get cxy 0 get sub 774 div exy 1 get cxy 1 get sub 499 div scale0 -499 translate " 2 . *Title: Hierarchy.eps *+Creator: fig2dev Version 3.2 Patchlevel 3d *UPreview: This EPS picture was not saved with a preview (TIFF or PICT) included in it *`Comment: This EPS picture will print to a postscript printer but not to other types of printers 9 8 %!PS-Adobe-2.0 EPSF-2.0
%%Title: Hierarchy.eps
%%Creator: fig2dev Version 3.2 Patchlevel 3d
%%CreationDate: Wed Jun 5 11:35:09 2002
%%For: matthew@kirk.lite.msu.edu (Matthew Hall)
%%BoundingBox: 0 0 774 499
%%Magnification: 1.2000
%%EndComments
/MyAppDict 100 dict dup begin def
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 499 moveto 0 0 lineto 774 0 lineto 774 499 lineto closepath clip newpath
-4.5 497.7 translate
1 -1 scale
% This junk string is used by the show operators
/PATsstr 1 string def
/PATawidthshow { % cx cy cchar rx ry string
% Loop over each character in the string
{ % cx cy cchar rx ry char
% Show the character
dup % cx cy cchar rx ry char char
PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char)
false charpath % cx cy cchar rx ry char
/clip load PATdraw
% Move past the character (charpath modified the
% current point)
currentpoint % cx cy cchar rx ry char x y
newpath
moveto % cx cy cchar rx ry char
% Reposition by cx,cy if the character in the string is cchar
3 index eq { % cx cy cchar rx ry
4 index 4 index rmoveto
} if
% Reposition all characters by rx ry
2 copy rmoveto % cx cy cchar rx ry
} forall
pop pop pop pop pop % -
currentpoint
newpath
moveto
} bind def
/PATcg {
7 dict dup begin
/lw currentlinewidth def
/lc currentlinecap def
/lj currentlinejoin def
/ml currentmiterlimit def
/ds [ currentdash ] def
/cc [ currentrgbcolor ] def
/cm matrix currentmatrix def
end
} bind def
% PATdraw - calculates the boundaries of the object and
% fills it with the current pattern
/PATdraw { % proc
save exch
PATpcalc % proc nw nh px py
5 -1 roll exec % nw nh px py
newpath
PATfill % -
restore
} bind def
% PATfill - performs the tiling for the shape
/PATfill { % nw nh px py PATfill -
PATDict /CurrentPattern get dup begin
setfont
% Set the coordinate system to Pattern Space
PatternGState PATsg
% Set the color for uncolored pattezns
PaintType 2 eq { PATDict /PColor get PATsc } if
% Create the string for showing
3 index string % nw nh px py str
% Loop for each of the pattern sources
0 1 Multi 1 sub { % nw nh px py str source
% Move to the starting location
3 index 3 index % nw nh px py str source px py
moveto % nw nh px py str source
% For multiple sources, set the appropriate color
Multi 1 ne { dup PC exch get PATsc } if
% Set the appropriate string for the source
0 1 7 index 1 sub { 2 index exch 2 index put } for pop
% Loop over the number of vertical cells
3 index % nw nh px py str nh
{ % nw nh px py str
current point % nw nh px py str cx cy
2 index oldshow % nw nh px py str cx cy
YStep add moveto % nw nh px py str
} repeat % nw nh px py str
} for
5 { pop } repeat
end
} bind def
% PATkshow - kshow with the current pattezn
/PATkshow { % proc string
exch bind % string proc
1 index 0 get % string proc char
% Loop over all but the last character in the string
0 1 4 index length 2 sub {
% string proc char idx
% Find the n+1th character in the string
3 index exch 1 add get % string proe char char+1
exch 2 copy % strinq proc char+1 char char+1 char
% Now show the nth character
PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr)
false charpath % string proc char+1 char char+1
/clip load PATdraw
% Move past the character (charpath modified the current point)
currentpoint newpath moveto
% Execute the user proc (should consume char and char+1)
mark 3 1 roll % string proc char+1 mark char char+1
4 index exec % string proc char+1 mark...
cleartomark % string proc char+1
} for
% Now display the last character
PATsstr dup 0 4 -1 roll put % string proc (char+1)
false charpath % string proc
/clip load PATdraw
neewath
pop pop % -
} bind def
% PATmp - the makepattern equivalent
/PATmp { % patdict patmtx PATmp patinstance
exch dup length 7 add % We will add 6 new entries plus 1 FID
dict copy % Create a new dictionary
begin
% Matrix to install when painting the pattern
TilingType PATtcalc
/PatternGState PATcg def
PatternGState /cm 3 -1 roll put
% Check for multi pattern sources (Level 1 fast color patterns)
currentdict /Multi known not { /Multi 1 def } if
% Font dictionary definitions
/FontType 3 def
% Create a dummy encoding vector
/Encoding 256 array def
3 string 0 1 255 {
Encoding exch dup 3 index cvs cvn put } for pop
/FontMatrix matrix def
/FontBBox BBox def
/BuildChar {
mark 3 1 roll % mark dict char
exch begin
Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata]
PaintType 2 eq Multi 1 ne or
{ XStep 0 FontBBox aload pop setcachedevice }
{ XStep 0 setcharwidth } ifelse
currentdict % mark [paintdata] dict
/PaintProc load % mark [paintdata] dict paintproc
end
gsave
false PATredef exec true PATredef
grestore
cleartomark % -
} bind def
currentdict
end % newdict
/foo exch % /foo newlict
definefont % newfont
} bind def
% PATpcalc - calculates the starting point and width/height
% of the tile fill for the shape
/PATpcalc { % - PATpcalc nw nh px py
PATDict /CurrentPattern get begin
gsave
% Set up the coordinate system to Pattern Space
% and lock down pattern
PatternGState /cm get setmatrix
BBox aload pop pop pop translate
% Determine the bounding box of the shape
pathbbox % llx lly urx ury
grestore
% Determine (nw, nh) the # of cells to paint width and height
PatHeight div ceiling % llx lly urx qh
4 1 roll % qh llx lly urx
PatWidth div ceiling % qh llx lly qw
4 1 roll % qw qh llx lly
PatHeight div floor % qw qh llx ph
4 1 roll % ph qw qh llx
PatWidth div floor % ph qw qh pw
4 1 roll % pw ph qw qh
2 index sub cvi abs % pw ph qs qh-ph
exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph
% Determine the starting point of the pattern fill
%(px, py)
4 2 roll % nw nh pw ph
PatHeight mul % nw nh pw py
exch % nw nh py pw
PatWidth mul exch % nw nh px py
end
} bind def
% Save the original routines so that we can use them later on
/oldfill /fill load def
/oldeofill /eofill load def
/oldstroke /stroke load def
/oldshow /show load def
/oldashow /ashow load def
/oldwidthshow /widthshow load def
/oldawidthshow /awidthshow load def
/oldkshow /kshow load def
% These defs are necessary so that subsequent procs don't bind in
% the originals
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { o ldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
/PATredef {
MyAppDict begin
{
/fill { /clip load PATdraw newpath } bind def
/eofill { /eoclip load PATdraw newpath } bind def
/stroke { PATstroke } bind def
/show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
/ashow { 0 0 null 6 3 roll PATawidthshow }
bind def
/widthshow { 0 0 3 -1 roll PATawidthshow }
bind def
/awidthshow { PATawidthshow } bind def
/kshow { PATkshow } bind def
} {
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
} ifelse
end
} bind def
false PATredef
% Conditionally define setcmykcolor if not available
/setcmykcolor where { pop } {
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if 3 1 roll
} repeat
setrgbcolor - pop
} bind def
} ifelse
/PATsc { % colorarray
aload length % c1 ... cn length
dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
} ifelse } ifelse
} bind def
/PATsg { % dict
begin
lw setlinewidth
lc setlinecap
lj setlinejoin
ml setmiterlimit
ds aload pop setdash
cc aload pop setrgbcolor
cm setmatrix
end
} bind def
/PATDict 3 dict def
/PATsp {
true PATredef
PATDict begin
/CurrentPattern exch def
% If it's an uncolored pattern, save the color
CurrentPattern /PaintType get 2 eq {
/PColor exch def
} if
/CColor [ currentrgbcolor ] def
end
} bind def
% PATstroke - stroke with the current pattern
/PATstroke {
countdictstack
save
mark
{
currentpoint strokepath moveto
PATpcalc % proc nw nh px py
clip newpath PATfill
} stopped {
(*** PATstroke Warning: Path is too complex, stroking
with gray) =
cleartomark
restore
countdictstack exch sub dup 0 gt
{ { end } repeat } { pop } ifelse
gsave 0.5 setgray oldstroke grestore
} { pop restore pop } ifelse
newpath
} bind def
/PATtcalc { % modmtx tilingtype PATtcalc tilematrix
% Note: tiling types 2 and 3 are not supported
gsave
exch concat % tilingtype
matrix currentmatrix exch % cmtx tilingtype
% Tiling type 1 and 3: constant spacing
2 ne {
% Distort the pattern so that it occupies
% an integral number of device pixels
dup 4 get exch dup 5 get exch % tx ty cmtx
XStep 0 dtransform
round exch round exch % tx ty cmtx dx.x dx.y
XStep div exch XStep div exch % tx ty cmtx a b
0 YStep dtransform
round exch round exch % tx ty cmtx a b dy.x dy.y
YStep div exch YStep div exch % tx ty cmtx a b c d
7 -3 roll astore % { a b c d tx ty }
} if
grestore
} bind def
/PATusp {
false PATredef
PATDict begin
CColor PATsc
end
} bind def
% crosshatch30
11 dict begin
/PaintType 1 def
/PatternType 1 def
/TilingType 1 def
/BBox [0 0 1 1] def
/XStep 1 def
/YStep 1 def
/PatWidth 1 def
/PatHeight 1 def
/Multi 2 def
/PaintData [
{ clippath } bind
{ 32 16 true [ 32 0 0 -16 0 16 ]
{<033003300c0c0c0c30033003c000c000300330030c0c0c0c
0330033000c000c0033003300c0c0c0c30033003c000c000
300330030c0c0c0c0330033000c000c0>}
imagemask } bind
] def
/PaintProc {
pop
exec fill
} def
currentdict
end
/P3 exch def
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bin d def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
10 setmiterlimit
0.07200 0.07200 sc
%
% Fig objects follow
%
% Polyline
7.500 slw
n 4200 600 m 6600 600 l 6600 2100 l 4200 2100 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 4200 900 m 6600 900 l 6600 1200 l 4200 1200 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 280.00 60.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 4200 1500 m
6600 1500 l gs col0 s gr
% Polyline
n 6600 1800 m
4200 1800 l gs col0 s gr
/Times-Roman ff 210.00 scf sf
4350 825 m
gs 1 -1 sc (Student A) col0 sh gr
% Polyline
n 8175 150 m 10575 150 l 10575 1650 l 8175 1650 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 8175 450 m 10575 450 l 10575 750 l 8175 750 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 545.00 30.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 8175 1050 m
10575 1050 l gs col0 s gr
% Polyline
n 10575 1350 m
8175 1350 l gs col0 s gr
% Assignment 1
/Times-Roman ff 210.00 scf sf
8325 375 m
gs 1 -1 sc (Problem 1) col0 sh gr
% Polyline
n 8100 900 m 10500 900 l 10500 2400 l 8100 2400 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 8100 1200 m 10500 1200 l 10500 1500 l 8100 1500 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 540.00 80.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 8100 1800 m
10500 1800 l gs col0 s gr
% Polyline
n 10500 2100 m
8100 2100 l gs col0 s gr
% Assignment 1
/Times-Roman ff 210.00 scf sf
8250 1125 m
gs 1 -1 sc (Problem 2) col0 sh gr
% Polyline
n 8025 1725 m 10425 1725 l 10425 3225 l 8025 3225 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 8025 2025 m 10425 2025 l 10425 2325 l 8025 2325 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 535.00 135.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 8025 2625 m
10425 2625 l gs col0 s gr
% Polyline
n 10425 2925 m
8025 2925 l gs col0 s gr
% Assignment 1
/Times-Roman ff 210.00 scf sf
8175 1950 m
gs 1 -1 sc (Problem 3) col0 sh gr
% Polyline
n 8175 3600 m 10575 3600 l 10575 5100 l 8175 5100 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 8175 3900 m 10575 3900 l 10575 4200 l 8175 4200 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 545.00 260.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 8175 4500 m
10575 4500 l gs col0 s gr
% Polyline
n 10575 4800 m
8175 4800 l gs col0 s gr
% Assignment 1
/Times-Roman ff 210.00 scf sf
8325 3825 m
gs 1 -1 sc (Problem 1) col0 sh gr
% Polyline
n 8100 4350 m 10500 4350 l 10500 5850 l 8100 5850 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 8100 4650 m 10500 4650 l 10500 4950 l 8100 4950 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 540.00 310.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 8100 5250 m
10500 5250 l gs col0 s gr
% Polyline
n 10500 5550 m
8100 5550 l gs col0 s gr
% Assignment 1
/Times-Roman ff 210.00 scf sf
8250 4575 m
gs 1 -1 sc (Problem 2) col0 sh gr
% Polyline
n 8025 5175 m 10425 5175 l 10425 6675 l 8025 6675 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 8025 5475 m 10425 5475 l 10425 5775 l 8025 5775 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 535.00 365.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 8025 6075 m
10425 6075 l gs col0 s gr
% Polyline
n 10425 6375 m
8025 6375 l gs col0 s gr
% Assignment 1
/Times-Roman ff 210.00 scf sf
8175 5400 m
gs 1 -1 sc (Problem 3) col0 sh gr
% Polyline
n 3675 4350 m 6075 4350 l 6075 5850 l 3675 5850 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 3675 4650 m 6075 4650 l 6075 4950 l 3675 4950 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 245.00 310.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 3675 5250 m
6075 5250 l gs col0 s gr
% Polyline
n 6075 5550 m
3675 5550 l gs col0 s gr
/Times-Roman ff 210.00 scf sf
3825 4575 m
gs 1 -1 sc (Student C) col0 sh gr
/Times-Roman ff 210.00 scf sf
3750 5175 m
gs 1 -1 sc (1) col0 sh gr
/Times-Roman ff 210.00 scf sf
3750 5475 m
gs 1 -1 sc (2) col0 sh gr
/Times-Roman ff 210.00 scf sf
3750 5775 m
gs 1 -1 sc (3) col0 sh gr
% Polyline
n 3450 5175 m 5850 5175 l 5850 6675 l 3450 6675 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 3450 5475 m 5850 5475 l 5850 5775 l 3450 5775 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 230.00 365.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 3450 6075 m
5850 6075 l gs col0 s gr
% Polyline
n 5850 6375 m
3450 6375 l gs col0 s gr
/Times-Roman ff 210.00 scf sf
3600 5400 m
gs 1 -1 sc (Student D) col0 sh gr
/Times-Roman ff 210.00 scf sf
3525 6000 m
gs 1 -1 sc (1) col0 sh gr
/Times-Roman ff 210.00 scf sf
3525 6300 m
gs 1 -1 sc (2) col0 sh gr
/Times-Roman ff 210.00 scf sf
3525 6600 m
gs 1 -1 sc (3) col0 sh gr
% Polyline
n 3975 2625 m 6375 2625 l 6375 4125 l 3975 4125 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 3975 2925 m 6375 2925 l 6375 3225 l 3975 3225 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 265.00 195.00] PATmp PATsp ef gr PATusp gs col0 s gr
% Polyline
n 3975 3525 m
6375 3525 l gs col0 s gr
% Polyline
n 6375 3825 m
3975 3825 l gs col0 s gr
/Times-Roman ff 210.00 scf sf
4125 2850 m
gs 1 -1 sc (Student B) col0 sh gr
/Times-Roman ff 210.00 scf sf
4050 3450 m
gs 1 -1 sc (1) col0 sh gr
/Times-Roman ff 210.00 scf sf
4050 3750 m
gs 1 -1 sc (2) col0 sh gr
/Times-Roman ff 210.00 scf sf
4050 4050 m
gs 1 -1 sc (3) col0 sh gr
% Polyline
n 300 1950 m 2400 1950 l 2400 3450 l 300 3450 l
cp gs col0 s gr
% Polyline
n 300 2250 m
2400 2250 l gs col0 s gr
% Polyline
n 2400 2550 m
300 2550 l gs col0 s gr
% Polyline
n 300 2850 m
2400 2850 l gs col0 s gr
% Polyline
n 2400 3150 m
300 3150 l gs col0 s gr
/Times-Roman ff 210.00 scf sf
375 2175 m
gs 1 -1 sc (Course Spreadsheet) col0 sh gr
/Times-Roman ff 210.00 scf sf
375 2475 m
gs 1 -1 sc (A) col0 sh gr
/Times-Roman ff 210.00 scf sf
375 3075 m
gs 1 -1 sc (C) col0 sh gr
/Times-Roman ff 210.00 scf sf
375 3375 m
gs 1 -1 sc (D) col0 sh gr
/Times-Roman ff 210.00 scf sf
375 2775 m
gs 1 -1 sc (B) col0 sh gr
% Polyline
gs clippath
2370 2385 m 2406 2433 l 2566 2313 l 2452 2361 l 2530 2265 l cp
eoclip
n 4200 1050 m
2400 2400 l gs col0 s gr gr
% arrowhead
30.000 slw
n 2530 2265 m 2452 2361 l 2566 2313 l 2530 2265 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
2415 2970 m 2366 3005 l 2481 3168 l 2437 3053 l 2530 3133 l cp
eoclip
n 3675 4800 m
2400 3000 l gs col0 s gr gr
% arrowhead
30.000 slw
n 2530 3133 m 2437 3053 l 2481 3168 l 2530 3133 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
2421 3273 m 2366 3298 l 2449 3480 l 2427 3359 l 2503 3456 l cp
eoclip
n 3450 5625 m
2400 3300 l gs col0 s gr gr
% arrowhead
30.000 slw
n 2503 3456 m 2427 3359 l 2449 3480 l 2503 3456 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
2392 2667 m 2378 2725 l 2572 2771 l 2463 2715 l 2586 2713 l cp
eoclip
n 3975 3075 m
2400 2700 l gs col0 s gr gr
% arrowhead
30.000 slw
n 2586 2713 m 2463 2715 l 2572 2771 l 2586 2713 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
6573 1329 m 6599 1383 l 6779 1297 l 6658 1322 l 6753 1243 l cp
eoclip
n 8175 600 m
6600 1350 l gs col0 s gr gr
% arrowhead
30.000 slw
n 6753 1243 m 6658 1322 l 6779 1297 l 6753 1243 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
6579 1623 m 6591 1682 l 6787 1642 l 6664 1637 l 6775 1584 l cp
eoclip
n 8100 1350 m
6600 1650 l gs col0 s gr gr
% arrowhead
30.000 slw
n 6775 1584 m 6664 1637 l 6787 1642 l 6775 1584 l cp gs L 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
6589 1918 m 6580 1977 l 6777 2008 l 6664 1960 l 6787 1949 l cp
eoclip
n 8025 2175 m
6600 1950 l gs col0 s gr gr
% arrowhead
30.000 slw
n 6787 1949 m 6664 1960 l 6777 2008 l 6787 1949 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
6371 3341 m 6350 3397 l 6537 3468 l 6436 3398 l 6558 3412 l cp
eoclip
n 8175 4050 m
6375 3375 l gs col0 s gr gr
% arrowhead
30.000 slw
n 6558 3412 m 6436 3398 l 6537 3468 l 6558 3412 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
6378 3641 m 6346 3691 l 6513 3800 l 6429 3710 l 6545 3750 l cp
eoclip
n 8100 4800 m
6375 3675 l gs col0 s gr gr
% arrowhead
30.000 slw
n 6545 3750 m 6429 3710 l 6513 3800 l 6545 3750 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
gs clippath
6385 3943 m 6343 3985 l 6484 4127 l 6421 4021 l 6527 4084 l cp
eoclip
n 8025 5625 m
6375 3975 l gs col0 s gr gr
% arrowhead
30.000 slw
n 6527 4084 m 6421 4021 l 6484 4127 l 6527 4084 l cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
n 10800 6900 m 75 6900 l 75 0 l 10800 0 l
cp gs col0 s gr
% Polyline
n 300 300 m 1500 300 l 1500 600 l 300 600 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P3 [16 0 0 -8 20.00 20.00] PATmp PATsp ef gr PATusp gs col0 s gr
/Times-Roman ff 210.00 scf sf
4275 1425 m
gs 1 -1 sc (1) col0 sh gr
/Times-Roman ff 210.00 scf sf
4275 1725 m
gs 1 -1 sc (2) col0 sh gr
/Times-Roman ff 210.00 scf sf
4275 2025 m
gs 1 -1 sc (3) col0 sh gr
/Times-Roman ff 240.00 scf sf
1725 525 m
gs 1 -1 sc (Export Row) col0 sh gr
$F2psEnd
rs
end
icount op_count sub {pop} repeatcountdictstack dict_count sub {end} repeatAccess_Softek_context restore
Index: doc/gutshtml/SessionTw2_files/filelist.xml
+++ doc/gutshtml/SessionTw2_files/filelist.xml
<xml xmlns:o="urn:schemas-microsoft-com:office:office"> <o:MainFile HRef="::Session Tw2"/> <o:File HRef="image001.gif"/> <o:File HRef="image002.wmf"/> <o:File HRef="image003.png"/> <o:File HRef="image004.gif"/> <o:File HRef="image005.wmf"/> <o:File HRef="image006.png"/> <o:File HRef="image007.gif"/> <o:File HRef="image008.wmf"/> <o:File HRef="image009.png"/> <o:File HRef="image010.gif"/> <o:File HRef="image011.wmf"/> <o:File HRef="image012.png"/> <o:File HRef="image013.gif"/> <o:File HRef="image014.wmf"/> <o:File HRef="image015.png"/> <o:File HRef="image016.gif"/> <o:File HRef="image017.wmf"/> <o:File HRef="image018.png"/> <o:File HRef="image019.gif"/> <o:File HRef="image020.wmf"/> <o:File HRef="image021.png"/> <o:File HRef="image022.gif"/> <o:File HRef="image023.wmf"/> <o:File HRef="image024.png"/> <o:File HRef="image025.gif"/> <o:File HRef="image026.wmf"/> <o:File HRef="image027.png"/> <o:File HRef="image028.gif"/> <o:File HRef="image029.wmf"/> <o:File HRef="image030.png"/> <o:File HRef="image031.gif"/> <o:File HRef="image032.wmf"/> <o:File HRef="image033.png"/> <o:File HRef="image034.gif"/> <o:File HRef="image035.wmf"/> <o:File HRef="image036.png"/> <o:File HRef="image037.gif"/> <o:File HRef="image038.wmf"/> <o:File HRef="image039.png"/> <o:File HRef="image040.gif"/> <o:File HRef="image041.wmf"/> <o:File HRef="image042.png"/> <o:File HRef="image043.gif"/> <o:File HRef="image044.wmf"/> <o:File HRef="image045.png"/> <o:File HRef="image046.gif"/> <o:File HRef="image047.wmf"/> <o:File HRef="image048.png"/> <o:File HRef="image049.gif"/> <o:File HRef="image050.wmf"/> <o:File HRef="image051.png"/> <o:File HRef="image052.gif"/> <o:File HRef="image053.wmf"/> <o:File HRef="image054.png"/> <o:File HRef="image055.gif"/> <o:File HRef="image056.wmf"/> <o:File HRef="image057.png"/> <o:File HRef="oledata.mso"/> <o:File HRef="image058.gif"/> <o:File HRef="image059.wmf"/> <o:File HRef="image060.png"/> <o:File HRef="image061.gif"/> <o:File HRef="image062.wmf"/> <o:File HRef="image063.png"/> <o:File HRef="image064.gif"/> <o:File HRef="image065.wmf"/> <o:File HRef="image066.png"/> <o:File HRef="image067.gif"/> <o:File HRef="image068.wmf"/> <o:File HRef="image069.png"/> <o:File HRef="image070.gif"/> <o:File HRef="image071.wmf"/> <o:File HRef="image072.png"/> <o:File HRef="image073.gif"/> <o:File HRef="image074.wmf"/> <o:File HRef="image075.png"/> <o:File HRef="image076.gif"/> <o:File HRef="image077.wmf"/> <o:File HRef="image078.png"/> <o:File HRef="image079.gif"/> <o:File HRef="image080.wmf"/> <o:File HRef="image081.png"/> <o:File HRef="image082.gif"/> <o:File HRef="image083.wmf"/> <o:File HRef="image084.png"/> <o:File HRef="image085.png"/> <o:File HRef="image086.jpg"/> <o:File HRef="image087.png"/> <o:File HRef="image088.jpg"/> <o:File HRef="image089.gif"/> <o:File HRef="image090.wmf"/> <o:File HRef="image091.png"/> <o:File HRef="image092.gif"/> <o:File HRef="image093.wmf"/> <o:File HRef="image094.png"/> <o:File HRef="image095.gif"/> <o:File HRef="image096.wmf"/> <o:File HRef="image097.png"/> <o:File HRef="image098.gif"/> <o:File HRef="image099.wmf"/> <o:File HRef="image100.png"/> <o:File HRef="image101.gif"/> <o:File HRef="image102.wmf"/> <o:File HRef="image103.png"/> <o:File HRef="image104.gif"/> <o:File HRef="image105.wmf"/> <o:File HRef="image106.png"/> <o:File HRef="image107.gif"/> <o:File HRef="image108.wmf"/> <o:File HRef="image109.png"/> <o:File HRef="image110.gif"/> <o:File HRef="image111.wmf"/> <o:File HRef="image112.png"/> <o:File HRef="image113.gif"/> <o:File HRef="image114.wmf"/> <o:File HRef="image115.png"/> <o:File HRef="image116.gif"/> <o:File HRef="image117.wmf"/> <o:File HRef="image118.png"/> <o:File HRef="image119.gif"/> <o:File HRef="image120.wmf"/> <o:File HRef="image121.png"/> <o:File HRef="image122.gif"/> <o:File HRef="image123.wmf"/> <o:File HRef="image124.png"/> <o:File HRef="image125.gif"/> <o:File HRef="image126.wmf"/> <o:File HRef="image127.png"/> <o:File HRef="image128.gif"/> <o:File HRef="image129.wmf"/> <o:File HRef="image130.png"/> <o:File HRef="image131.png"/> <o:File HRef="image132.jpg"/> <o:File HRef="image133.gif"/> <o:File HRef="image134.wmf"/> <o:File HRef="image135.png"/> <o:File HRef="image136.png"/> <o:File HRef="image137.png"/> <o:File HRef="image138.png"/> <o:File HRef="image139.png"/> <o:File HRef="image140.png"/> <o:File HRef="image141.png"/> <o:File HRef="image142.png"/> <o:File HRef="image143.png"/> <o:File HRef="image144.png"/> <o:File HRef="image145.png"/> <o:File HRef="image146.png"/> <o:File HRef="image147.png"/> <o:File HRef="image148.png"/> <o:File HRef="image149.gif"/> <o:File HRef="image150.wmf"/> <o:File HRef="image151.png"/> <o:File HRef="image152.gif"/> <o:File HRef="image153.wmf"/> <o:File HRef="image154.png"/> <o:File HRef="image155.gif"/> <o:File HRef="image156.wmf"/> <o:File HRef="image157.png"/> <o:File HRef="image158.gif"/> <o:File HRef="image159.wmf"/> <o:File HRef="image160.png"/> <o:File HRef="image161.gif"/> <o:File HRef="image162.wmf"/> <o:File HRef="image163.png"/> <o:File HRef="filelist.xml"/></xml>
Index: doc/gutshtml/SessionTw2_files/image002.wmf
+++ doc/gutshtml/SessionTw2_files/image002.wmf
Index: doc/gutshtml/SessionTw2_files/image005.wmf
+++ doc/gutshtml/SessionTw2_files/image005.wmf
Index: doc/gutshtml/SessionTw2_files/image008.wmf
+++ doc/gutshtml/SessionTw2_files/image008.wmf
Index: doc/gutshtml/SessionTw2_files/image011.wmf
+++ doc/gutshtml/SessionTw2_files/image011.wmf
Index: doc/gutshtml/SessionTw2_files/image014.wmf
+++ doc/gutshtml/SessionTw2_files/image014.wmf
Index: doc/gutshtml/SessionTw2_files/image017.wmf
+++ doc/gutshtml/SessionTw2_files/image017.wmf
Index: doc/gutshtml/SessionTw2_files/image020.wmf
+++ doc/gutshtml/SessionTw2_files/image020.wmf
Index: doc/gutshtml/SessionTw2_files/image023.wmf
+++ doc/gutshtml/SessionTw2_files/image023.wmf
Index: doc/gutshtml/SessionTw2_files/image026.wmf
+++ doc/gutshtml/SessionTw2_files/image026.wmf
Index: doc/gutshtml/SessionTw2_files/image029.wmf
+++ doc/gutshtml/SessionTw2_files/image029.wmf
Index: doc/gutshtml/SessionTw2_files/image032.wmf
+++ doc/gutshtml/SessionTw2_files/image032.wmf
Index: doc/gutshtml/SessionTw2_files/image035.wmf
+++ doc/gutshtml/SessionTw2_files/image035.wmf
Index: doc/gutshtml/SessionTw2_files/image038.wmf
+++ doc/gutshtml/SessionTw2_files/image038.wmf
Index: doc/gutshtml/SessionTw2_files/image041.wmf
+++ doc/gutshtml/SessionTw2_files/image041.wmf
Index: doc/gutshtml/SessionTw2_files/image044.wmf
+++ doc/gutshtml/SessionTw2_files/image044.wmf
Index: doc/gutshtml/SessionTw2_files/image047.wmf
+++ doc/gutshtml/SessionTw2_files/image047.wmf
Index: doc/gutshtml/SessionTw2_files/image050.wmf
+++ doc/gutshtml/SessionTw2_files/image050.wmf
Index: doc/gutshtml/SessionTw2_files/image053.wmf
+++ doc/gutshtml/SessionTw2_files/image053.wmf
Index: doc/gutshtml/SessionTw2_files/image056.wmf
+++ doc/gutshtml/SessionTw2_files/image056.wmf
Index: doc/gutshtml/SessionTw2_files/image059.wmf
+++ doc/gutshtml/SessionTw2_files/image059.wmf
Index: doc/gutshtml/SessionTw2_files/image062.wmf
+++ doc/gutshtml/SessionTw2_files/image062.wmf
Index: doc/gutshtml/SessionTw2_files/image065.wmf
+++ doc/gutshtml/SessionTw2_files/image065.wmf
Index: doc/gutshtml/SessionTw2_files/image068.wmf
+++ doc/gutshtml/SessionTw2_files/image068.wmf
Index: doc/gutshtml/SessionTw2_files/image071.wmf
+++ doc/gutshtml/SessionTw2_files/image071.wmf
Index: doc/gutshtml/SessionTw2_files/image074.wmf
+++ doc/gutshtml/SessionTw2_files/image074.wmf
Index: doc/gutshtml/SessionTw2_files/image077.wmf
+++ doc/gutshtml/SessionTw2_files/image077.wmf
Index: doc/gutshtml/SessionTw2_files/image080.wmf
+++ doc/gutshtml/SessionTw2_files/image080.wmf
Index: doc/gutshtml/SessionTw2_files/image083.wmf
+++ doc/gutshtml/SessionTw2_files/image083.wmf
Index: doc/gutshtml/SessionTw2_files/image090.wmf
+++ doc/gutshtml/SessionTw2_files/image090.wmf
Index: doc/gutshtml/SessionTw2_files/image093.wmf
+++ doc/gutshtml/SessionTw2_files/image093.wmf
Index: doc/gutshtml/SessionTw2_files/image096.wmf
+++ doc/gutshtml/SessionTw2_files/image096.wmf
Index: doc/gutshtml/SessionTw2_files/image099.wmf
+++ doc/gutshtml/SessionTw2_files/image099.wmf
Index: doc/gutshtml/SessionTw2_files/image102.wmf
+++ doc/gutshtml/SessionTw2_files/image102.wmf
Index: doc/gutshtml/SessionTw2_files/image105.wmf
+++ doc/gutshtml/SessionTw2_files/image105.wmf
Index: doc/gutshtml/SessionTw2_files/image108.wmf
+++ doc/gutshtml/SessionTw2_files/image108.wmf
Index: doc/gutshtml/SessionTw2_files/image111.wmf
+++ doc/gutshtml/SessionTw2_files/image111.wmf
Index: doc/gutshtml/SessionTw2_files/image114.wmf
+++ doc/gutshtml/SessionTw2_files/image114.wmf
Index: doc/gutshtml/SessionTw2_files/image117.wmf
+++ doc/gutshtml/SessionTw2_files/image117.wmf
Index: doc/gutshtml/SessionTw2_files/image120.wmf
+++ doc/gutshtml/SessionTw2_files/image120.wmf
Index: doc/gutshtml/SessionTw2_files/image123.wmf
+++ doc/gutshtml/SessionTw2_files/image123.wmf
Index: doc/gutshtml/SessionTw2_files/image126.wmf
+++ doc/gutshtml/SessionTw2_files/image126.wmf
Index: doc/gutshtml/SessionTw2_files/image129.wmf
+++ doc/gutshtml/SessionTw2_files/image129.wmf
Index: doc/gutshtml/SessionTw2_files/image134.wmf
+++ doc/gutshtml/SessionTw2_files/image134.wmf
Index: doc/gutshtml/SessionTw2_files/image150.wmf
+++ doc/gutshtml/SessionTw2_files/image150.wmf
Index: doc/gutshtml/SessionTw2_files/image153.wmf
+++ doc/gutshtml/SessionTw2_files/image153.wmf
Index: doc/gutshtml/SessionTw2_files/image156.wmf
+++ doc/gutshtml/SessionTw2_files/image156.wmf
Index: doc/gutshtml/SessionTw2_files/image159.wmf
+++ doc/gutshtml/SessionTw2_files/image159.wmf
Index: doc/gutshtml/SessionTw2_files/image162.wmf
+++ doc/gutshtml/SessionTw2_files/image162.wmf
Index: doc/gutshtml/SessionTw2_files/oledata.mso
+++ doc/gutshtml/SessionTw2_files/oledata.mso
ࡱ >
R ͳ _ 9 6 0 5 6 1 5 7 9 y _ 9 6 0 5 6 1 5 8 0 ] _ 9 6 0 5 6 1 5 8 1 X
! " # $ % & ( ) * + , - . 0 1 2 3 4 5 7 8 9 : ; < > ? @ A B C E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z xp^RЀ3ÿlHbPLPÄ!14axIL<*1@ݐ6,wf)9dĈ"~g|\;H_h?+ ?k?H}ד!(O {YHV(4`y#0Bq#00sAzEi%
%y
z<@)`73|TH)q>( @=v4{BLfU\̲B@V& fa102 *QzWBRDL`ǠU*+ C9=c'쉠(T ٭2' xp^RЀ3ÿlHbPLPÄ!14axIL<*1@ݐ6,wv`)9dĈ"~g|\;H_h?+ ?k?H}ד!(O {YHV(4FjlL9\ŁofrQ~q~ZkaibIf~P%.8z_,7fJ
+2P\OEPs3?#7 H}222$20dK<?(RYz;AeeFOm0 Q1 xp^RЀ3ÿlHbPLPÄ!14axIL<*1@ݐ6,wv`)9dĈ"~g|\;H_h?+ ?k?H}ד!(O {YHV(4FjlL9\ŁofrQ~q~ZkaibIf~P%.8z_,7fJ
+`O<!&3*.F
6A"O!!X1(0AyeD
CNO *{(s6
~jl? B1 xp^RЀ3ÿlHbPLPÄ!14axIL<*1@Pߛ6Y#3+SrRɶ?D@w$1dl~W@~"~4(j'CP,,A`?ȭr4`y# "ɩ8L./O+Qp-,M,S03`J|GϘBb]Be@eXAo(Ùod0By qYFd`f202 ejTy4%'A+#TV rz"NP|Sl@C~ _ 9 6 0 5 6 1 5 8 3 _ 9 6 0 5 6 1 5 8 5 _ 9 6 0 5 6 1 5 8 8 _ 9 6 0 5 6 1 5 9 4 ' ;3 xp^RЀ3ÿlHbPLPÄ!14axIL<*1@ݐ6Og;g)9dĈ"~g|\;H_h?+ ?k?H}ד!(O {YHVXo
-F E&S0S
3$}q ᛙ\_VZXX`gr 1p01Mĺ0ʰP~Q3oE!&322sq12u20u@pHmi@|jc`jRbj +35G+ŵb@
@&T
&Yx"PPʐP ,}2Je`!'bWeFOm0 87 xTJBAfFY]IZԦZTP/Efi
@=A #vy;s[ݫmD?a3sy?*3(-:V WrնmGmWS!|o7z^kyrp'_v̔]k~Spa!N<_"sr/,2◼>2VgWտ9WP-UJZ:{mº9#ͧr1%icCdG%ug!gX䥟n"D2b$9Fk 9M:IЉHV -I7^ZEVxIJ'hʹ\!,H!Ovtj*zS}oa+ i|6 xV/AfmDƩ4'8 hBWiřqv 7W A'z*bR闼ٝf潗NzQ4 WeYjBSwWr[Y2O|pޟ?Lwbj~}؏Kt5SX&~vKzwҙUK^~ޜ+[3Iir<g;eJWY4LK榙EƳaf" Z46˙ēx>Ϻ@WC=,}u~l/pUZ1iL6Hc#Nmv @itZ{'FVN'&x!BP1l}'A$$S
7,X@u"V-W]9BWOn\54ꙿ 'sʞUUo/Z
@ xUJQ9Am@
W-jS.*UKr/j >j* =@_ 9 6 0 5 6 1 5 9 6
/ _ 9 6 0 5 6 1 5 9 9 6 _ 9 6 0 5 6 1 6 0 1 = _ 9 6 0 5 6 1 6 1 0 D r:w推m#33otaMscm64M1#~I|ax<oܲثX^_~̔= 3 up7ag!=k/K597<ٌ%ՙMunNo4F7EsяFȕ#B%S֍|$_-;J<sm>_ ϺnShܤ U%w1LQzZ$IeضK,IDҪAZ@$[LK}IPAe4}`Wi箦r^}r)뱿;1ޝ: xVJ@=3S3ED%nEqBAj.|*D"
~u;ͤuD7jp{K7`5Scʯ9ㅝ6~>1=}y=~禗g϶&/=j!8k' '`!c/w)<ltSS̊/uc!e1e{flT֘h`Zg.+N:l#Y(mSf#=gjչB
w((\+K42U1Om1Nzxy&6T~h*K̨rc9C3 e:P7xebHҰame?_M{aY? xU=KA}uADCFBBSYFI wKA'h/[ښs6TwM47ofowY@V Ph1eu\eYN꣧MSб>~߸'^-?D 9Μ;YK=.1G&qDyb߳~e)&r~FB&`PH_<\}ʯ}?`oc0:)B^Fv/oL1ϕRŬiDbZCC1|-f I=s[ {eFJcbSg>gɒyرS4Y|;B yY@./֙kK*%ȡDREd`ScW]9B|hs]-e"N9 ` x\{EfwnnrW6GJ]Br(E.]!exi
QB
D-hQ&(%`U|%Du,u|L+-?oR,0HG3ĉt:mӁ_q`L@E@1PĀRLV{'jZF hV%OZs`" f6]V&!;כhHHe9GͿ4*v.HI_2r3<5c&D.62wg,*++h!'~_۠O")E>JjO>X5^BL?ۀe:5F)Ap<$Mx T!{ԕRd+ĭ4rL$JV]Z`|xx{`?' m'VZZmV[FڨV[k%ZmL-j˴ڸV[VhJJjkZNjFImj'j v=&74Qyn[,c#"H",aL",a\" RU"akEX'z6Q+swP$f+ZW(A,U2iY|Qe;̲d#,Y8-|Z(ۣD2RÙC)nyYy.~s4-8SQLҴuV:y")D ML8R)fUGS@wV@뇅^4T[EZ.;DxgM犟2OqBX>XJV"C0/w0y)q6HoiMGMyiҔ$$% 4a̞as\l#f7s'bj|3z24̅k<]ojO戋D\u14E+=\̥b<]e%.渆9曹ܓ9b.0f{2+4e<\4q̥qs7s̓\a\\b0O\<\a\\b0Wfz2W4վ#.zsoBOs7s'sQ\ds17i}3.fso'sy7sȓŜ07f6<\̓4;ɓY0/q0<T0LÆH˙CAdo{O634HtA,'Gُh Ҙp}͔Niw[ҐcvJeytZPX:IKOZ
J˶Ԫ{/}7psi[=l<}/8?ۖJu[K=A<fϐmP0};ɆcCiy1}sN-;
RS\rZx*JxRTNö!eʱXo%-8-<ܬ,웬-siqzgHZ6XxŐox%i8-zשzlNzEya|=} _ 9y7(i_ _xsƥijNDWF\ұU_TQy5?<x8O %@-CiDzm[Avᘎ%WM&.ۡ
if8F;.ZO<7#^- ȲQX
mqGRtѼo==gWϛ*؋'b\jA9+WoK~NM
Ǘ9uy`O.Ι}S1#[<kw#~HT.C#CFk'ExV-}_>nWtxޏn_o9"w$щUʯ-uH{V.e{iLt;B>5˙}k؝%GxE_aHJB<^~^3䧖>?c{z8V[ŔۥԳgáֺӉ9ދQ#W<Net^Ƕ }y,ґTcϱ@_O'# a`6.\z{,Wr|MQ'KGeY}q>T:3ߟ/EPUq~cŶ!Ol~]X->k:U+K,ubc${{ݣbX,t4~t/)ECIICݣ nOKLOt:kK暮[=oZnUmL+{/T-J}!}orp49!:q0=2YCnQĊDPr$1846)ζ t)y&Sit KxX,W.OW.5{=y3{_ ~^6_wCaSG186ȹ%n{S)KfK&my^9k"r~)߷(OQoUoWX~(_|?|?|L'g$++obYTS| "/1/O/m/ //b/B/"/!/?5;v쨃Q;㥎:Q/rNG\kt;똣r{K_v̶[5mדfz̶a/v쀙mff3=|Wamv.]vyyv_l7e;oS'LvwNcz۾;9xK;LK?I,oN3o5ħL 8gvˉ4|E!+ǁ}hg|9(ʐl|v8;Hnx䶩gI?Ork$sErTV*ZCn1<7ې۪*EVܐh&{}ukh]ֆfC)Zyw9__eEOgakrǁH H H r&kϚ/!~:eYyYZ(y?1&s #9O!SHxl(qI\jɹT/PVqxD<%=!е~tc24}Ñ~B)/TZ@ٟƍXv\,$g"Rsڐ\GKpԁe8ob:6ul:.:,O@ $@ $@ $@q |
Index: doc/gutshtml/handout_files/filelist.xml
+++ doc/gutshtml/handout_files/filelist.xml
<xml xmlns:o="urn:schemas-microsoft-com:office:office"> <o:MainFile HRef="::handout.htm"/> <o:File HRef="image001.jpg"/> <o:File HRef="image002.jpg"/> <o:File HRef="image003.jpg"/> <o:File HRef="image004.jpg"/> <o:File HRef="image005.png"/> <o:File HRef="image006.jpg"/> <o:File HRef="image007.jpg"/> <o:File HRef="image008.jpg"/> <o:File HRef="image009.jpg"/> <o:File HRef="image010.jpg"/> <o:File HRef="image011.jpg"/> <o:File HRef="filelist.xml"/></xml>
--www1025296230--