<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jrgreen118</id>
	<title>Sugar Labs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jrgreen118"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Jrgreen118"/>
	<updated>2026-05-14T09:47:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29420</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29420"/>
		<updated>2009-05-18T19:12:17Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Booting the XO from the SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
resize2fs -p /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
resize2fs -p /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Booting the XO from the SD=====&lt;br /&gt;
More than likely, this will not work right away, most implementations require some tweaking prior to properly booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Post XS School Server Installation Configuration:=====&lt;br /&gt;
The following are commands that were run after installing XS on a Virtual Machine. Idealy, the newly configured SD card can now act as the operating system for the Virtual Machine allowing further versatility. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code (parser.awk) can be downloaded [http://www.filedropper.com/parser here] &amp;lt;br&amp;gt;&lt;br /&gt;
Date file (students.dat) can be downloaded [http://www.filedropper.com/students here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With data in the same directory and with your PWD also as the same directory.&lt;br /&gt;
Issue the command @ the command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parser.awk:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side. &lt;br /&gt;
# or if they get less than 70% on compounds, because getting a 51% on compounds and 70% on non compounds doesnt satisfy&lt;br /&gt;
# understaning of OoO&lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
===Wesley Dillingham===&lt;br /&gt;
will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
I am becoming more interested in a literal interpretation of the Massachusetts curriculum requirements and integrating them into moodle.  I would like to shoot for coming up with a modified quiz module which, reads from the api which in turn reads from multiple games in order to suffice the curriculum standards, As no one game has the format to test for all of the requirements. I will be developing using php, and my immediate goal, is to provide the raw capabilities in php to understand  and interpret information from the games to test understanding of guidelines. Bonus work includes, graphs, and other heuristics which the teacher may find valuable. I would like to work on helping the mathblaster game provide information relevant to my teacher reporting application via the API.&lt;br /&gt;
&lt;br /&gt;
====Tenative summer shedule====&lt;br /&gt;
*Week 1: Begin learning and understanding of PHP.&lt;br /&gt;
*Week 2: Complete conversion of &amp;quot;Operations  awk script&amp;quot; into PHP.&lt;br /&gt;
*Week 3: &amp;quot;Order of operations awk script&amp;quot; into PHP.&lt;br /&gt;
*Week 4: Gain understanding of PHP&#039;s querying of MySQL, convert above PHP scripts to gain information via MySQL rather than input file&lt;br /&gt;
*Week 6: Integrate above PHP scripts into Pre-existing quiz module.&lt;br /&gt;
*Week 7 &amp;amp; 8: Identify, 2 or 3 additional curriculum standards find games which can be used, to satisfy requirements, create php logic, to interpret information gained through MySQl&lt;br /&gt;
*Week 9: Work tangentially with mathblaster team and facilitate Mathblaster &amp;lt;&amp;gt; api and api &amp;lt;&amp;gt; teacher-reporter data exchange.&lt;br /&gt;
*Week 10: Begin work on teacher interface. Wrap up project, plan for adanonment or continuation.,&lt;br /&gt;
&lt;br /&gt;
===Jeremiah Green===&lt;br /&gt;
will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
*Get networking running on the XO.&lt;br /&gt;
*Have Moodle running on the XO.&lt;br /&gt;
*Have Database running on the XO.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29419</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29419"/>
		<updated>2009-05-18T19:11:25Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Jeremiah Green */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
resize2fs -p /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
resize2fs -p /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, most implementations require some tweaking prior to properly booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Post XS School Server Installation Configuration:=====&lt;br /&gt;
The following are commands that were run after installing XS on a Virtual Machine. Idealy, the newly configured SD card can now act as the operating system for the Virtual Machine allowing further versatility. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code (parser.awk) can be downloaded [http://www.filedropper.com/parser here] &amp;lt;br&amp;gt;&lt;br /&gt;
Date file (students.dat) can be downloaded [http://www.filedropper.com/students here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With data in the same directory and with your PWD also as the same directory.&lt;br /&gt;
Issue the command @ the command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parser.awk:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side. &lt;br /&gt;
# or if they get less than 70% on compounds, because getting a 51% on compounds and 70% on non compounds doesnt satisfy&lt;br /&gt;
# understaning of OoO&lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
===Wesley Dillingham===&lt;br /&gt;
will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
I am becoming more interested in a literal interpretation of the Massachusetts curriculum requirements and integrating them into moodle.  I would like to shoot for coming up with a modified quiz module which, reads from the api which in turn reads from multiple games in order to suffice the curriculum standards, As no one game has the format to test for all of the requirements. I will be developing using php, and my immediate goal, is to provide the raw capabilities in php to understand  and interpret information from the games to test understanding of guidelines. Bonus work includes, graphs, and other heuristics which the teacher may find valuable. I would like to work on helping the mathblaster game provide information relevant to my teacher reporting application via the API.&lt;br /&gt;
&lt;br /&gt;
====Tenative summer shedule====&lt;br /&gt;
*Week 1: Begin learning and understanding of PHP.&lt;br /&gt;
*Week 2: Complete conversion of &amp;quot;Operations  awk script&amp;quot; into PHP.&lt;br /&gt;
*Week 3: &amp;quot;Order of operations awk script&amp;quot; into PHP.&lt;br /&gt;
*Week 4: Gain understanding of PHP&#039;s querying of MySQL, convert above PHP scripts to gain information via MySQL rather than input file&lt;br /&gt;
*Week 6: Integrate above PHP scripts into Pre-existing quiz module.&lt;br /&gt;
*Week 7 &amp;amp; 8: Identify, 2 or 3 additional curriculum standards find games which can be used, to satisfy requirements, create php logic, to interpret information gained through MySQl&lt;br /&gt;
*Week 9: Work tangentially with mathblaster team and facilitate Mathblaster &amp;lt;&amp;gt; api and api &amp;lt;&amp;gt; teacher-reporter data exchange.&lt;br /&gt;
*Week 10: Begin work on teacher interface. Wrap up project, plan for adanonment or continuation.,&lt;br /&gt;
&lt;br /&gt;
===Jeremiah Green===&lt;br /&gt;
will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
*Get networking running on the XO.&lt;br /&gt;
*Have Moodle running on the XO.&lt;br /&gt;
*Have Database running on the XO.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29412</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29412"/>
		<updated>2009-05-18T19:03:04Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Setting Up the Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
resize2fs -p /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
resize2fs -p /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, most implementations require some tweaking prior to properly booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Post XS School Server Installation Configuration:=====&lt;br /&gt;
The following are commands that were run after installing XS on a Virtual Machine. Idealy, the newly configured SD card can now act as the operating system for the Virtual Machine allowing further versatility. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code (parser.awk) can be downloaded [http://www.filedropper.com/parser here] &amp;lt;br&amp;gt;&lt;br /&gt;
Date file (students.dat) can be downloaded [http://www.filedropper.com/students here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With data in the same directory and with your PWD also as the same directory.&lt;br /&gt;
Issue the command @ the command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Parser.awk:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side. &lt;br /&gt;
# or if they get less than 70% on compounds, because getting a 51% on compounds and 70% on non compounds doesnt satisfy&lt;br /&gt;
# understaning of OoO&lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
===Wesley Dillingham===&lt;br /&gt;
will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
I am becoming more interested in a literal interpretation of the Massachusetts curriculum requirements and integrating them into moodle.  I would like to shoot for coming up with a modified quiz module which, reads from the api which in turn reads from multiple games in order to suffice the curriculum standards, As no one game has the format to test for all of the requirements. I will be developing using php, and my immediate goal, is to provide the raw capabilities in php to understand  and interpret information from the games to test understanding of guidelines. Bonus work includes, graphs, and other heuristics which the teacher may find valuable. I would like to work on helping the mathblaster game provide information relevant to my teacher reporting application via the API.&lt;br /&gt;
&lt;br /&gt;
====Tenative summer shedule====&lt;br /&gt;
*Week 1: Begin learning and understanding of PHP.&lt;br /&gt;
*Week 2: Complete conversion of &amp;quot;Operations  awk script&amp;quot; into PHP.&lt;br /&gt;
*Week 3: &amp;quot;Order of operations awk script&amp;quot; into PHP.&lt;br /&gt;
*Week 4: Gain understanding of PHP&#039;s querying of MySQL, convert above PHP scripts to gain information via MySQL rather than input file&lt;br /&gt;
*Week 6: Integrate above PHP scripts into Pre-existing quiz module.&lt;br /&gt;
*Week 7 &amp;amp; 8: Identify, 2 or 3 additional curriculum standards find games which can be used, to satisfy requirements, create php logic, to interpret information gained through MySQl&lt;br /&gt;
*Week 9: Work tangentially with mathblaster team and facilitate Mathblaster &amp;lt;&amp;gt; api and api &amp;lt;&amp;gt; teacher-reporter data exchange.&lt;br /&gt;
*Week 10: Begin work on teacher interface. Wrap up project, plan for adanonment or continuation.,&lt;br /&gt;
&lt;br /&gt;
===Jeremiah Green===&lt;br /&gt;
will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29386</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29386"/>
		<updated>2009-05-18T17:17:52Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Post XS School Server Installation Configuration: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, most implementations require some tweaking prior to properly booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Post XS School Server Installation Configuration:=====&lt;br /&gt;
The following are commands that were run after installing XS on a Virtual Machine. Idealy, the newly configured SD card can now act as the operating system for the Virtual Machine allowing further versatility. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code (parser.awk) can be downloaded [http://www.filedropper.com/parser here] &amp;lt;br&amp;gt;&lt;br /&gt;
Date file (students.dat) can be downloaded [http://www.filedropper.com/students here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side. &lt;br /&gt;
# or if they get less than 70% on compounds, because getting a 51% on compounds and 70% on non compounds doesnt satisfy&lt;br /&gt;
# understaning of OoO&lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29383</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29383"/>
		<updated>2009-05-18T17:16:21Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Booting the XO from the SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, most implementations require some tweaking prior to properly booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Post XS School Server Installation Configuration:=====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side. &lt;br /&gt;
# or if they get less than 70% on compounds, because getting a 51% on compounds and 70% on non compounds doesnt satisfy&lt;br /&gt;
# understaning of OoO&lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29382</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29382"/>
		<updated>2009-05-18T17:15:48Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Documentation &amp;amp; Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, most implementations require some tweaking prior to properly booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side. &lt;br /&gt;
# or if they get less than 70% on compounds, because getting a 51% on compounds and 70% on non compounds doesnt satisfy&lt;br /&gt;
# understaning of OoO&lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29380</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29380"/>
		<updated>2009-05-18T17:05:13Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Booting the XO from the SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, most implementations require some tweaking prior to properly booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29379</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29379"/>
		<updated>2009-05-18T17:02:42Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Getting a Developer Key */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a link for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29378</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29378"/>
		<updated>2009-05-18T17:01:46Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Setting Up the Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file, uncompressed previously, is accessible by the Linux machines.&lt;br /&gt;
*Use the command, &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29377</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29377"/>
		<updated>2009-05-18T16:59:42Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Setting Up the Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29376</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29376"/>
		<updated>2009-05-18T16:58:45Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Setting Up the Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**Gparted was excellent for formating the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but in several instances errors were experienced. In lieu fdisk works great.&lt;br /&gt;
**To enter fdisk, use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fdisk /dev/sd*1&lt;br /&gt;
or&lt;br /&gt;
fdisk /dev/mmcblk*p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. In most instances it will be &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29375</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29375"/>
		<updated>2009-05-18T16:55:59Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Un-compress the image: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29374</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29374"/>
		<updated>2009-05-18T16:55:38Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Un-compress the image: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked well.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29372</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29372"/>
		<updated>2009-05-18T16:51:31Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Booting the XO from the SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
**Here&#039;s a quick resource on what this is [http://wiki.laptop.org/go/SD_Boot_olpc.fth SD Booting].&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29371</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29371"/>
		<updated>2009-05-18T16:49:15Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Booting the XO from the SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
*Save the changes and put the SD card back in the XO. Reboot the machine and at the prompt again type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29370</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29370"/>
		<updated>2009-05-18T16:47:24Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Booting the XO from the SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*With the SD card inserted in the XO, turn the machine on and press the &amp;quot;Esc&amp;quot; key to interrupt start-up.&lt;br /&gt;
*At the prompt type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok boot sd:\boot\olpc.fth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*It should attempt the boot sequence, but more than likely will fail with a Kernel Panic!!!....error&lt;br /&gt;
*This is almost expected, but it&#039;s actually an important step. If you look further up on the screen, you should see an error in regards to mounting the file system. &lt;br /&gt;
*Around this area, you should also see a list of strange numbers (i.e. b102:) followed by devices (i.e. ramdisk...)&lt;br /&gt;
*Find the row for your SD card, it should be labeled something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
b301:       mmcblk0p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Remember the b301 number.&lt;br /&gt;
*Connect the SD card back to the Linux PC.&lt;br /&gt;
*Open the file /boot/olpc.fth&lt;br /&gt;
*You&#039;ll see a line like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot; ro root=mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 &lt;br /&gt;
rootfstype=ext2 fbcon=font:SUN12x22&amp;quot; to boot-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Change the &amp;quot;root=******&amp;quot; to be the variable recorded earlier.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29369</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29369"/>
		<updated>2009-05-18T16:26:03Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* XS SchoolServer on the XO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Booting the XO from the SD====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29366</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29366"/>
		<updated>2009-05-18T16:24:31Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Booting the XO from the SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Getting a Developer Key=====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
*The easiest way to go about obtaining this is to boot into the XO&#039;s Sugar OS. Open the browse application. Near the bottom right of the home page, there will be a like for &amp;quot;Get a Developer Key&amp;quot;.&lt;br /&gt;
**Click this link and on the next page click the &amp;quot;Submit Query.&amp;quot; Go through this process again after 24 hours and the key should be available.&lt;br /&gt;
**Upon return follow the directions displayed to download the key.&lt;br /&gt;
*Reboot the XO and tap the &amp;quot;Esc&amp;quot; key to interrupt the booting procedure. At the ok prompt type: &amp;lt;pre&amp;gt;ok disable-security&amp;lt;/pre&amp;gt;&lt;br /&gt;
**The machine will probably reboot. If so, tap the &amp;quot;Esc&amp;quot; key and type the above command again. It may reboot one final time.&lt;br /&gt;
**Upon this reboot tap the &amp;quot;Esc&amp;quot; key again and type the above command a final time. It should print out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ok disable-security&lt;br /&gt;
No wp tag&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29365</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29365"/>
		<updated>2009-05-18T16:06:23Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* How To: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
***where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Booting the XO from the SD=====&lt;br /&gt;
More than likely, this will not work right away, my implementation required some tweaking prior to fully booting.&lt;br /&gt;
*First the XO must have a [http://wiki.laptop.org/go/Activation_and_Developer_Keys developer&#039;s key!!!]&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29364</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29364"/>
		<updated>2009-05-18T16:00:52Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Uncompress the image: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Un-compress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*Un-compress the file&lt;br /&gt;
**In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
**In Linux, this command works just as well&amp;lt;pre&amp;gt;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt; where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img.gz of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29363</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29363"/>
		<updated>2009-05-18T15:58:42Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* How To: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
=====Uncompress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
*In Linux, the command &amp;quot;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot; works just as well.&lt;br /&gt;
&lt;br /&gt;
=====Setting Up the Environment=====&lt;br /&gt;
With the SD card connected to the Linux PC:&lt;br /&gt;
*Using a tool of your choice format the SD card to ext2 or ext3 (Linux 83).&lt;br /&gt;
**I used gparted and formated the SD card to ext3, but fdisk would also work.&lt;br /&gt;
*Mark the partition with the boot flag&lt;br /&gt;
**This can be done using gparted, but mine had issues applying the changes. I used fdisk.&lt;br /&gt;
**To enter fdisk, use &amp;lt;pre&amp;gt;fdisk /dev/sd*1&amp;lt;/pre&amp;gt; where * is the letter associated with the SD device and the 1 is the partition. Once in fdisk, use the help to determine the specific command to mark the boot flag. For me it was &amp;quot;a&amp;quot;.&lt;br /&gt;
*Next ensure the .img file uncompressed previously is accessible by the Linux machines. I used another flash drive.&lt;br /&gt;
*Use the command &amp;lt;pre&amp;gt;dd if=OLPC-School-Server-0.5.2-dev01-i386.img.gz of=/dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
**This will take some time depending on the system performance.&lt;br /&gt;
*Use resize2fs to re-size the partition &amp;lt;pre&amp;gt;resize2fs -p /dev/sd*1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29362</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29362"/>
		<updated>2009-05-18T15:42:42Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* How To: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
&lt;br /&gt;
=====Uncompress the image:=====&lt;br /&gt;
*Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
*In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
*In Linux, the command &amp;quot;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot; works just as well.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29361</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29361"/>
		<updated>2009-05-18T15:42:04Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* How To: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
=====Necessary hardware to replicate our setup includes:===== &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
&lt;br /&gt;
=====Uncompress the image:=====&lt;br /&gt;
*In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
*In Linux, the command &amp;quot;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot; works just as well.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29360</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29360"/>
		<updated>2009-05-18T15:41:15Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* XS SchoolServer on the XO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful website to read before beginning can be found here: [http://wiki.laptop.org/go/XS-on-XO Laptop.org&#039;s XS-on-XO.]&lt;br /&gt;
&lt;br /&gt;
Necessary hardware to replicate our setup includes: &lt;br /&gt;
*XO Laptop&lt;br /&gt;
*Linux Computer with SD Card Reader &lt;br /&gt;
**Can be physical machine or virtual. Also, some things can be done in Windows.&lt;br /&gt;
*SD card which is at least 4GB (We used an 8GB A-DATA SDHC)&lt;br /&gt;
&lt;br /&gt;
Download the image file: [http://xs-dev.laptop.org/xs/other/OLPC-School-Server-0.5.2-dev01-i386.img.gz OLPC-School-Server-0.5.2-dev01-i386.img.gz]&lt;br /&gt;
&lt;br /&gt;
Uncompress the image:&lt;br /&gt;
*In Windows, [http://www.rarlab.com/download.htm WinRAR] worked for me.&lt;br /&gt;
*In Linux, the command &amp;quot;gzip -d OLPC-School-Server-0.5.2-dev01-i386.img.gz&amp;quot; works just as well.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29359</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29359"/>
		<updated>2009-05-18T15:29:18Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* XS SchoolServer on the XO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB. There is a small amount of documentation available which is excellent and extremely helpful, but it can be difficult to use at times. Below is a quick break down of what we did and how to replicate it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How To:====&lt;br /&gt;
&lt;br /&gt;
The most helpful&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29357</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29357"/>
		<updated>2009-05-18T15:13:56Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* XS SchoolServer on the XO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
A major barrier to achieving our goals is the idea that the School Server needs the ability to be versatile and portable. While some may have resources to dedicate substantial hardware to such a server, others may find themselves with nothing more than the XO laptops. From this stems the idea of running this server on one of the XO laptops via either a USB flash drive, SD card, or the internal NAND hard drive.&lt;br /&gt;
&lt;br /&gt;
When fully installed on an SD card, the base operating system takes up about 1.6GB.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29356</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29356"/>
		<updated>2009-05-18T15:06:52Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* After Class Plans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29355</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29355"/>
		<updated>2009-05-18T15:06:16Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* After Class Plans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XS SchoolServer on the XO==&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29354</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29354"/>
		<updated>2009-05-18T15:04:44Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* After Class Plans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah Green will continue working on this project when time is available to devote.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29350</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29350"/>
		<updated>2009-05-18T14:31:10Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Teachers guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add information here.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29349</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29349"/>
		<updated>2009-05-18T14:30:26Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* &amp;quot;How to Play/Use&amp;quot; for end user */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Jeremiah to add either additional information or a note to see the above section for directions.====&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add information here.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29348</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29348"/>
		<updated>2009-05-18T14:29:30Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Jeremiah to add for his component - put xs on xo directions here, or in subsection. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====School Server Running on an XO====&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Jeremiah to add either additional information or a note to see the above section for directions.====&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add information here.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29347</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29347"/>
		<updated>2009-05-18T14:26:32Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Teachers guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Jeremiah to add for his component - put xs on xo directions here, or in subsection.====&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Jeremiah to add either additional information or a note to see the above section for directions.====&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add information here.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29346</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29346"/>
		<updated>2009-05-18T14:26:06Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Jeremiah to add for his component - put xs on xo directions here, or in subsection. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Jeremiah to add for his component - put xs on xo directions here, or in subsection.====&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add either additional information or a note to see the above section for directions.&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add information here.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29345</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=29345"/>
		<updated>2009-05-18T14:25:42Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* &amp;quot;How to Play/Use&amp;quot; for end user */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [[User:Gdk/4th_Grade_Maths | Curriculum Standards]].&lt;br /&gt;
&lt;br /&gt;
The modified Moodle modules will run on a customized XS School Server operating system. Our goal is to allow results and / or grades, from student activities to be readily available to teachers. Based on their wants and needs, the teachers can then generate custom reports on a class or student and have the ability to determine what types of problems students are finding most difficult. In the end we imagine the XS environment running on an XO itself, allowing the teachers the same portability as the students.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [[User:Wwdillingham | Wesley Dillingham]] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [[User:jrgreen118 | Jeremiah Green]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [[olpc:School_server | XS]], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [[olpc:XS-on-XO | VirtualBox]] OSE Virtual Machine&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [[olpc:XS-on-XO | here]].&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;How to Play/Use&amp;quot; for end user==&lt;br /&gt;
&lt;br /&gt;
Our project is not intended for a direct use by students. Components (not yet developed) under the scope of our project exist on students computer&#039;s in so far as facilitating the data movement from the XO to the XS. Therefore, there are no directions for students on how to use our application, it will be entirely transparent to them. When a student begins an activity which is compatible with our application, it will automatically report information to the API. Our application will then read this information from the API and produce reports to the teacher. We envision this interface to be web based, allowing the teacher to select particular games, and as a subcategory, the particular curriculum requirements in which that game uses.&lt;br /&gt;
&lt;br /&gt;
At this moment (5/18/2009) we only have a script which analyzes performance on particular mathematical operations and the students ability to understand order of operations. &lt;br /&gt;
&lt;br /&gt;
In order to run this script (parser.awk) issue the command, &amp;lt;pre&amp;gt;awk -f parser.awk students.dat&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Jeremiah to add for his component - put xs on xo directions here, or in subsection.==&lt;br /&gt;
&lt;br /&gt;
== Teachers guide ==&lt;br /&gt;
&lt;br /&gt;
Student.dat file fields:&amp;lt;pre&amp;gt;&lt;br /&gt;
MAC-ADDRESS STUDENT_NAME OPERATION CORRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;pre&amp;gt;&lt;br /&gt;
0C7B6G0023BC Wesley 9/3+7 1&lt;br /&gt;
0C7B6G04DBBA Jeremiah 4+10/7 0&lt;br /&gt;
0C7B6GBA5D7D Billy 88-28*2 0&lt;br /&gt;
0C7B6G07E9HB Bob 4*5 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouput Example: &amp;lt;pre&amp;gt;Student    Only +  Contains + Only -  Contains - Only *  Contains * Only /  Contains / Understands OoO?&lt;br /&gt;
wes        25      28         12      100        80      83         71      53         no         &lt;br /&gt;
bob        80      77         0       66         100     100        33      60         yes        &lt;br /&gt;
jeremiah   0       0          16      33         40      50         14      33         no         &lt;br /&gt;
billy      66      70         33      53         50      37         100     80         yes        &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;note: This output is not reflective of the student.dat example data above&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add either additional information or a note to see the above section for directions.&lt;br /&gt;
&lt;br /&gt;
==After Class Plans==&lt;br /&gt;
&lt;br /&gt;
Wesley Dillingham will continue this project into the summer as part of RIT&#039;s cooperative education program.&lt;br /&gt;
&lt;br /&gt;
Jeremiah to add information here.&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Code can be downloaded [http://www.filedropper.com/parser here]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Wesley Dillingham&lt;br /&gt;
#Filename parser.awk&lt;br /&gt;
#Last updated May 17th 2009&lt;br /&gt;
&lt;br /&gt;
BEGIN{&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, &amp;quot;Student&amp;quot;, &amp;quot;Only +&amp;quot;, &amp;quot;Contains +&amp;quot;, &amp;quot;Only -&amp;quot;, &amp;quot;Contains -&amp;quot;, &amp;quot;Only&lt;br /&gt;
*&amp;quot;, &amp;quot;Contains *&amp;quot;, &amp;quot;Only /&amp;quot;, &amp;quot;Contains /&amp;quot;, &amp;quot;Understands OoO?&amp;quot;) &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 #*****Field Reference *************&lt;br /&gt;
&lt;br /&gt;
	#MAC=$1&lt;br /&gt;
	#NAME=$2&lt;br /&gt;
	#OPERATION=$3&lt;br /&gt;
	#SUCCESS=$4&lt;br /&gt;
&lt;br /&gt;
#************************************&lt;br /&gt;
&lt;br /&gt;
#Because in the end statement we will have to loop through one of the arrays, which will be localized according&lt;br /&gt;
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a&lt;br /&gt;
#question with one of these operations, and if we looped through that particular operation, we would not represent&lt;br /&gt;
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array&lt;br /&gt;
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.&lt;br /&gt;
CLASS[$2]&lt;br /&gt;
  &lt;br /&gt;
	#any line that has division, but not necessarily just.  &lt;br /&gt;
	if ( match($3, /\//) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many division problem student $2 encounters = divison[$2]&lt;br /&gt;
		division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with multiplication but not  neccearily just multiplication&lt;br /&gt;
	if ( match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
		#How many multiplication problem student $2 encounters = multiplication[$2]&lt;br /&gt;
		multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#any line with addition but not necessarily just addition&lt;br /&gt;
	if ( match($3, /\+/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many addition problem student $2 encounters = addition[$2]&lt;br /&gt;
		addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	#contains subtractions, excludes negative numbers, as it only matches expressions with a &amp;quot;-&amp;quot; sandwiched b/w two digits&lt;br /&gt;
	if ( match($3, /[0-9]\-[0-9]/) )  &lt;br /&gt;
	{				&lt;br /&gt;
		#How many subtraction problem student $2 encounters = subtraction[$2]&lt;br /&gt;
		subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# Matches operations with ONLY DIVISION&lt;br /&gt;
	if ( match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) ) &lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		#How many ONLY division problem student $2 encounters = 0_divison[$2]&lt;br /&gt;
		o_division[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_division_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY SUBTRACTION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]&lt;br /&gt;
		o_subtraction[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_subtraction_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY ADDITION&lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; match($3, /\+/) &amp;amp;&amp;amp; !match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]&lt;br /&gt;
		o_addition[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_addition_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	# Matches operations with ONLY MULTIPLICATION &lt;br /&gt;
	if (  !match($3, /\//) &amp;amp;&amp;amp; !match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; !match($3, /\+/) &amp;amp;&amp;amp; match($3, /\*/) )&lt;br /&gt;
	{&lt;br /&gt;
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]&lt;br /&gt;
		o_multiplication[$2]++ &lt;br /&gt;
		&lt;br /&gt;
		if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
		{&lt;br /&gt;
			o_multiplication_correct[$2]++&lt;br /&gt;
		} &lt;br /&gt;
			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR&lt;br /&gt;
numproblems[$2]++&lt;br /&gt;
&lt;br /&gt;
#Determine if it is a compound operation if so increment by one, this requires 4 if&#039;s as we have to check if each of them exists in&lt;br /&gt;
# conjuntion with another.&lt;br /&gt;
#Keep track of total compounds and compounds correct. &lt;br /&gt;
#Else-if structure required because if stringed If&#039;s were used each compound match would register twice.&lt;br /&gt;
&lt;br /&gt;
if ( match($3, /\//) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	 &lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if (  match($3, /[0-9]\-[0-9]/) &amp;amp;&amp;amp; (match($3, /\//) || match($3, /\+/) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
	compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
else if ( match($3, /\+/) &amp;amp;&amp;amp; ( match($3, /[0-9]\-[0-9]/) || match($3, /\//) || match($3, /\*/) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
else if  ( match($3, /\*/) &amp;amp;&amp;amp; ( match($3, /\+/) ||  match($3, /[0-9]\-[0-9]/) || match($3, /\//) ) ) &lt;br /&gt;
{&lt;br /&gt;
		compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
else # This allows for easy way to harness non compound statements, instead of going through a whole new slew of logic statements. &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
		non_compound[$2]++&lt;br /&gt;
	&lt;br /&gt;
	if ($4 == &amp;quot;1&amp;quot;) #if correct&lt;br /&gt;
	{&lt;br /&gt;
		non_compound_correct[$2]++&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( $4 == &amp;quot;1&amp;quot; )&lt;br /&gt;
{totalcorrect[$2]++}&lt;br /&gt;
	&lt;br /&gt;
}#end of AWK_MAIN&lt;br /&gt;
END{&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#loops through all of the elements in the array CLASS[]&lt;br /&gt;
	#Here We will print out the students	&lt;br /&gt;
&lt;br /&gt;
for (student in CLASS) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
# A student doesnt understand order of operations if their is a greater than 20% difference in between compound &lt;br /&gt;
# operations and single operation instructions, but only if lower on the compound instruction side.  &lt;br /&gt;
&lt;br /&gt;
if ( ( (non_compound_correct[student] / non_compound[student]) - (compound_correct[student] / compound[student]) &amp;gt; .2 ) || &lt;br /&gt;
( (non_compound_correct[student] / non_compound[student]) ) &amp;lt; .7)&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;no&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
	understands= &amp;quot;yes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	#need to address divide by 0 issue&lt;br /&gt;
	printf(&amp;quot;%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-11s\n&amp;quot;, student,&lt;br /&gt;
int(o_addition_correct[student]*100/o_addition[student]), int(addition_correct[student]*100/addition[student]),&lt;br /&gt;
int(o_subtraction_correct[student]*100/o_addition[student]), int(subtraction_correct[student]*100/subtraction[student]),&lt;br /&gt;
int(o_multiplication_correct[student]*100/o_multiplication[student]),&lt;br /&gt;
int(multiplication_correct[student]*100/multiplication[student]), int(o_division_correct[student]*100/o_division[student]),&lt;br /&gt;
int(division_correct[student]*100/division[student]), understands)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} #end of AWK_END&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=28364</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=28364"/>
		<updated>2009-05-01T19:42:15Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Documentation &amp;amp; Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Description==&lt;br /&gt;
A custom [http://moodle.org/ Moodle] [http://docs.moodle.org/en/Quiz_module quiz module] which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with [http://wiki.sugarlabs.org/go/User:Gdk/4th_Grade_Maths Curriculum Standards].&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
* &#039;&#039;&#039;Project Manager:&#039;&#039;&#039; [http://wiki.sugarlabs.org/go/User:Wwdillingham Wesley Dillingham] &lt;br /&gt;
* &#039;&#039;&#039;Additional Group Members:&#039;&#039;&#039; [http://wiki.sugarlabs.org/go/User:jrgreen118 Jeremiah Green]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data Flow Diagram==&lt;br /&gt;
[[image:Teacher_Reporting_Diagram.jpg|800px|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
*Expand upon the PHP of the Moodle Quiz Module to parse questions involving mathematical operations for characteristics contained in the [http://www.doe.mass.edu/frameworks/current.html Massachusetts Curriculum Framework for Mathematics.] &lt;br /&gt;
&lt;br /&gt;
*Run Moodle with the modified quiz module on an XO running [http://wiki.laptop.org/go/School_server XS], The &#039;&#039;&#039;X&#039;&#039;&#039;O school &#039;&#039;&#039;S&#039;&#039;&#039;erver.&lt;br /&gt;
&lt;br /&gt;
==Milestones==&lt;br /&gt;
===Week 8===&lt;br /&gt;
*Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
*Have [http://download.moodle.org/ Moodle&#039;s latest stable release] functioning in an XS School Server [http://wiki.laptop.org/go/XS-on-XO VirtualBox] OSE Virtual Machine&lt;br /&gt;
&lt;br /&gt;
===Week 9===&lt;br /&gt;
*Have Moodle&#039;s latest stable release functioning on an XO running XS using the techniques outlined [http://wiki.laptop.org/go/XS-on-XO here.]&lt;br /&gt;
*Have PHP calls successfully querying mock student results from Moodle&#039;s MySQL database running on XS.&lt;br /&gt;
*Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).&lt;br /&gt;
*Parse mathematical operation and check for compliance with standard 4.P.3 Determine values of variables in simple equations, e.g., 4106 – x = 37, 5 = y + 3, and s – y = 3.&lt;br /&gt;
&lt;br /&gt;
===Week 10===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Documentation &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post XS School Server Installation Configuration:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum groupinstall &amp;quot;GNOME Desktop Environment&amp;quot;&lt;br /&gt;
&lt;br /&gt;
edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome&lt;br /&gt;
&lt;br /&gt;
yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs&lt;br /&gt;
&lt;br /&gt;
service mysqld start&lt;br /&gt;
mysqladmin -u root password &#039;mySecurePassword&#039;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
mysql&amp;gt; CREATE DATABASE moodle CHARSET &#039;utf8&#039;;&lt;br /&gt;
mysql&amp;gt; exit;&lt;br /&gt;
chkconfig mysqld on&lt;br /&gt;
--starts sql server; adds root admin user; logs into server and creates DB; &lt;br /&gt;
--turns the service on on boot.&lt;br /&gt;
&lt;br /&gt;
cd /var/www&lt;br /&gt;
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle&lt;br /&gt;
--download and install/update with the latest version of moodle&lt;br /&gt;
&lt;br /&gt;
mkdir moodledata&lt;br /&gt;
chown -R apache:apache moodle&lt;br /&gt;
chown -R apache:apache moodledata&lt;br /&gt;
--make directory in /var/www/ and change permissions.&lt;br /&gt;
&lt;br /&gt;
edit the file /etc/httpd/conf/httpd.conf&lt;br /&gt;
change DocumentRoot &amp;quot;/var/www/html&amp;quot; to DocumentRoot &amp;quot;/var/www/moodle&amp;quot;&lt;br /&gt;
change &amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt; to &amp;lt;Directory &amp;quot;/var/www/moodle&amp;quot;&amp;gt;&lt;br /&gt;
then you must restart the apache server by issuing the command:&lt;br /&gt;
service httpd restart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installing MySQL:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenInstalling.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenStartingMysql.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Logging in to MySQL Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenLoginSqlServ.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Creating Database:&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
[[image:ScreenCreateDB.png]]&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Math4Team/RIT/Alumni/Spring-2009&amp;diff=28253</id>
		<title>Math4Team/RIT/Alumni/Spring-2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Math4Team/RIT/Alumni/Spring-2009&amp;diff=28253"/>
		<updated>2009-04-29T18:33:03Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Jeremiah Green */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Computer Engineering Technology==&lt;br /&gt;
===[[User:Nikeunltd|Kennedy Kong]]===&lt;br /&gt;
2nd Year&lt;br /&gt;
&lt;br /&gt;
==Computer Science==&lt;br /&gt;
===[[User:Mdd8919 | Mitchell DeMarco]]===&lt;br /&gt;
xl&lt;br /&gt;
&lt;br /&gt;
3rd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:Enimihil|Gregory Stevens]]===&lt;br /&gt;
5th Year (Graduating after this class)&lt;br /&gt;
&lt;br /&gt;
Shirt size: Large&lt;br /&gt;
&lt;br /&gt;
===[[User:Jck1089|James Kolb]]===&lt;br /&gt;
4th Year (Double majoring in Math)&lt;br /&gt;
&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
===[[User:Qalthos|Nathaniel Case]]===&lt;br /&gt;
3rd Year&amp;lt;br&amp;gt;&lt;br /&gt;
Large shirt size&lt;br /&gt;
&lt;br /&gt;
===[[User:EricMallon|Eric Mallon]]===&lt;br /&gt;
3rd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:Eldrac|G. Tyler Bragdon]]===&lt;br /&gt;
3rd Year (Minoring in Math)&lt;br /&gt;
&lt;br /&gt;
==Information Technology==&lt;br /&gt;
===[[User:bjr9081|Brendan Reen]]===&lt;br /&gt;
4th Year&lt;br /&gt;
&lt;br /&gt;
===[[User:bbl5660|Brian Long]]===&lt;br /&gt;
4th Year&lt;br /&gt;
Medium T-Shirt Size&lt;br /&gt;
&lt;br /&gt;
===[[User:Echo35|Anthony Lubrani]]===&lt;br /&gt;
2nd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:jrgreen118|Jeremiah Green]]===&lt;br /&gt;
5th year &amp;lt;br&amp;gt;&lt;br /&gt;
Shirt Size: Extra Large&lt;br /&gt;
&lt;br /&gt;
===[[User:wwdillingham|Wesley Dillingham]]===&lt;br /&gt;
5th year&lt;br /&gt;
&lt;br /&gt;
==Photo Journalism==&lt;br /&gt;
===[[User:Jsang1|Jonathan Sanger]]===&lt;br /&gt;
1st year &amp;lt;br&amp;gt;&lt;br /&gt;
L&lt;br /&gt;
&lt;br /&gt;
==Networking==&lt;br /&gt;
===[[User:Classclownfish | Abbi Honeycutt]]===&lt;br /&gt;
1st year&lt;br /&gt;
&lt;br /&gt;
Small?&lt;br /&gt;
&lt;br /&gt;
===[[User:Epsilon748 | Anthony King -XL]]===&lt;br /&gt;
2nd year&lt;br /&gt;
&lt;br /&gt;
===[[User:Sss1406 | Steven Schoenfeld]]===&lt;br /&gt;
4th Year NSSA Student&lt;br /&gt;
&lt;br /&gt;
Shirt Size: Large&lt;br /&gt;
&lt;br /&gt;
===[[User:Jfinney | Jameson Finney]]===&lt;br /&gt;
3rd year&lt;br /&gt;
===[[User:dbj4366 | Dennis Jalbert]]===&lt;br /&gt;
5th year (Graduating after this quarter)&amp;lt;br /&amp;gt;&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
==Software Engineering==&lt;br /&gt;
===[[User:Cdaniels29 | Chris Daniels]]===&lt;br /&gt;
5th Year&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
===[[User:Dpk3062 | Doug Krofcheck]]===&lt;br /&gt;
5th Year&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Math4Team/RIT/Alumni/Spring-2009&amp;diff=28252</id>
		<title>Math4Team/RIT/Alumni/Spring-2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Math4Team/RIT/Alumni/Spring-2009&amp;diff=28252"/>
		<updated>2009-04-29T18:32:41Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* Jeremiah Green */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Computer Engineering Technology==&lt;br /&gt;
===[[User:Nikeunltd|Kennedy Kong]]===&lt;br /&gt;
2nd Year&lt;br /&gt;
&lt;br /&gt;
==Computer Science==&lt;br /&gt;
===[[User:Mdd8919 | Mitchell DeMarco]]===&lt;br /&gt;
xl&lt;br /&gt;
&lt;br /&gt;
3rd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:Enimihil|Gregory Stevens]]===&lt;br /&gt;
5th Year (Graduating after this class)&lt;br /&gt;
&lt;br /&gt;
Shirt size: Large&lt;br /&gt;
&lt;br /&gt;
===[[User:Jck1089|James Kolb]]===&lt;br /&gt;
4th Year (Double majoring in Math)&lt;br /&gt;
&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
===[[User:Qalthos|Nathaniel Case]]===&lt;br /&gt;
3rd Year&amp;lt;br&amp;gt;&lt;br /&gt;
Large shirt size&lt;br /&gt;
&lt;br /&gt;
===[[User:EricMallon|Eric Mallon]]===&lt;br /&gt;
3rd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:Eldrac|G. Tyler Bragdon]]===&lt;br /&gt;
3rd Year (Minoring in Math)&lt;br /&gt;
&lt;br /&gt;
==Information Technology==&lt;br /&gt;
===[[User:bjr9081|Brendan Reen]]===&lt;br /&gt;
4th Year&lt;br /&gt;
&lt;br /&gt;
===[[User:bbl5660|Brian Long]]===&lt;br /&gt;
4th Year&lt;br /&gt;
Medium T-Shirt Size&lt;br /&gt;
&lt;br /&gt;
===[[User:Echo35|Anthony Lubrani]]===&lt;br /&gt;
2nd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:jrgreen118|Jeremiah Green]]===&lt;br /&gt;
5th year&lt;br /&gt;
Shirt Size: Extra Large&lt;br /&gt;
&lt;br /&gt;
===[[User:wwdillingham|Wesley Dillingham]]===&lt;br /&gt;
5th year&lt;br /&gt;
&lt;br /&gt;
==Photo Journalism==&lt;br /&gt;
===[[User:Jsang1|Jonathan Sanger]]===&lt;br /&gt;
1st year &amp;lt;br&amp;gt;&lt;br /&gt;
L&lt;br /&gt;
&lt;br /&gt;
==Networking==&lt;br /&gt;
===[[User:Classclownfish | Abbi Honeycutt]]===&lt;br /&gt;
1st year&lt;br /&gt;
&lt;br /&gt;
Small?&lt;br /&gt;
&lt;br /&gt;
===[[User:Epsilon748 | Anthony King -XL]]===&lt;br /&gt;
2nd year&lt;br /&gt;
&lt;br /&gt;
===[[User:Sss1406 | Steven Schoenfeld]]===&lt;br /&gt;
4th Year NSSA Student&lt;br /&gt;
&lt;br /&gt;
Shirt Size: Large&lt;br /&gt;
&lt;br /&gt;
===[[User:Jfinney | Jameson Finney]]===&lt;br /&gt;
3rd year&lt;br /&gt;
===[[User:dbj4366 | Dennis Jalbert]]===&lt;br /&gt;
5th year (Graduating after this quarter)&amp;lt;br /&amp;gt;&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
==Software Engineering==&lt;br /&gt;
===[[User:Cdaniels29 | Chris Daniels]]===&lt;br /&gt;
5th Year&lt;br /&gt;
Medium&lt;br /&gt;
&lt;br /&gt;
===[[User:Dpk3062 | Doug Krofcheck]]===&lt;br /&gt;
5th Year&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=28009</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=28009"/>
		<updated>2009-04-24T21:04:44Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* &amp;quot;Required Accomplishment&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
Ideally we envision this project to evolve into a collection of scripts or methods. These methods,specific to an individual game will be modified to parse and report relevant information to a central host program which keeps track of progress from multiple activities. This host program will live on the instructors machine for monitoring purposes and on the students machine only so far as to coordinate the correct implementation of the proper scripts.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
*[http://wiki.sugarlabs.org/go/User:Wwdillingham Wesley Dillingham] will be in charge of the scripts involved with student and class performance, Parsing the mathematical expression. Additionally, he will be responsible for the integration with Kuku.&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.sugarlabs.org/go/User:jrgreen118 Jeremiah Green] will be responsible for automating the collective delivery of each student&#039;s game data (Student ID ,Problem, Correctness) to the Teachers XO. and format their results to allow for Wes&#039;s methods to compute the relevant class-wide statistics.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
Using a combination of shell scripts, AWK, and Python we will be developing a system which reads in from a file, students identifiable information, the question itself (a mathematical operation), and the students correctness. From this studentinfo.dat file we will report to the teacher: Number of questions, total percent correct, percent correct for multiplication, division, addition, and subtraction.&lt;br /&gt;
&lt;br /&gt;
==Week by week milestones==&lt;br /&gt;
*Week 8: Have both scripts succesfully tabulating relevant information&lt;br /&gt;
&lt;br /&gt;
*Week 9 :Have student to teacher data information transfer succesfully functioning with scripts.&lt;br /&gt;
&lt;br /&gt;
*Week 10: Have integration with kuku, and a gui for teachers data retrieval.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Required Accomplishment&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Wes===&lt;br /&gt;
*Get StudentParser.awk to successfully calculate the accuracy for each mathematical operation, plus other relevant information TBD, one example will be success of division with remainders.&lt;br /&gt;
*Get ClassParser.awk to successfully calculate class-wide statistics on the same information&lt;br /&gt;
*Provide Grader.awk which grades each student, calculates a class average, tallys students in each grade interval.&lt;br /&gt;
&lt;br /&gt;
===Jeremiah===&lt;br /&gt;
* Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
* Install Moodle server and DBMS on a test Virtual Machine.&lt;br /&gt;
** Attempt PHP calls to the Moodle DBMS. &lt;br /&gt;
** Attempt to create a simple Moodle module extension which can be further built off of to provide further functionality.&lt;br /&gt;
* Provide a script to move StudentParser.awk&#039;s output to ClassParser.awk&#039;s input&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Wishlist Accomplishments &amp;quot;==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links &amp;amp; Resources==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;StudentParser.awk&#039;&#039;&#039;&#039;&#039; Input file format:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Field Structure:&lt;br /&gt;
&amp;quot;Mathematical Operation&amp;quot; &amp;quot;Correct?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
45/67 y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;StudentParser.awk&#039;&#039;&#039;&#039;&#039; Output file format *Incomplete*&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Field Structure:&lt;br /&gt;
line 1: &amp;quot;Student MAC-Address&amp;quot;&lt;br /&gt;
line 2+: &amp;quot;Operation type&amp;quot; &amp;quot;correct in decimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
0:1e:8c:25:a0:c1&lt;br /&gt;
+ .86&lt;br /&gt;
- .84&lt;br /&gt;
x .91&lt;br /&gt;
/ .86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Grader.awk:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/awk&lt;br /&gt;
&lt;br /&gt;
# grades -- average student grades and determine&lt;br /&gt;
# letter grade as well as class averages&lt;br /&gt;
# at the command line run: awk -f grader.awk grades.dat&lt;br /&gt;
&lt;br /&gt;
BEGIN { OFS = &amp;quot;\t&amp;quot;;     &amp;quot;date +%H:%M:%S&amp;quot; | getline current_time&lt;br /&gt;
     close(&amp;quot;date +%H:%M:%S&amp;quot;)&lt;br /&gt;
     print &amp;quot;Report printed on &amp;quot; current_time&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
# action applied to all input lines&lt;br /&gt;
{&lt;br /&gt;
	# add up the grades&lt;br /&gt;
	total = 0&lt;br /&gt;
	for (i = 3; i &amp;lt;= NF; ++i) # i=3 skips first 2 fields - last name, first name&lt;br /&gt;
		total+=$i&lt;br /&gt;
		&lt;br /&gt;
	# calculate average&lt;br /&gt;
	avg = total / (NF - 2)&lt;br /&gt;
	&lt;br /&gt;
	# assign student&#039;s average to element of array&lt;br /&gt;
	class_avg[NR] = avg&lt;br /&gt;
	&lt;br /&gt;
	# determine letter grade&lt;br /&gt;
	if (avg &amp;gt;= 90) grade=&amp;quot;A&amp;quot;&lt;br /&gt;
	else if (avg &amp;gt;= 80) grade=&amp;quot;B&amp;quot;&lt;br /&gt;
	else if (avg &amp;gt;= 70) grade=&amp;quot;C&amp;quot;&lt;br /&gt;
	else if (avg &amp;gt;= 60) grade=&amp;quot;D&amp;quot;&lt;br /&gt;
	else grade=&amp;quot;F&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	# increment counter for letter grade array&lt;br /&gt;
	++class_grade[grade]&lt;br /&gt;
	&lt;br /&gt;
	# print student first name, last name, average interger value, and letter grade&lt;br /&gt;
	print $2 &amp;quot; &amp;quot; $1, int(avg), grade#, NF, NF&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# print out class statistics&lt;br /&gt;
END  {&lt;br /&gt;
	# calculate class average&lt;br /&gt;
	for (x = 1; x &amp;lt;= NR; x++)&lt;br /&gt;
		class_avg_total += class_avg[x]&lt;br /&gt;
	class_average = class_avg_total / NR&lt;br /&gt;
	&lt;br /&gt;
	# determine how many above/below average&lt;br /&gt;
	for (x = 1; x &amp;lt;= NR; x++)&lt;br /&gt;
		if (class_avg[x] &amp;gt;= class_average)&lt;br /&gt;
			++above_average&lt;br /&gt;
		else&lt;br /&gt;
			++below_average&lt;br /&gt;
			&lt;br /&gt;
	# print results&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;Class Average: &amp;quot;, class_average&lt;br /&gt;
	print &amp;quot;At or Above Average: &amp;quot;, above_average&lt;br /&gt;
	print &amp;quot;Below Average: &amp;quot;, below_average&lt;br /&gt;
	&lt;br /&gt;
	# print number of students per letter grade&lt;br /&gt;
	for (letter_grade in class_grade)&lt;br /&gt;
		print letter_grade &amp;quot;:&amp;quot;, class_grade[letter_grade]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Helpful stuff==&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=28008</id>
		<title>Teacher Reporting</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Teacher_Reporting&amp;diff=28008"/>
		<updated>2009-04-24T20:58:56Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: /* &amp;quot;Required Accomplishment&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description==&lt;br /&gt;
Ideally we envision this project to evolve into a collection of scripts or methods. These methods,specific to an individual game will be modified to parse and report relevant information to a central host program which keeps track of progress from multiple activities. This host program will live on the instructors machine for monitoring purposes and on the students machine only so far as to coordinate the correct implementation of the proper scripts.&lt;br /&gt;
&lt;br /&gt;
==Group Members==&lt;br /&gt;
*[http://wiki.sugarlabs.org/go/User:Wwdillingham Wesley Dillingham] will be in charge of the scripts involved with student and class performance, Parsing the mathematical expression. Additionally, he will be responsible for the integration with Kuku.&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.sugarlabs.org/go/User:jrgreen118 Jeremiah Green] will be responsible for automating the collective delivery of each student&#039;s game data (Student ID ,Problem, Correctness) to the Teachers XO. and format their results to allow for Wes&#039;s methods to compute the relevant class-wide statistics.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
Using a combination of shell scripts, AWK, and Python we will be developing a system which reads in from a file, students identifiable information, the question itself (a mathematical operation), and the students correctness. From this studentinfo.dat file we will report to the teacher: Number of questions, total percent correct, percent correct for multiplication, division, addition, and subtraction.&lt;br /&gt;
&lt;br /&gt;
==Week by week milestones==&lt;br /&gt;
*Week 8: Have both scripts succesfully tabulating relevant information&lt;br /&gt;
&lt;br /&gt;
*Week 9 :Have student to teacher data information transfer succesfully functioning with scripts.&lt;br /&gt;
&lt;br /&gt;
*Week 10: Have integration with kuku, and a gui for teachers data retrieval.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Required Accomplishment&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Wes&#039;&#039;&#039;&lt;br /&gt;
**Get StudentParser.awk to successfully calculate the accuracy for each mathematical operation, plus other relevant information TBD, one example will be success of division with remainders.&lt;br /&gt;
**Get ClassParser.awk to successfully calculate class-wide statistics on the same information&lt;br /&gt;
**Provide Grader.awk which grades each student, calculates a class average, tallys students in each grade interval.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Jeremiah&#039;&#039;&#039;&lt;br /&gt;
** Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.&lt;br /&gt;
** Install Moodle server and DBMS on a test Virtual Machine.&lt;br /&gt;
*** Attempt PHP calls to the Moodle DBMS. &lt;br /&gt;
*** Attempt to create a simple Moodle module extension which can be further built off of to provide further functionality.&lt;br /&gt;
** Provide a script to move StudentParser.awk&#039;s output to ClassParser.awk&#039;s input&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Wishlist Accomplishments &amp;quot;==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links &amp;amp; Resources==&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;StudentParser.awk&#039;&#039;&#039;&#039;&#039; Input file format:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Field Structure:&lt;br /&gt;
&amp;quot;Mathematical Operation&amp;quot; &amp;quot;Correct?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
45/67 y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;StudentParser.awk&#039;&#039;&#039;&#039;&#039; Output file format *Incomplete*&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Field Structure:&lt;br /&gt;
line 1: &amp;quot;Student MAC-Address&amp;quot;&lt;br /&gt;
line 2+: &amp;quot;Operation type&amp;quot; &amp;quot;correct in decimal&amp;quot;&lt;br /&gt;
&lt;br /&gt;
example:&lt;br /&gt;
0:1e:8c:25:a0:c1&lt;br /&gt;
+ .86&lt;br /&gt;
- .84&lt;br /&gt;
x .91&lt;br /&gt;
/ .86&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Grader.awk:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/awk&lt;br /&gt;
&lt;br /&gt;
# grades -- average student grades and determine&lt;br /&gt;
# letter grade as well as class averages&lt;br /&gt;
# at the command line run: awk -f grader.awk grades.dat&lt;br /&gt;
&lt;br /&gt;
BEGIN { OFS = &amp;quot;\t&amp;quot;;     &amp;quot;date +%H:%M:%S&amp;quot; | getline current_time&lt;br /&gt;
     close(&amp;quot;date +%H:%M:%S&amp;quot;)&lt;br /&gt;
     print &amp;quot;Report printed on &amp;quot; current_time&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
# action applied to all input lines&lt;br /&gt;
{&lt;br /&gt;
	# add up the grades&lt;br /&gt;
	total = 0&lt;br /&gt;
	for (i = 3; i &amp;lt;= NF; ++i) # i=3 skips first 2 fields - last name, first name&lt;br /&gt;
		total+=$i&lt;br /&gt;
		&lt;br /&gt;
	# calculate average&lt;br /&gt;
	avg = total / (NF - 2)&lt;br /&gt;
	&lt;br /&gt;
	# assign student&#039;s average to element of array&lt;br /&gt;
	class_avg[NR] = avg&lt;br /&gt;
	&lt;br /&gt;
	# determine letter grade&lt;br /&gt;
	if (avg &amp;gt;= 90) grade=&amp;quot;A&amp;quot;&lt;br /&gt;
	else if (avg &amp;gt;= 80) grade=&amp;quot;B&amp;quot;&lt;br /&gt;
	else if (avg &amp;gt;= 70) grade=&amp;quot;C&amp;quot;&lt;br /&gt;
	else if (avg &amp;gt;= 60) grade=&amp;quot;D&amp;quot;&lt;br /&gt;
	else grade=&amp;quot;F&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	# increment counter for letter grade array&lt;br /&gt;
	++class_grade[grade]&lt;br /&gt;
	&lt;br /&gt;
	# print student first name, last name, average interger value, and letter grade&lt;br /&gt;
	print $2 &amp;quot; &amp;quot; $1, int(avg), grade#, NF, NF&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# print out class statistics&lt;br /&gt;
END  {&lt;br /&gt;
	# calculate class average&lt;br /&gt;
	for (x = 1; x &amp;lt;= NR; x++)&lt;br /&gt;
		class_avg_total += class_avg[x]&lt;br /&gt;
	class_average = class_avg_total / NR&lt;br /&gt;
	&lt;br /&gt;
	# determine how many above/below average&lt;br /&gt;
	for (x = 1; x &amp;lt;= NR; x++)&lt;br /&gt;
		if (class_avg[x] &amp;gt;= class_average)&lt;br /&gt;
			++above_average&lt;br /&gt;
		else&lt;br /&gt;
			++below_average&lt;br /&gt;
			&lt;br /&gt;
	# print results&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;Class Average: &amp;quot;, class_average&lt;br /&gt;
	print &amp;quot;At or Above Average: &amp;quot;, above_average&lt;br /&gt;
	print &amp;quot;Below Average: &amp;quot;, below_average&lt;br /&gt;
	&lt;br /&gt;
	# print number of students per letter grade&lt;br /&gt;
	for (letter_grade in class_grade)&lt;br /&gt;
		print letter_grade &amp;quot;:&amp;quot;, class_grade[letter_grade]&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Helpful stuff==&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Jrgreen118&amp;diff=27085</id>
		<title>User:Jrgreen118</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Jrgreen118&amp;diff=27085"/>
		<updated>2009-04-10T13:07:59Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Personal Info==&lt;br /&gt;
Name: Jeremiah Green&amp;lt;br&amp;gt;&lt;br /&gt;
Email: jrgreen118@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Phone: (303) 382-8942&lt;br /&gt;
&lt;br /&gt;
==School Info==&lt;br /&gt;
Major: Information Technology&amp;lt;br&amp;gt;&lt;br /&gt;
Year: 5&amp;lt;br&amp;gt;&lt;br /&gt;
Concentration: Networking and Systems Administration&lt;br /&gt;
&lt;br /&gt;
==Project Info==&lt;br /&gt;
Multiplication Minute&amp;lt;br&amp;gt;&lt;br /&gt;
Upload of student progress/responses to teacher&amp;lt;br&amp;gt;&lt;br /&gt;
Researched Frotz application.&lt;br /&gt;
&lt;br /&gt;
==Programming Experience==&lt;br /&gt;
Java, Actionscript, Javascript, HTML, XHTML, CSS...etc.&amp;lt;br&amp;gt;&lt;br /&gt;
no Python.&lt;br /&gt;
&lt;br /&gt;
==Standards==&lt;br /&gt;
4.N.3&amp;lt;br&amp;gt;&lt;br /&gt;
4.N.4&amp;lt;br&amp;gt;&lt;br /&gt;
4.N.9&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Jrgreen118&amp;diff=25825</id>
		<title>User:Jrgreen118</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Jrgreen118&amp;diff=25825"/>
		<updated>2009-04-07T00:27:20Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Personal Info==&lt;br /&gt;
Name: Jeremiah Green&amp;lt;br&amp;gt;&lt;br /&gt;
Email: jrgreen118@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Phone: (303) 382-8942&lt;br /&gt;
&lt;br /&gt;
==School Info==&lt;br /&gt;
Major: Information Technology&amp;lt;br&amp;gt;&lt;br /&gt;
Year: 5&amp;lt;br&amp;gt;&lt;br /&gt;
Concentration: Networking and Systems Administration&lt;br /&gt;
&lt;br /&gt;
==Project Info==&lt;br /&gt;
Multiplication Minute&amp;lt;br&amp;gt;&lt;br /&gt;
Upload of student progress/responses to teacher&amp;lt;br&amp;gt;&lt;br /&gt;
Researched Frotz application.&lt;br /&gt;
&lt;br /&gt;
==Programming Experience==&lt;br /&gt;
Java, Actionscript, Javascript, HTML, XHTML, CSS...etc.&amp;lt;br&amp;gt;&lt;br /&gt;
no Python.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Math4Team/RIT/Alumni/Spring-2009&amp;diff=25824</id>
		<title>Math4Team/RIT/Alumni/Spring-2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Math4Team/RIT/Alumni/Spring-2009&amp;diff=25824"/>
		<updated>2009-04-07T00:22:18Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Computer Engineering Technology==&lt;br /&gt;
===Kennedy Kong===&lt;br /&gt;
2nd Year&lt;br /&gt;
I am interested in having the other side touch pads running and integrate them with some kinda of software. &lt;br /&gt;
I am interested in also having a web cam program running, but that seems to be taken by an external team. I might collaborate with the webcam group.&lt;br /&gt;
&lt;br /&gt;
==Computer Science==&lt;br /&gt;
===[[User:Mdd8919 | Mitchell DeMarco]]===&lt;br /&gt;
3rd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:Enimihil|Gregory Stevens]]===&lt;br /&gt;
5th Year (Graduating after this class)&lt;br /&gt;
&lt;br /&gt;
===James Kolb===&lt;br /&gt;
4th Year (Double majoring in Math)&lt;br /&gt;
&lt;br /&gt;
===Nathaniel Case===&lt;br /&gt;
3rd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:EricMallon|Eric Mallon]]===&lt;br /&gt;
3rd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:Eldrac|G. Tyler Bragdon]]===&lt;br /&gt;
3rd Year (Minoring in Math)&lt;br /&gt;
&lt;br /&gt;
==Information Technology==&lt;br /&gt;
===[[User:bjr9081|Brendan Reen]]===&lt;br /&gt;
4th Year&lt;br /&gt;
&lt;br /&gt;
===[[User:bbl5660|Brian Long]]===&lt;br /&gt;
4th Year&lt;br /&gt;
&lt;br /&gt;
===[[User:Echo35|Anthony Lubrani]]===&lt;br /&gt;
2nd Year&lt;br /&gt;
&lt;br /&gt;
===[[User:jrgreen118|Jeremiah Green]]===&lt;br /&gt;
5th year&lt;br /&gt;
&lt;br /&gt;
==Photo Journalism==&lt;br /&gt;
===Jonathan Sanger===&lt;br /&gt;
1st year&lt;br /&gt;
&lt;br /&gt;
==Networking==&lt;br /&gt;
===[[User:Classclownfish | Abbi Honeycutt]]===&lt;br /&gt;
1st year&lt;br /&gt;
&lt;br /&gt;
===[[User:Epsilon748 | Anthony King]]===&lt;br /&gt;
2nd year&lt;br /&gt;
===[[User:Sss1406 | Steven Schoenfeld]]===&lt;br /&gt;
4th year&lt;br /&gt;
&lt;br /&gt;
===Jameson Finney===&lt;br /&gt;
3rd year&lt;br /&gt;
===[[User:dbj4366 | Dennis Jalbert]]===&lt;br /&gt;
5th year (Graduating after this quarter)&lt;br /&gt;
&lt;br /&gt;
==Software Engineering==&lt;br /&gt;
===[[User:Cdaniels29 | Chris Daniels]]===&lt;br /&gt;
5th Year&lt;br /&gt;
&lt;br /&gt;
===Doug Krofcheck===&lt;br /&gt;
5th Year&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Jrgreen118&amp;diff=25823</id>
		<title>User:Jrgreen118</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Jrgreen118&amp;diff=25823"/>
		<updated>2009-04-07T00:19:36Z</updated>

		<summary type="html">&lt;p&gt;Jrgreen118: New page: ==Personal Info== Name: Jeremiah Green&amp;lt;br&amp;gt; Email: jrgreen118@gmail.com&amp;lt;br&amp;gt; Phone: (303) 382-8942  ==School Info== Major: Information Technology&amp;lt;br&amp;gt; Year: 5&amp;lt;br&amp;gt; Concentration: Networking an...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Personal Info==&lt;br /&gt;
Name: Jeremiah Green&amp;lt;br&amp;gt;&lt;br /&gt;
Email: jrgreen118@gmail.com&amp;lt;br&amp;gt;&lt;br /&gt;
Phone: (303) 382-8942&lt;br /&gt;
&lt;br /&gt;
==School Info==&lt;br /&gt;
Major: Information Technology&amp;lt;br&amp;gt;&lt;br /&gt;
Year: 5&amp;lt;br&amp;gt;&lt;br /&gt;
Concentration: Networking and Systems Administration&lt;br /&gt;
&lt;br /&gt;
==Programming Experience==&lt;br /&gt;
Java, Actionscript, Javascript, HTML, XHTML, CSS...etc.&amp;lt;br&amp;gt;&lt;br /&gt;
no Python.&lt;/div&gt;</summary>
		<author><name>Jrgreen118</name></author>
	</entry>
</feed>